Закрытие позиций. По сигналу индикатора. - страница 6

 
 

Не думаю, что в коде. И вот почему. Код простейший. Но дело не в этом. А всё-таки вот в чем:

if(OrderProfit() > tp)    { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);  }

Допустим , что tp=49. При лоте=0.1, позиция закроется при достижении профита =50 пипсов. Далее пусть лот у нас увеличился с 0.1 до 0.2. Что мы получим в этом случае?

Лот уже удвоенный и профит tp=50 мы п0лучим в два раза быстрее. Достаточно цене пройти в нашу сторону всего 25 пунктов! Удвоенный лот даст нам в сумме искомые =50 ! И конечно позиция закроется ! Аналогично будет происходить дело в убыточной зоне с переменной "-sl". И советник, таким образом, будет работать совсем по иному принципу. Не так, как изначально предполагалось...

Теперь встает другой вопрос. Как рaзмер переменной "tp" поставить в соответствие с изменяющимся размером лота ? Чтобы значения срабатывания функции OrderProfit() менялись пропорционально размеру лота ?

 
Нда, OrderProfit() я не заметил. Его надо делить на размер лота.
 
Сделал. Благодарю. Заработало....
 

Вылезла опять проблема. На ровном месте. Откуда и не ждал... Возникла острая необходимость (для участия в конкурсе) применить в моем советнике лот малого размера, = 0.01.

Однако ИСПОЛЬЗУЕМАЯ библиотека расчета лотов B-lots И.Кима не предусматривает такого размера, т.к. там есть строка:

if (dLot<0.1) dLot=0.1;

Недолго думая, изменил строку так: if (dLot<0.01) dLot=0.01; И В СВОЙСТВАХ соотв. задал Lots=0.01

Но к моему удивлению (без видимых причин) лот так и остается равным =0.1 ! Пробовал и так и сяк! - ничего не получается! Пож., кто знает, как предусмотреть работу библиотеки от лота=0.01, подскажите. ..

//|                                                       b-Lots.mqh |
//|                                           Ким Игорь В. aka KimIV |
//|  21.12.2005  Библиотека функций расчёта размера лота.            |
 
//------- Внешние параметры модуля -----------------------------------
extern string _Parameters_b_Lots = "---------- Параметры модуля расчёта лота";
extern int LotsWayChoice  = 0;    // Способ выбора рабочего лота:
extern double Lots        = 0.01;  // Фиксированный размер лота
extern int LotsPercent    = 10;   // Процент от депозита
extern int LotsDeltaDepo  = 200;  // Коэффициент приращения депозита
extern int LotsDepoForOne = 500;  // Размер депозита для одного минилота
extern int LotsMax        = 1000; // Максимальное количество минилотов
//+------------------------------------------------------------------+
//| Главная функция получения размера лота (вызывается из советника) |
//+------------------------------------------------------------------+
double GetSizeLot(){
  double dLot;
  if (LotsWayChoice==0) dLot=Lots;
 
  // фиксированный процент от депозита
  if (LotsWayChoice==1)
  {    dLot=MathCeil(AccountFreeMargin()/10000*LotsPercent)/10;  }
 
  // фракционно-пропорциональный
  if (LotsWayChoice==2)  { 
    int k=LotsDepoForOne;
    for (double i=2; i<=LotsMax; i++)    {
      k=k+i*LotsDeltaDepo;
      if (k>AccountFreeMargin())
      {        dLot=(i-1)/10; break;      }
    }
  }
 
  // фракционно-фиксированный
  if (LotsWayChoice==3)
  {    dLot=MathCeil((AccountFreeMargin()-LotsDepoForOne)/LotsDeltaDepo)/10;  }
 
  if (dLot<0.01) dLot=0.01;
  
  return(dLot);
}
 
Прежде всего проверьте минимаьный допустимый размер лота функцией Marketinfo() на текущем залогиненном счете.
MODE_MINLOT - если он больше 0.01, то работать с объемами 0.01 тестер не будет.
 

Благодарю. На счету допускается работать лотом=0.01.

Разобрался. Всё заработало...

 

Привет всем от "чайника"

Я только начинаю вникать в MQL, разбираю и осторожно модифицирую известный Moving Average. Подскажите кто-нибудь

код, чтобы сделка открывалась не с открытием нового бара, а сразу при касании МА на отскок (подход сверху - бай, подход снизу - сел)?

И можно ли сделать то же самое, от другого объекта, например, линии тренда?

 
Вроде где-то видел такой эксперт. Посмотри вот здесь - http://www.metatrader4.com/ru/forum/4736/
 

Добрый день всем. Хотел было открыть новую тему, но потом решил поставить вопрос здесь, в своей ветке... Хотелось бы узнать мнение присутствующих по такому вопросу. "Сваял" (как сумел) эксперта. В тестере работает так, что просто - заглядение! Глазам своим не поверил! За несколько дней работы постоянным лотом = 0.1 эксперт способен увеличить депозит в несколько раз! Я даже блок ММ не стал вставлять. А зачем? Подумал - "слишком хорошо, - тож нехорошо...!"

Эксперт работает без индикаторов, - По математической логике, а вместо трала предусмотрена плавающая отложка. Вот такие примерно результаты, в т.ч. и вне выборки, выдает эксперт



28.01.2008 - 08.02.2008, лот=0.1 (постоянный), тф=1мин

Качество моделирования 25.00%, Ошибки рассогласования графиков 0

Начальный депозит 1000.00

Чистая прибыль 21904.31

Прибыльность 1.86 Матожидание выигрыша 4.03

Абсолютная просадка 4.64 Максимальная просадка 656.18 (10.19%) Относительная просадка 10.19% (656.18)

Всего сделок 5433

Прибыльные сделки (% от всех) 2278 (41.93%)

Самая большая прибыльная сделка 75.46 убыточная сделка -11.93

Средняя прибыльная сделка 20.81 убыточная сделка -8.09

Понятно, что довольно потирая руки, я, - еле дождавшись понедельника, "зарядил" эксперт в онлайн на демосчет. И вот тут то обнаружилось, что в онлайне эксперт сливает....! Бывают, конечно, периоды стабильной профитной работы, но по большому счету - медленный слив...

Стал разбираться. Обнаружилось, что тестер внутри минутных баров модулирует тики сглаженные, т.е. гораздо менее "колючие", чем поступающие тики в онлайне. Поскольку эксперт явно пипсовочный, то это, видимо, имеет значение. Тем более, что тейк профит у меня в разы больше чем стоплосс!

Но я думаю, что всё-таки количество профита в тестере в данной ситуации должно перейти в качество работы в онлайне. Просто уверен в этом! Слишком уж лихо дает прибыль эксперт в тестере. А вот что здесь нужно сделать, чтобы эксперт прибыльно заработал в онлайне? Пож., прошу поделиться всех своими соображениями. Любыми. И толковыми и невероятными...

Причина обращения: