Необходимо прописать цикл

 

Необходимо: вызвать значение денежной суммы всех сделок до последнего тейк профита.

Честно пытался дня три одолеть эти циклы.

По возможности киньте код, пожалуйста, или хотя бы шаблон, подсказку......

 
okvseok:

Необходимо: вызвать значение денежной суммы всех сделок до последнего тейк профита.

Честно пытался дня три одолеть эти циклы.

По возможности киньте код, пожалуйста, или хотя бы шаблон, подсказку......

А Ваши пытания где?

Что по Вашему "тейк профит"? Это закрытие последней сделки в профит или же закрытие последней сделки по значению ранее выставленного тейк профита?

 
Roman.:

А Ваши пытания где?

Что по Вашему "тейк профит"? Это закрытие последней сделки в профит или же закрытие последней сделки по значению ранее выставленного тейк профита?


спасибо за внимание!

по значению ранее выставленного тейк профита.

 
okvseok:

спасибо за внимание!

по значению ранее выставленного тейк профита.

Алгоритм:

Проверяете последний закрытый ордер на закрытие по ТР этой функцией:

Функция isCloseLastPosByTake().


Если её значение равно true, то идёте циклом по остальным закрытым ордерам - получается от ПРЕДпоследнего (т.к. последний закрыт по тейку, то его не учитываете) к первому, считая сумму всех закрытых позиций. Всё.

 

double M;

for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)break; }

if(OrderSymbol()!=Symbol() || OrderType()!=OrderTakeProfit()) continue;

M = OrderProfit() + M;

все мои муки напоминали это.

 
okvseok:

double M;

for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)break; }

if(OrderSymbol()!=Symbol() || OrderType()!=OrderTakeProfit()) continue;

M = OrderProfit() + M;

все мои муки напоминали это.


Пробуйте:

double last, Sum;
if isCloseLastPosByTake(NULL,-1,-1)
if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-2; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol()) //&& OrderMagicNumber() == MagicNumber)
         if(OrderType() == OP_BUY || OrderType() == OP_SELL) 
            {  
             last = OrderProfit();
             Sum=Sum+last;  // считаете общий 
            }                      
      }
   }
 
Roman.:

Алгоритм:

Проверяете последний закрытый ордер на закрытие по ТР этой функцией:

Функция isCloseLastPosByTake().


Если её значение равно true, то идёте циклом по остальным закрытым ордерам - получается от ПРЕДпоследнего (т.к. последний закрыт по тейку, то его не учитываете) к первому, считая сумму всех закрытых позиций. Всё.



Вопрос: а так же можно написать " M = OrderProfit() + M;", чтоб на каждом цикле считало сумму прибыли или убытка?
 
okvseok:

Вопрос: а так же можно написать " M = OrderProfit() + M;", чтоб на каждом цикле считало сумму прибыли или убытка?
Смотрите мой предыдущий пост.
 
okvseok:

Вопрос: а так же можно написать " M = OrderProfit() + M;", чтоб на каждом цикле считало сумму прибыли или убытка?

Не так.

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

 
Roman.:
Смотрите мой предыдущий пост.

ок. спасибо огромное. я его не видел - страницу не обновил)))
 
okvseok:

ок. спасибо огромное. я его не видел - страницу не обновил)))
См. еще раз - внёс кое-какие правки в название переменных.
Причина обращения: