[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 243

 

Вопрос как посчитать серию убыточных ордеров ????

Т е я хочу узнать для проверки тактики сколько раз подрят ордера закрылись по стопу... а имменно последние

Парни уж очень сильно надо .....

 
VOLDEMAR:

Вопрос как посчитать серию убыточных ордеров ????

Т е я хочу узнать для проверки тактики сколько раз подрят ордера закрылись по стопу... а имменно последние

Парни уж очень сильно надо .....


Я так у себя считаю:

Iteration = сколько раз подрят ордера закрылись по стопу, если стоп (в вашем понимании) - это закрытие в убыток.

 //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }
 
Спасибо ! Но как я понял данный код находит всю серию в истории не зависимо от того была ли она 100 сделок назад или 5 ....
 
VOLDEMAR:
Спасибо ! Но как я понял данный код находит всю серию в истории не зависимо от того была ли она 100 сделок назад или 5 ....

Нет. Выборка с самого крайнего закрытого вглубь истории, при появлении закрытого в профит - серия прерывается с выводом значений количества убыточных закрытых подряд = Iteration.
 

Добрый день.

Правильная ли будет такая связка ?

  // заполним значениями сигнальные массивы и посчитаем их количество
  for(i=DisplayBars;i>=0;i--) 
  {

    
if (Prz0 == 0) 
       {
           f= GetBarNumWithZerroDist(i);// на этом баре пересечение
        if (f!=-1)
          {
           Price01 = iClose(Symbol_1,0,f);
           Price02 = iClose(Symbol_2,0,f);
           Prz0 = 1;
           i=f;
           }
       } 
   }
int GetBarNumWithZerroDist(int i)
{
double Smb1Cl0 = NormalizeDouble(iClose(Symbol_1,0,0),Digits);
double Smb2Cl0 = NormalizeDouble(iClose(Symbol_2,0,0),Digits2);
double Smb1Pnt = MarketInfo(Symbol_1, MODE_POINT);
double Smb2Pnt = MarketInfo(Symbol_2, MODE_POINT);
int    mBars   = MathMin(iBars(Symbol_1,0), iBars(Symbol_2,0));

    for (int f=i;f>=0;f--) 
    {
        Price1 =   NormalizeDouble(Lot*(Smb1Cl0 - iClose(Symbol_1,0,f)) / Smb1Pnt,0);
        Price2 = NormalizeDouble(K*Lot2*H*(Smb2Cl0 - iClose(Symbol_2,0,f)) / Smb2Pnt,0);
        Spread = Price1 - Price2; 
        //Print ("Price1="+Price1, " Price2="+Price2);
        if(MathAbs(Spread)== 0) return(f);
    }
    return(-1);
}
 

Вот это понравилось:)

if(MathAbs(Spread)== 0) return(f);
 
Roger:

Вот это понравилось:)


здесь есть ошибка ?

мне нужно вернуть значение бара, при котором Spread==0,

если такого значения не найдено возвращаем -1.

 

Здравствуйте.

Вопрос: может ли функция OrderSend() после исполнения вернуть значение "0", или меньше "-1"?? Кто-нибудь встречался с подобным? Или информация, приведённая в "документации" достоверна:

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Основная функция, используемая для открытия позиции или установки отложенного ордера.
Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи.
P.S.: работаю Телепатом, ищу ошибку в чужом коде...
 
сделал виртуальный трал совентика с помощью горизонтальных линий, в тестере работает нормально а при оптимизации видимо тестер не работает с этими линиями, почему? и как это исправить?
 
DimaMA:
сделал виртуальный трал совентика с помощью горизонтальных линий, в тестере работает нормально а при оптимизации видимо тестер не работает с этими линиями, почему? и как это исправить?

Зачем Вам горизонтальная линия то? Запоминайте значение линии в переменную и будет Ваш счастье!! И советник будет быстрее "думать"! А горизонтальную линия можете оставить лишь для визуального эффекта.

А причина следующая: тестер работает с графическими объектами только в визуальном режиме! При оптимизации и подавно нет визуального режима... Хотя можно попробовать оставить открытым график, у которого в скобочках после названия ТФ и пары написано "visual"... Но поможет это или нет, не знаю. Не проверял. А так подумал, потому что видно, как на этом графике (который до этого использовали для визуализации тестирования) появляются и исчезают ордера (хотя вроде график уже и не задействован)... Может Кто подскажет!?

Но совет Мой Вам - уходите от извлечения параметров из графических объектов. Пусть эти параметры хранятся в переменных... Не надо делать графический объект переменной! :))))

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