Соблюдение условий if или else через историю торгов...помогите пожалуйста.

 

Ребята, всех приветствую и желаю успешных торгов как можно всегда :)

Ситуация такая:

Допрограммировался я в общем с таким кодом и пришел в тупик, вот часть кода...->



  if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL;
    {
   int total=OrdersHistoryTotal();
   for (int o=total-1;o>=0;o--) {
      if (OrderSelect(o,SELECT_BY_POS,MODE_HISTORY)){
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber ) {
            if (OrderProfit()<0 && OrderType()==OP_BUY) z = бай в минусе;
         }
      
        
        
      }
     
   }
 {
 
         if (Buy1_1 > Buy1_2 ) Order = SIGNAL_BUY;
  
   for (int p=total-1;p>=0;p--) {
      if (OrderSelect(o,SELECT_BY_POS,MODE_HISTORY)){
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber ) {
            if (OrderProfit()<0 && OrderType()==OP_sell) z = селл в минусе;
         }
 
      }
     
   }   }
     
  
        
        
  
}
  


Вопрос, что в коде не так ? где ошибка? потому что при тестировании что то одно не работает или
z = селл в минусе;

или

z = бай в минусе;

тоесть Z не принимает значение или принимает но какое то одно :(

А мне нужно чтобы при новом условии (например минус не бай а селл) Z меняла значение чтобы я это мог проследить :(

 
Словами скажи что хочеш получить ? ( в функцию въезжать не стал...)
 
BARS >>:
Словами скажи что хочеш получить ? ( в функцию въезжать не стал...)

Хочу получить соблюдение условий...потому что получается:

Стало в бай, бай закрылся минусом - Z приняла значение по условию для минусовой бай..далее пошла селл..закрылась в минусе а z значение не поменяло на минусовое селл.

Как будто или цикл мешает, но все верно написал или понять не могу в чем дело.

Хочу получить вот что:

Если бай в плюсе то Z значения никакого не принимает и открывается потом селл...Если селл в минус ушло то Z принимает значение по условию..

Еще проще..если сделки плюсовые то Z никаких значений не принимает...Если минусовые, то принимает по условию.

Кажется все просто, НО не получается чего то :( видно нужен цикл на проверку условия по истории, а я не догоняю как реализовать..

 

тогда надо  общию написать ( или готовую взять) для бай и селл. 

И функцию которая будет возвращать последнию позу ( бай-селл). и уже дальше Z присваивать. 

Если последния была бай в минусе { Z=0} или чего там она равна. 

а так она у тебя будет возвращать последнию для бай ( последния сделка бай) или последния селл. 

 

Фигня получается, тогда условие зацикливается и Z становится бесполезной..тоесть все время выскакивает Z=0 потом Z=1 и так на каждом новом баре (стратегия проверки по барам)

Хорошо, давайте объясню еще проще:

1)Если X>Y то Z =1

Если X<Y то Z =-1

Теперь проверка условий по истории:

Если X>Y И Z=1 И прибыль Z<0 то Z = 2

Если X<Y И Z=-1 и прибыль Z<0 то Z = -2

Возвращаемся к 1)

Но как описать это в формуле не могу понять. Уже неделю с лишним бьюсь над этой логикой. Не могу верно зациклить или расставить правильно приоритеты :(

 
Forexai писал(а) >>

Фигня получается, тогда условие зацикливается и Z становится бесполезной..тоесть все время выскакивает Z=0 потом Z=1 и так на каждом новом баре (стратегия проверки по барам)

Хорошо, давайте объясню еще проще:

1)Если X>Y то Z =1

Если X<Y то Z =-1

Теперь проверка условий по истории:

Если X>Y И Z=1 И прибыль Z<0 то Z = 2

Если X<Y И Z=-1 и прибыль Z<0 то Z = -2

Возвращаемся к 1)

Но как описать это в формуле не могу понять. Уже неделю с лишним бьюсь над этой логикой. Не могу верно зациклить или расставить правильно приоритеты :(

Взять последний закрытый ордер по истории текущего инструмента и советника. и в зависимости от типа ордера и его профита вернуть нужное значение. Обработать только один ордер. Остальные не нужны. То есть, если ордер найден, то выходим из функции, предварительно конечно присвоив нужное значение требуемому параметру

 
Vinin >>:

Взять последний закрытый ордер по истории текущего инструмента и советника. и в зависимости от типа ордера и его профита вернуть нужное значение. Обработать только один ордер. Остальные не нужны. То есть, если ордер найден, то выходим из функции, предварительно конечно присвоив нужное значение требуемому параметру

Вы сами пробовали ? Получсется если только условие одно! а у меня ДВА.я уже делал такое, получается только если условие выводить на "принт" иначе просто условие или бесконечно повторяется на каждом баре или просто работает но или от селл или от бай сделки..но обе проверки пройти не может. вся соль в логике и заключается.

В самом начале темы я не зря привел пример, так вот в нем условие выполнения

z = селл в минусе;

не выполняется никак!

Значит наверняка где то здесь

for (int p=total-1;p>=0;p--)

напутал или не дописал.

 
Forexai писал(а) >>

Вы сами пробовали ? Получсется если только условие одно! а у меня ДВА.я уже делал такое, получается только если условие выводить на "принт" иначе просто условие или бесконечно повторяется на каждом баре или просто работает но или от селл или от бай сделки..но обе проверки пройти не может. вся соль в логике и заключается.

В самом начале темы я не зря привел пример, так вот в нем условие выполнения

не выполняется никак!

Значит наверняка где то здесь

напутал или не дописал.

У тебя два цикла. И оба проверяются до конца. И всегда во втором найдется убыточный ордер. Не последний вернее всего, но он будет. Можешь первый цикл выкинуть. Результат твоей функции от этого не изменится

Только один цикл. И прерывать значения при найденой последней позиции. А потом уже можно ее анализировать как угодно. Иначе будешь брать самую первую позиции.

Последняя позиция - последняя закрытая, то есть с максимальным OrderCloseTime();

 
Vinin >>:

У тебя два цикла. И оба проверяются до конца. И всегда во втором найдется убыточный ордер. Не последний вернее всего, но он будет. Можешь первый цикл выкинуть. Результат твоей функции от этого не изменится

Только один цикл. И прерывать значения при найденой последней позиции. А потом уже можно ее анализировать как угодно. Иначе будешь брать самую первую позиции.

Последняя позиция - последняя закрытая, то есть с максимальным OrderCloseTime();

Спасибо. За теоретику спасибо. За практикой мне придется пыхтеть самому иначе в теории я тоже эйнштейн :) а когда до практики то не хватает аргументов для разветвления условий.

Я просил как кодом реализовать а не теоретически :)

Если кому не лень плиз, был бы рад!

 
Forexai писал(а) >>

Спасибо. За теоретику спасибо. За практикой мне придется пыхтеть самому иначе в теории я тоже эйнштейн :) а когда до практики то не хватает аргументов для разветвления условий.

Я просил как кодом реализовать а не теоретически :)

Если кому не лень плиз, был бы рад!

Поройся в ветке Игоря Ким, там есть функция, которая ищет последний закрытый ордер.

https://www.mql5.com/ru/forum/107476

 
Vinin >>:

Поройся в ветке Игоря Ким, там есть функция, которая ищет последний закрытый ордер.

https://www.mql5.com/ru/forum/107476

Спасибо!

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