[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 644

 
Myth63:


Дело в том, что я не особо силён в програмирование на MQL и у меня советник свой построен на принципе бейсика =) Открытому ордеру присваевается переменная. В терминале пишет что я перелогился и значение этой переменной при открытом ордере пропадает. Вот думаю, как сделать так если происходит перелог, чтобы он проверял на наличие отрытых позициях и присваивал переменным те значения что были выданы роботом. А советник то на тесте показывает не плохие показания.

В зависимости от того, что Вы хотите сохранить (какую информацию), можно использовать разные варианты:

  • информацию об ордере можно хранить в его комменте, а потом считывать из коммента;
  • нужную информацию можно писать в файл - медленный процесс;
  • ну, и чаще всего используемый вариант - писать в глобальные переменные терминала.
 
FelixFX:

Если не сложно - пример. На сколько я понимаю пока не выполнится цикл данные не будут обновляться??
int start()
{
//----
    while (!IsStopped() && IsExpertEnabled())
    {fMineFunction();}
//----
    return (0);
}
 
TarasBY:

Во время всего этого бесконечного цикла будут использоваться только одни и теже данные? Данные с новым тиком обновятся или нет?
 
Myth63:


Дело в том, что я не особо силён в програмирование на MQL и у меня советник свой построен на принципе бейсика =) Открытому ордеру присваевается переменная. В терминале пишет что я перелогился и значение этой переменной при открытом ордере пропадает. Вот думаю, как сделать так если происходит перелог, чтобы он проверял на наличие отрытых позициях и присваивал переменным те значения что были выданы роботом.

это вы про magic number что ли? Маловато информации, чтобы вам помочь... что за переменная, как присваивается - отсюда надо и плясать.

А советник то на тесте показывает не плохие показания.

100 сделок - это не показания, а удачный участок истории. Вот пара тысяч сделок за 2-3 года - такому уже можно верить.
 
FelixFX:

Во время всего этого бесконечного цикла будут использоваться только одни и теже данные? Данные с новым тиком обновятся или нет?
Нет. Чтобы обновлялось надо это. На вопрос по зацикливанию поисковик сайта насколько страниц выдаёт. Почитайте.
 
FelixFX:

Во время всего этого бесконечного цикла будут использоваться только одни и теже данные? Данные с новым тиком обновятся или нет?
Цикл позволяет "по кругу", не дожидаясь прихода следующего тика, запускать в работу Вашу функцию. Про какие данные Вы спрашиваете???
 
подскажите плиз может есть ф-ция какая встроенная чтобы я мог запускать некую ф-цию, написанную мной, просто при открытии каждого бара, а не на каждом тике. от руки написать это вроде бы не сложно, но когда часть кода выполняется по тикам, а часть - по барам, то программа больно сильно запутывается) заранее спасибо)
 
Qwertee:
подскажите плиз может есть ф-ция какая встроенная чтобы я мог запускать некую ф-цию, написанную мной, просто при открытии каждого бара, а не на каждом тике. от руки написать это вроде бы не сложно, но когда часть кода выполняется по тикам, а часть - по барам, то программа больно сильно запутывается) заранее спасибо)

так вы просто определяйте момент открытия нового бара и выполняйте вашу функцию.

определять появление нового бара можно, запоминая время открытия бара и затем сравнивая с текущим временем 0 бара. Если новое время больше предыдущего, значит имеем новый бар.

 

sergeev спасибо за совет, вроде бы действенно)

хорошо, еще момент

в моем советнике такое ветвление:

if(period=="M15")
{
//проверка на открытие buy
Alert(buysell);

if(buysell=="buy")

Alert(1);

.............

}

вообщем тупо вложенный иф. НО. условие if(period=="M15") выполняется и алерт выдает рез-т, причем buy, а условие if(buysell=="buy") не выполняется и команда Alert(1) даже не запускается. черт но оба условия даже синтаксически же одинаково заданы, но почему одно выполняется, а другое - нет?

 
sergeev:

так вы просто определяйте момент открытия нового бара и выполняйте вашу функцию.

определять появление нового бара можно, запоминая время открытия бара и затем сравнивая с текущим временем 0 бара. Если новое время больше предыдущего, значит имеем новый бар.

распишу чего уж тут:

int time.marker;

void start() {
   if(time.marker!=Time[0]) {
      time.marker=Time[0];
      // тут то что буде исполнятся только на открытии бара
      }
   // тут то что буде исполнятся на каждом тике
   }
Причина обращения: