Профит одного символа

 

Затеял создать функцию подсчитывающую общий профит по конкретному символу,

в данном случае на текущем графике...

double FullProfitSymbol() 
{
double buyP, profs;
double buysprof=OrderProfit()+OrderCommission()+OrderSwap();
for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--) 
  { 
    if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))continue;
    if(OrderType()==OP_BUY || OP_SELL && OrderSymbol()==Symbol()) buyP+=buysprof;
  } 
  profs=NormalizeDouble(buyP,2);
  return(profs);
}

но что-то фигушки одни... :((( показывает

так тоже:

.. buyP+=OrderProfit()+OrderCommission()+OrderSwap();
Может в цикле так нельзя считать?
 
kombat писал (а) >>

Затеял создать функцию подсчитывающую общий профит по конкретному символу,

в данном случае на текущем графике...

но что-то фигушки одни... :((( показывает

так тоже:

Может в цикле так нельзя считать?

Надо вот так:

double FullProfitSymbol() 
{
double buyP, profs;
double buysprof;
for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--) 
  { 
    if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))continue;
    if(OrderType()==OP_BUY || OP_SELL && OrderSymbol()==Symbol()) 
    {
       buysprof=OrderProfit()+OrderCommission()+OrderSwap();
       buyP+=buysprof;
    }
  } 
  profs=NormalizeDouble(buyP,2);
  return(profs);
}
 

попробуйте так:

double FullProfitSymbol() 
{
double buyP=0, 
double profs=0;
for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--) 
  { 
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if(OrderSymbol()==Symbol()) {
    double buysprof=OrderProfit()+OrderCommission()+OrderSwap();
    buyP=buysprof+buyP;}
  } 
  profs=NormalizeDouble(buyP,2);
  return(profs);
}
 

Опоздал))) но по-моему, надо инициализировать buyP

 

Спасиб! попробую...

-

Попутный вопрос по органиции цикла.

(давно уже витает, да всё спросить забываю)

- чем основан выбор обратного отсчёта перед прямым?

 
kombat писал (а) >>

Спасиб! попробую...

-

Попутный вопрос по органиции цикла.

(давно уже витает, да всё спросить забываю)

- чем основан выбор обратного отсчёта перед прямым?

по-моему ничем, я использую прямой обычно, и как ни странно работает)))

 
kombat писал (а) >>

Спасиб! попробую...

-

Попутный вопрос по органиции цикла.

(давно уже витает, да всё спросить забываю)

- чем основан выбор обратного отсчёта перед прямым?

Если в цикле будете удалять ордера, то при прямом отчете не все ордера попадут в обработку. Поищите по форуму не раз уже было.

К примеру вот.

 

Работает! ещё раз спасибо...

*

Другая проблема нарисовалась, из другой оперы.

Та функция что разобрали учавствует в расчёте уровня "безубытка" для позиций символа BezUb() .

Результат которого заносится в свойства обычной вертикальной линии на графике...

ObjectDelete("БЕЗУБ");
color безб=Yellow;
if (Position() == "SELL") безб=Red;
if (Position() == "ZERO") безб=Blue;
if (Position() == "BUY") безб=Green;
ObjectCreate("БЕЗУБ",OBJ_HLINE,0,0,BezUb(),0,0,0,0);
ObjectSet(   "БЕЗУБ", OBJPROP_STYLE, 1);
ObjectSet(   "БЕЗУБ", OBJPROP_WIDTH, 1);
ObjectSet(   "БЕЗУБ", OBJPROP_COLOR, безб);    // Цвет
ObjectSetText("БЕЗУБ","бзб",10);

так вот обновить и начать "работу" этой линии можно только после смены т-ф.

Достаточно просто переключится и всё...

Впрочем любое изменение кода в расчётах, дальнейшая компиляция, приводит к тому же эффекту.

И относится ко всем обьектам и комменту в этом индикаторе...

Чуть позже выложу весь код если непонятки о чём это я тут речь толкаю.

 

Должна помочь функция.

Справочник MQL4 - Операции с графиками - WindowRedraw()

void WindowRedraw( )
Принудительно перерисовывает текущий график. Обычно применяется после изменения свойств объектов.

 
Talex писал (а) >>

Если в цикле будете удалять ордера, то при прямом отчете не все ордера попадут в обработку. Поищите по форуму не раз уже было.

К примеру вот.

Спасибо, буду знать теперь

 
Talex писал (а) >>

void WindowRedraw( )
Принудительно перерисовывает текущий график. Обычно применяется после изменения свойств объектов.

Дык стоит... в самом конце функции старт.

...
ObjectSetText("БЕЗУБ","бзб",10);
WindowRedraw();
return(0);
}

и насколько понял перерисовывает все обьекты, т.е. не надо под каждый её подсовывать.

Ладно. Это не столь важно пока...

А вот за это:

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

отдельный большой сэнкс... ;)

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