[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 555

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

Ho letto da qualche parte sul forum che, in linea di principio, un commento può essere completamente sostituito da un broker. Cioè come risultato l'EA funzionerà correttamente con un broker e completamente sbagliato con un altro. Tutti i parametri "immutabili" sono necessari per generare un magik. Ecco perché voglio usare solo quelli che rimarranno intatti per certo.

 
drknn >>:

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

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

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

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

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

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

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

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

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

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

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

Sostojanie=0;

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

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

Grazie mille per l'idea utile. Lo farò sicuramente...
Buona fortuna a voi!
 
perché questa costruzione non funziona? double tmp=Ask; while(Ask<=tmp) tmp=Ask; non esce dal ciclo, cioè Ask è sempre uguale a tmp. Anche RefreshRates() non funziona.
 

Se in un tester, non funzionerà, ma se in combattimento, mettete Sleep() dentro il ciclo.

 
funzionerà nel mondo reale?... se è così, questo è metà del problema. come lo fai funzionare nel tester?
 

Devi guardare il codice, altrimenti stai solo tirando a indovinare, non sono un sensitivo.

 
double tmp=Ask; while(Ask<=tmp) tmp=Ask; Print("THIS IS WORKED!"); questo è tutto il codice
 

per un tester si può fare così

double tmp=Ask; 
if(Ask<=tmp) 
  {
  tmp=Ask; 
  Print("ЕТО ЗАРАБОТАЛО!"); 
  }
 
Ho bisogno di un ciclo, non di una condizione... Ho bisogno di while(fino a quando questo succede, poi non lasciare che succeda, e succederà, perché Ask<=tmp non può succedere sempre)
 
maryan.dirtyn >>:
мне нужен именно цикл
double tmp=0; 
while(Ask<tmp || Ask>tmp){// цикл выполняется до тех пор, пока условие истинно
                          //именно фактор наличия истины в условии запускает цикл в работу и держит его во включенном состоянии
  RefreshRates();// проверяем поступление новой котировки
  if(tmp!=Ask){//пришла новая котировка
    tmp=Ask;// выполняем какие-то действия...
    Print("ЕТО ЗАРАБОТАЛО!");
    break;//выходим из цикла после почти бесконечного числа итераций, которые тупо пригрузили мой проц
  }
}

Non c'è bisogno di usare break; l'ho solo indicato per non dimenticare la possibilità di interrompere forzatamente il thread di iterazione del ciclo.