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

 
granit77 >>:
Лот и магик никто не имеет права трогать, а к комментарию на хвост будет дописка брокера. Но свой комментарий всегда можно найти поиском подстроки.

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

 
drknn >>:

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

Старт работы советника (не функция start(), а лишь начало работы):

- даём добро отслеживать и лонговые и шортовые сигналы.

Появился лонговый сигнал:

- даём добро отслеживать шортовые сигналы

- Ставим лонговый ордер и если этот ордер встал, то

- Снимаем флаг, дающий добро отслеживать лонговые сигналы.

Появился шортовый сигнал

- Если есть добро разворачивать ордера, то закрываем лонговый ордер и устанавливаем шортовый

- Устанавливаем флаг, дающий добро отслеживать лонговые сигналы и снимаем флаг, дающий добро отслеживать шортовые сигналы.

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

Sostojanie=0;

А вот уже в старте советник знает, что в нулевом состоянии (if(Sostojanie==0){}) советнику разрешено делать только операции А, В и С. И в зависимости от того, каков будет результат одной или нескольких этих операций, советник выбирает в какое состояние нужно перейти (Sostojanie=1;// или 2, или 3 и так далее), или наоборот, остаться ли в текущем состоянии.

В каждом состоянии советник знает, что ему делать можно, а что нельзя, и при наступлении каких условий он должен перейти в иное состояние.

Спасибо огромное за стоящую идею. Обязательно займусь...
Удачи вам!
 
почему не работает такая конструкция? double tmp=Ask; while(Ask<=tmp) tmp=Ask; не виходит из цикла, то есть Ask всегда равен tmp. RefreshRates() не помогает тоже. в чем проблема, подскажите
 

Если в тестере, то и не будет работать, а если в боевых условиях - ставьте Sleep() внутри цикла.

 
на реале заработает?.. если да, то уже пол бедbi. как заставить ЕТО работать в тестере?
 

Надо смотреть код, иначе только гадание, я - не экстрасенс.

 
double tmp=Ask; while(Ask<=tmp) tmp=Ask; Print("ЕТО ЗАРАБОТАЛО!"); вот весь код
 

для тестера можно так

double tmp=Ask; 
if(Ask<=tmp) 
  {
  tmp=Ask; 
  Print("ЕТО ЗАРАБОТАЛО!"); 
  }
 
мне нужен именно цикл, а не условие... нужно while(пока не случиться сие, дальше не пущать, а сие случиться, ибо не может всегда Ask<=tmp)
 
maryan.dirtyn >>:
мне нужен именно цикл
double tmp=0; 
while(Ask<tmp || Ask>tmp){// цикл выполняется до тех пор, пока условие истинно
                          //именно фактор наличия истины в условии запускает цикл в работу и держит его во включенном состоянии
  RefreshRates();// проверяем поступление новой котировки
  if(tmp!=Ask){//пришла новая котировка
    tmp=Ask;// выполняем какие-то действия...
    Print("ЕТО ЗАРАБОТАЛО!");
    break;//выходим из цикла после почти бесконечного числа итераций, которые тупо пригрузили мой проц
  }
}

Можно и не использовать break; Указал я на него только для того, чтоб Вы не забывали о возможности принудительного прерывания потока итераций цикла.
Причина обращения: