Помогите разобратся с while - страница 3

 
Иными словами советник в цикле, где подщитываетса количество открываемых ордеров  тоже за пределами советника.
 
int i,my_buy_order,my_sell_order = 0;;
int total_order = OrdersTotal()-1;
my_buy_order = 0;
my_sell_order = 0;
for(i = total_order; i >= 0; i--) {
    OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGICMA) {
           if (OrderType() == OP_BUY)  my_buy_order++;                // в переменной my_buy_order сохраняем количество наших ордеров BUY
           if (OrderType() == OP_SELL) my_sell_order++;               // в переменной my_sell_order сохраняем количество наших ордеров SELL
    }
}                          //количество открытых ордеров перед циклом  while(NRTRUP && !NRTRDOWN)

total_order =my_buy_order+my_sell_order;

if (NRTRUP && !NRTRDOWN)       // цикл пока синяя линия
      {
      
         if(total_order<count)        //  count=3    -количество ордеров сколько можно открыть в цикле  while(NRTRUP && !NRTRDOWN)
                                      //  когда будет три , больше открывать небудем
                                      //  цикл while(NRTRUP && !NRTRDOWN) крутиться дальше в пустую (так задумано)
         {  
  
            if(условие открытия)      //
            {
               res= -1;
               res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,Bid-SL*Point,Ask+TP*Point,"",MAGICMA,0,Blue); 
               Sleep(5000);
// наверно теперь не нужно это               if (res > 0)   k++;   // если открылся , увеличиваем количество открытых ордеров в цикле
            }
         }
      }

не нравится мне Ваша структура программы, я бы так написал

если ошибки будут скобки {} посчитайте  - писал не в редакторе

 
gince:



Спосибо IgorM

Vinin, ничемо мудрого и сложниго. Просто мне покозалось, что можно уменшить количество неправильных входов. Вот это и хочу проветить. Тем самым учюсь mql


Я вот все еще не понимаю в необходимости циклов. Тупой видимо.

Зацикленные эксперты в тестере не работают.

Проверять логику можно будет только на Демо.

 

наверное человек ПОПУТАЛ... цикл ему НЕ нужен... так как Советник УЖЕ в ЦИКЛЕ... каждая интерация которого запускается с приходом нового ТИКА....

---

ну а уж если действительно нужен цикл :)))) - то тогда это СКРИПТ

 
Aleksander:

наверное человек ПОПУТАЛ... цикл ему НЕ нужен... так как Советник УЖЕ в ЦИКЛЕ... каждая интерация которого запускается с приходом нового ТИКА....

---

ну а уж если действительно нужен цикл :)))) - то тогда это СКРИПТ


впечатляют Ваши знания терминологии и понятий программирования!

давайте переведу, что Вы хотели донести до топикстартера, чтобы Вы его окончательно не запутали:

https://docs.mql4.com/ru/basis/functions/special

start() - основная функция. У экспертов вызывается после прихода очередного тика. У пользовательских индикаторов вызывается при пересчете после прикрепления индикатора к графику, при открытии клиентского терминала (если индикатор прикреплен к графику), а также после прихода очередного тика. У скриптов выполняется сразу после прикрепления к графику и выполнения инициализации. В случае отсутствия в модуле функции start() этот модуль (эксперт, скрипт или пользовательский индикатор) не может быть запущен.

 ...., а для выполнения кода скрипта несколько раз, возможно потребуется организовать в коде скрипта цикл

наверно  Aleksander это хотел сказать

 
именно это и хотел :) - но программеры то, Суть моих слов поняли :) хотя и коряво может выразился...
 

Да, я уже немного запутался. Но сейчас точно одно знаю, моя идея такая - (опишу как непрогромист) пока синяя линия рязрешается открыть (допустим ) 5 ордеров на баи. Условия откытия следующие

---нет открытых ордеров на бай

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

---появилась ли новая свечка после закрытия преведущего ордера 

--- if(условие открытия ==1  )

---открываем бай 

 закрытие ордера 

--предохранитель - в первую очередь при появлениии синей линии закрываются селл ордер, если таков есть(может и не быть, так как он должен был быть закрытым по другим условиям в течении красной линии)

---конешно проверка есть ли открытые ордера (может быть открытим только один, но проверим на всякий случай все)

 --- if(условие закрытия == -1  )

--- закрываем бай

 

Это все в течении однои синей линии 

В течении красной линии все на селл и закрытие последнего бай 

 
IgorM:

не нравится мне Ваша структура программы, я бы так написал

если ошибки будут скобки {} посчитайте  - писал не в редакторе



Все таки проверка наличия открытых ордеров должно быть в цикле и там решать что с ним (так как только один)делать

Получится должно так

старт>если синяя>>если нет открытого>если не шестой в течении синей>если новая  свеча>если условия на баи 

 

и еще 

 Пока цветная машкшилa,   SAR,  NRTR_ATR_stop, BBands   или другой индикатор непоменяет цвет, открыть не больше определенного количества ордеров в ту сторону, какую показывают эти индюки.

Само начало только когда получен сигнал изменения цвета(если кинуть советник, то уже будет кокой то цвет, обязательно в первый раз дождатся изменения и только тогда вве что писал раньше) 

 

Смысл в этом таков. Эти индки или ихниии комбинации показывают чаправление тренда. В этом направлинии разрешается открыть установленое количество ордеров. Это потому что в конце этово движения обычно начинается боковое движение (корекция, разворот). Устанавливаем такое количество разрешаемых открыть ордеров, при котором они открывались до бокового движения

Как пример

 

Выбор индикаторов  -  да любые какие кому нравятся 

Причина обращения: