[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 555

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

He leído en algún lugar del foro que, en principio, un comentario puede ser sustituido completamente por un corredor. Es decir, como resultado el EA funcionará correctamente con un broker y completamente mal con otro. Todos los parámetros "inmutables" son necesarios para la generación de un magik. Por eso quiero usar sólo los que quedarán intactos con seguridad.

 
drknn >>:

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

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

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

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

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

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

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

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

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

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

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

Sostojanie=0;

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

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

Muchas gracias por la valiosa idea. Definitivamente haré eso...
Buena suerte.
 
¿por qué no funciona esta construcción? double tmp=Ask; while(Ask<=tmp) tmp=Ask; no sale del bucle, es decir, Ask siempre es igual a tmp. RefreshRates() tampoco funciona.
 

Si en un probador, no funcionará, pero si en combate, pon Sleep() dentro del bucle.

 
¿funcionará en el mundo real?... si es así, ese es la mitad del problema. ¿cómo hacer que funcione en el probador?
 

Tienes que mirar el código, de lo contrario sólo estás adivinando, no soy un psíquico.

 
double tmp=Ask; while(Ask<=tmp) tmp=Ask; Print("¡ESTO HA FUNCIONADO!"); esto es todo el código
 

para un probador se puede hacer esto

double tmp=Ask; 
if(Ask<=tmp) 
  {
  tmp=Ask; 
  Print("ЕТО ЗАРАБОТАЛО!"); 
  }
 
Necesito un bucle, no una condición... Necesito while(hasta que esto ocurra, entonces no dejes que ocurra, y ocurrirá, porque Ask<=tmp no puede ocurrir siempre)
 
maryan.dirtyn >>:
мне нужен именно цикл
double tmp=0; 
while(Ask<tmp || Ask>tmp){// цикл выполняется до тех пор, пока условие истинно
                          //именно фактор наличия истины в условии запускает цикл в работу и держит его во включенном состоянии
  RefreshRates();// проверяем поступление новой котировки
  if(tmp!=Ask){//пришла новая котировка
    tmp=Ask;// выполняем какие-то действия...
    Print("ЕТО ЗАРАБОТАЛО!");
    break;//выходим из цикла после почти бесконечного числа итераций, которые тупо пригрузили мой проц
  }
}

No tienes que usar break; sólo lo he señalado para que no te olvides de la posibilidad de interrumpir forzosamente el hilo de iteración del bucle.