[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 555

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

J'ai lu quelque part sur le forum que, en principe, un commentaire peut être entièrement remplacé par un courtier. C'est-à-dire que l'EA fonctionnera correctement avec un courtier et complètement faux avec un autre. Tous les paramètres "non modifiables" sont nécessaires à la génération d'un magik. C'est pourquoi je veux utiliser uniquement ceux qui resteront intacts à coup sûr.

 
drknn >>:

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

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

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

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

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

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

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

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

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

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

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

Sostojanie=0;

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

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

Merci beaucoup pour cette idée intéressante. Je vais certainement faire ça...
Bonne chance à vous !
 
pourquoi cette construction ne fonctionne-t-elle pas ? double tmp=Ask ; while(Ask<=tmp) tmp=Ask ; ne sort pas de la boucle, c'est-à-dire que Ask est toujours égal à tmp. RefreshRates() ne fonctionne pas non plus.
 

Si vous êtes dans un testeur, ça ne marchera pas, mais si vous êtes en combat, mettez Sleep() à l'intérieur de la boucle.

 
cela fonctionnera-t-il dans le monde réel ? si oui, c'est la moitié du problème. comment le faire fonctionner dans le testeur ?
 

Vous devez regarder le code, sinon vous ne faites que deviner, je ne suis pas un médium.

 
double tmp=Ask ; while(Ask<=tmp) tmp=Ask ; Print("CECI EST FAIT !") ; c'est tout le code
 

pour un testeur, vous pouvez faire ceci

double tmp=Ask; 
if(Ask<=tmp) 
  {
  tmp=Ask; 
  Print("ЕТО ЗАРАБОТАЛО!"); 
  }
 
J'ai besoin d'une boucle, pas d'une condition... J'ai besoin de while(jusqu'à ce que cela se produise, alors ne le laissez pas se produire, et cela se produira, car Ask<=tmp ne peut pas toujours se produire)
 
maryan.dirtyn >>:
мне нужен именно цикл
double tmp=0; 
while(Ask<tmp || Ask>tmp){// цикл выполняется до тех пор, пока условие истинно
                          //именно фактор наличия истины в условии запускает цикл в работу и держит его во включенном состоянии
  RefreshRates();// проверяем поступление новой котировки
  if(tmp!=Ask){//пришла новая котировка
    tmp=Ask;// выполняем какие-то действия...
    Print("ЕТО ЗАРАБОТАЛО!");
    break;//выходим из цикла после почти бесконечного числа итераций, которые тупо пригрузили мой проц
  }
}

Vous n'êtes pas obligé d'utiliser break ; je l'ai seulement signalé pour que vous n'oubliiez pas la possibilité d'interrompre de force le fil d'itération de la boucle.