[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 1070

 
dzhini:
Но не работает :(
Значит не работает в другом месте или я что-то упустил
 
Reshetov:
Значит не работает в другом месте или я что-то упустил
В личку к вам можно постучаться?
 
dzhini:
В личку к вам можно постучаться?
Низя. Личка только для личного общения. А ошибки в коде нужно обсуждать публично, дабы другие на те же самые грабли не наступали или кто-то мог потом ссылкой на готовое решение поделиться.
 

Здравствуйте. вот такой простой код работает с ошибкой. Не могу сам понять причину.

Первый ордер открывает, модифицирует. второй открывает и... не модифицирует. Держит до слива.

В логах это:

"01:23:22 MarkTrade started for testing

01:23:22 2010.01.29 00:00 MarkTrade EURUSD,H1: open #1 buy 1.00 EURUSD at 1.3965 ok

01:23:22 2010.01.29 00:00 MarkTrade EURUSD,H1: modify #1 buy 1.00 EURUSD at 1.3965 sl: 1.3935 tp: 0.0000 ok

01:23:22 2010.01.29 00:28 Tester: stop loss #1 at 1.3935 (1.3935 / 1.3937)

01:23:22 2010.02.01 00:00 MarkTrade EURUSD,H1: open #2 buy 1.00 EURUSD at 1.3877 ok

01:23:22 2010.05.05 13:17 MarkTrade: stopped because of Stop Out

01:23:22 2010.05.05 13:17 Tester: order #2 is closed

added Понял свою ошибку! OrderSend возвращает не булево значение!

int start()
  {
  int total=OrdersTotal();
  if (total==0)
   {
      if (TimeHour(TimeCurrent())==00&&TimeMinute(TimeCurrent())==00)
      {
      Buy();
      }
   }
return(0);
  }
//////////////////////////
void Buy()
 {
 RefreshRates();
 if (OrderSend(Symbol(), OP_BUY, 1, NormalizeDouble(Ask,Digits), 0,0,0,"",123321,0,Blue)==true)
         {
           Modify();
         }
 }
/////////////////////////////
void Modify()
 {
    int total = OrdersTotal();
      for(int i=total-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS,MODE_TRADES);
       if (OrderModify (OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NormalizeDouble(30*Point,Digits),OrderTakeProfit(),0,CLR_NONE)== false) Modify();
       }
 }
 

доброе время суток

как создать тестер, который работает на разных рефреймах.

и прогнать по истории.

 

Доброе утро !

Проясните, пожалуйста. При оптимизации советника выявился момент, что при задании разного ТР при включенном генетическом алгоритме выдаются разные результаты в смысле, что, например, если задаю ТР=400, оптимизирую с шагом от 1 до 400, потом задаю 350 - оптимизирую с шагом от 1 до 350 и так до ТР=50. Так вот получается, что если прогнать только при ТР=400, то "пропускаются" результаты, которые есть при меньших ТР и более лучшие ! Это из-за генетики ? (в статье https://www.mql5.com/ru/articles/1347 (Создана: 25.12.2009 Автор: Rider) говорится: "...Генетика, безусловно, штука полезная, но в разумных пределах. Дело в том, что ее алгоритм может сыграть злую шутку - определится какой-то выигрышный, с её точки зрения, набор параметров, и вся дальнейшая оптимизация будет до самого окончания проходить "вокруг него". Чем это грозит, думаю, понятно. Большинство по-настоящему хороших вариантов, которые будут работать за пределами участка оптимизации, останутся "за бортом" и в таблицу "Результаты оптимизации" не попадут.

Выходов здесь несколько. Один кардинальный - отказаться от применения генетического алгоритма при оптимизации. Но это не всегда, по тем или иным причинам, подходит. Два следующих - это полумеры, но хотя бы что-то:

- провести оптимизацию не один раз, а два или больше. Первый раз, допустим, по "Balance", следующий по "Maximal Drawdown" или чему-то еще ..."). И получается тогда для того, чтобы не пропустить лучший результат, нужно прогонять с разными ТР + по-разным "оптимизируемым параметрам" и + ещё, например, 9 форвард-тестов опять же с 9 оптимизациями для каждого теста для надёжности?

 
eddy:

почемуто цикл не прерывается

Break в Вашем случае срабатывает и прерывает цикл лишь при выполнении условия. Если условие не выполняется, то цикл становится бесконечным. Попробуйте так.

int sec=Seconds();
       while(true) 
        {if(sec!=Seconds())          // new sec
          { int ms=GetTickCount(); }
       break;
        }
 
volshebnik:

break в Вашем случае срабатывает лишь при выполнении условия

это и нужно, для того он и в if()
 
Здравствуйте! Как в терминале изменить свойства символа? Пишет что минимальный уровень стопов 300. Не могу протестировать советника.
 
Профи

Для изменение спрэда например есть прога TakeMySpread, а как или чем можно изменить "Уровень стопов" для тестирования советника в разных условиях. Помогите!