[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 3. - 페이지 530

 

...그리고 결정을 내리십시오 - 여기에 "Villagers" 지점의 ILANINS 중 하나의 코드 섹션도 있습니다. - 시장 주문의 평균 가격과 PriceTarget의 목표 가격 계산 - 이것은 사용된 수준 + TP입니다. . TR은 이미 귀하의 재량에 달려 있습니다. 필요에 맞게 수정하십시오.

 total=CountTrades();
      AveragePrice = 0 ;
       double Count = 0 ;
       for (cnt= OrdersTotal ()- 1 ; cnt>= 0 ; cnt--) 
        {
         OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES);
         if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=MagicNumber) continue ;
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MagicNumber) 
           {
             if ( OrderType ()==OP_BUY || OrderType ()==OP_SELL) 
              {
               AveragePrice+= OrderOpenPrice ()* OrderLots ();
               Count+= OrderLots ();
              }
           }
        }
       if (total> 0 ) AveragePrice= NormalizeDouble (AveragePrice/Count, Digits );
       if (NewOrdersPlaced) 
        {
         for (cnt= OrdersTotal ()- 1 ; cnt>= 0 ; cnt--) 
           {
             OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES);
             if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=MagicNumber) continue ;
             if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MagicNumber) 
              {
               if ( OrderType ()==OP_BUY) 
                 {
                  PriceTarget= AveragePrice + TakeProfit * Point ;
                  BuyTarget=PriceTarget;
                  Stopper=AveragePrice-Stoploss* Point ;
                  flag=TRUE;
                 }
              }
             if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MagicNumber) 
              {
               if ( OrderType ()==OP_SELL) 
                 {
                  PriceTarget= AveragePrice - TakeProfit * Point ;
                  SellTarget = PriceTarget;
                  Stopper=AveragePrice+Stoploss* Point ;
                  flag=TRUE;
                 }
              }
           }
        }
       if (NewOrdersPlaced) 
        {
         if (flag == TRUE) 
           {
             for (cnt= OrdersTotal ()- 1 ; cnt>= 0 ; cnt--) 
              {
               OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES);
               if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=MagicNumber) continue ;
               if ( OrderSymbol ()== Symbol () && OrderMagicNumber () == MagicNumber) OrderModify ( OrderTicket (),AveragePrice, OrderStopLoss (),PriceTarget, 0 , Yellow );
               NewOrdersPlaced = FALSE;
              }
           }
        }
     }
   return ( 0 );
  }
//???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

int CountTrades() 
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--) 
     {
       OrderSelect (trade,SELECT_BY_POS,MODE_TRADES);
       if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=MagicNumber) continue ;
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MagicNumber)
         if ( OrderType ()==OP_SELL || OrderType ()==OP_BUY) count++;
     }
   return (count);
  }

이 함수 대신 NewOrdersPlaced () 및 OrderModify ()

사용된 라인의 드로잉(전시) 수준을 갖게 됩니다. 전체 모자이크는 귀하의 손에 달려 있습니다.

[삭제]  
Roman. :

여기에 내 코드 섹션이 있습니다. 이 특정 Expert Advisor의 연속 손실 거래의 총 손실을 고려하는 책임이 있습니다(마법에 따라). 나는 그물 Avalanche의 내 버전을 위해 그것을 만들었습니다 - 당신의 필요에 맞게 편집하십시오 - 코드는 주석 처리되어 있습니다 ...

전역 변수

코드의 이 섹션 다음에 이 특정 Expert Advisor의 이미 열려 있는 주문을 순환하고 총 이익을 계산합니다. 그런 다음 이 값을 변수와 비교합니다.

그리고 결정을 내립니다.

'반복' - 변수가 정의되지 않음 D:\ïðîãgrámmy\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (204, 3)
'반복' - 변수가 정의되지 않음 D:\ïðîãgrámmy\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (234, 17)
 
belck :
'반복' - 변수가 정의되지 않음 D:\ïðîãgrámmy\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (204, 3)
'반복' - 변수가 정의되지 않음 D:\ïðîãgrámmy\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (234, 17)

 double   Level_new,  PointValue,
        lots;                       // вспомогательная переменная для расчета нового размера лота при очередной итерации
int Iteration, Counter_Loss, Ticket_at_history; // счетчик для подсчета последовательного убытка позиций колен лавины
//bool Flag_Counter_Loss = false;
double Current_Loss, Sum_Loss;     // текущий и суммарный убыток
 

이전에 Yuri Reshetov가 제공한 간단한 방법을 보십시오. 페이지.

적합하지 않은 경우 제공된 코드 섹션에서 모자이크를 수집하십시오.

또한, 이 문제에 관해서는 올빼미 코드를 완전히 분석하는 것이 유용할 수 있습니다. 지난 포스트에서 사용된 레벨은 SELYAN 분기 Double_Minus_1의 ILANIN입니다. 뼈대로 분해하면 문제의 해결책이 더 명확해질 것입니다, IMHO. 선을 그리면 여기에서 이미 개체 작업을 할 수 있어야 합니다. 그런 것들, IMHO, "중급의 스페셜(프로그래머)"가 즉각적이고 뻔뻔하게 해결되지 않습니다... :-)

평균화 및 설정에 대한 올빼미 코드는 예고편에서 + TR을 사용했습니다.

파일:
[삭제]  
Roman. :

스카이프를 통해 저에게 연락할 수 있습니다: avto-personal-plus
 
Reshetov :
그것은 실수가 아니다. 로그의 오류는 노란색 아이콘 대신 빨간색으로 표시됩니다.

그러면 작동하지 않는 이유는 무엇입니까?
 

여기에 스카이프가 없습니다.


단순화된 버전으로 시도하고 첫 페이지에서 Yuri Reshetov가 추천한 방법을 확인하십시오. 내 코드 바로 뒤에 그의 코드를 입력하십시오.

주석이 포함된 전체 코드를 참조하세요.


 double   Level_new,  PointValue,
        lots;                       // вспомогательная переменная для расчета нового размера лота при очередной итерации
int Iteration, Counter_Loss, Ticket_at_history; // счетчик для подсчета последовательного убытка позиций колен лавины
//bool Flag_Counter_Loss = false;
double Current_Loss, Sum_Loss;     // текущий и суммарный убыток


int start()     // -----------------------СТАРТ ЭКСПЕРТА--------------- 
{
//---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  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 ;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0 ) { // Имеем убыток по закрытым позам
   if (( AccountEquity + Sum_Loss) >= AccountBalance ) { // Достигли безубытка
     // Здесь какой-то код, который необходимо выполнить при достижении безубытка
  }
}


} // Конец старт
[삭제]  
Roman. :

스카이프가 없습니다.


단순화된 버전으로 시도하고 첫 페이지에서 Yuri Reshetov가 추천한 방법을 확인하십시오. 내 코드 바로 뒤에 그의 코드를 입력하십시오.

주석이 포함된 전체 코드를 참조하세요.



'TotalCloseProfit' - 변수가 정의되지 않음 D:\ïðîãrámmy\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (251, 24)
 
belck :
'TotalCloseProfit' - 변수가 정의되지 않음 D:\ïðîãrámmy\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (251, 24)

이미 고쳤습니다. 다시 시도하십시오.
 

중요한 것은 여기에서 사용된 수준을 초과할 때 작업에 대한 코드를 입력하는 것을 잊지 마십시오.

 if (Sum_Loss < 0.0 ) { // Имеем убыток по закрытым позам
   if (( AccountEquity + Sum_Loss) >= AccountBalance ) 
  { 

     // Достигли безубытка
     // Здесь какой-то код, который необходимо выполнить при достижении безубытка


  }
}