Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пополняй свой счет с помощью банковских карт через Gate2Shop
anton
191
anton 2012.08.03 14:04 

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

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

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

Роман
7939
Роман 2012.08.03 14:21  
okvseok:

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

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

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

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

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

anton
191
anton 2012.08.03 14:29  
Roman.:

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

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


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

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

Роман
7939
Роман 2012.08.03 14:37  
okvseok:

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

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

Алгоритм:

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

Функция isCloseLastPosByTake().


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

anton
191
anton 2012.08.03 14:39  

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
Роман 2012.08.03 14:58  
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 2012.08.03 15:02  
Roman.:

Алгоритм:

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

Функция isCloseLastPosByTake().


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



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

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

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

Не так.

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

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

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

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