ПОМОГИТЕ КТО МОЖЕТ !!!

 

упёрся в проблемму

for(int i = 0; i < OrdersTotal(); i++)
  {
    
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;


селектор находит ордер если есть открытыйб но если открытых нет то как это обнаружить ? в селекторе всё равно же будет показывать последнюю закрытую позу...
 
sllawa3:

упёрся в проблемму


селектор находит ордер если есть открытыйб но если открытых нет то как это обнаружить ? в селекторе всё равно же будет показывать последнюю закрытую позу...
с флагом
MODE_TRADES
"Селектор" не будет вообще показывать закрытых позиций, только откоытые, если ноль открытых позиций цикл даже не запустится, так как условие будет ложное
 
Techno:
с флагом
"Селектор" не будет вообще показывать закрытых позиций, только откоытые, если ноль открытых позиций цикл даже не запустится, так как условие будет ложное

вот именно что не запустится и сохранит последнюю позу уже закрытую.. у меня же так и написано.. через ордер селект можеи проверить наличие открытой позы а как проверить отсутствие ?
 
sllawa3:

вот именно что не запустится и сохранит последнюю позу уже закрытую.. у меня же так и написано..
что-то непонятно написано. Вот даже сейчас, что значит "сохранит позу закрытую"? Если речь идет о подсчете позиций, как я могу только догадываться, то все переменные(для хранения количества ордеров) нужно обнулять в начале функции старт. Тоесть перед этим циклом. Если после цикла они останутся пустыми, значит поз нет.
 
кусок кода в начале темы.. если позы нет то DS останется =1 пока не появится новый ордер... хоть ордер и закрылся.. просто селекция и не запустится...что тут непонятного то..
 
Techno:
что-то непонятно написано. Вот даже сейчас, что значит "сохранит позу закрытую"? Если речь идет о подсчете позиций, как я могу только догадываться, то все переменные(для хранения количества ордеров) нужно обнулять в начале функции старт. Тоесть перед этим циклом. Если после цикла они останутся пустыми, значит поз нет.

DS изначально прописана как инт = 0 перед циклом
 
Techno:


вот и не обнуляется раз цикл не запустился, а он и не запустится раз нет поз
 
sllawa3:

DS изначально прописана как инт = 0 перед циклом
А, ну если она прописана и присвоено 0, по идее проблем быть не может, иначе откуда ей взяться равной единице. Ей ноль присвоен в функции старт или выше?
 
выше
 
проблем быть не может но она есть.. можете сами попробовать и убедитесь
 
Может так?
DS=0;
for(int i = 0; i < OrdersTotal(); i++)
  {
    if (DS==0) DS=-1;
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;
}
if (DS==0) // поз никаких нет
if (DS==-1) // позы есть, но нету БАЙ
if (DS==1) // есть БАЙ
Причина обращения: