Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
anton
191
anton  

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

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

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

Роман
7939
Роман  
okvseok:

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

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

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

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

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

anton
191
anton  
Roman.:

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

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


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

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

Роман
7939
Роман  
okvseok:

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

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

Алгоритм:

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

Функция isCloseLastPosByTake().


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

anton
191
anton  

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;

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

Роман
7939
Роман  
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;  // считаете общий 
            }                      
      }
   }
anton
191
anton  
Roman.:

Алгоритм:

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

Функция isCloseLastPosByTake().


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



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

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

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

Не так.

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

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

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

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