마을 사람들을 버는 법을 배우십시오 [에피소드 2] ! - 페이지 102

 
BeerGod :

수동매매 3일차 오늘로 거래종료


축하합니다! 나는 롤백으로 유로화에 대해 많은 매도를 가지고 있습니다 - 마감, 파운드화 - 아니 ...

50,000 센트 - 점프 - 이미 좋습니다! :-)

 

인사말.

아마도 누군가가 이 코드를 알고 있을 것입니다:

 //-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  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 ) { // Имеем убыток по закрытым позам
double money = Lots;
   BuyLots = GetBuyLotsSum();
        SellLots = GetSellLotsSum();
         if (BuyLots  > SellLots)money = BuyLots * 10 ;
         if (BuyLots  < SellLots)money = SellLots * 10 ;
   if ((( AccountEquity () + Sum_Loss + (Sum_Loss / money)) >= AccountBalance ()) && (((totalSell > 0 ) && (totalBuy < 1 )) || ((totalSell < 1 ) && (totalBuy > 0 )))) { // Достигли безубытка
     // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0 ;
           

거래가 음수에서 마감되었을 때 사이클이 열리고 다음 주문이 0보다 크거나, 즉 양수 잔액이지만 음수보다 작으면 다음 주문이 닫히도록 아무 것도 할 수 없습니다. 더하기 음수, 우리는 이미 더 작은 새로운 음수 값을 얻습니다.

 if ( OrderProfit () >= 0 && Sum_Loss < 0.0 )
                   double lastLoss_two = OrderProfit ();
                 Sum_Loss=Sum_Loss+lastLoss_two;   // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime ();
               }

신호에서 음수보다 크면 주문을 닫고 처음부터 사이클을 시작합니다.

 
belck :

인사말.

누군가가 이 코드를 알고 있을지도 모릅니다.

네. 이것은 내 코드입니다. 나는 이미 플립 마틴에서 다음과 같이 사용한다고 썼습니다.

마지막 거래(포지션)가 플러스로 마감된 경우 플립(반복) 횟수를 재설정하고 시작 로트부터 시작합니다(마이너스인 경우).

그런 다음 연속 손실 거래 수를 고려하고 거래량이 증가하면서 반대 방향으로 열립니다.

이것은 Avalanche 의 그물 버전입니다( 같은 이름 의 분기 참조). 시장 주문은 마감되고(증가된 거래량에서 포지션이 반전될 때) 충전 계획에 따라 반대 시장 주문이 더 많은 거래량에서 열립니다. 여기 내 작업 코드가 있습니다. 유사한 expa 알고리즘이 있는 경우 필요에 따라 편집하십시오. 나는 당신의 질문에 정말로 아무것도 이해하지 못했습니다. 상황에 관계없이 "초보자 질문 ..."분기에 관심을 갖고 질문을 더 자세히 설명하십시오. 그렇지 않으면 (적어도 나에게) 명확하지 않은 것은 없습니다.

   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  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 ;
               }
            }
         }
      }
   }
 //Print("Iteration at History = ",  Iteration, " Time_at_History_Current = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS),
 //      " Time_at_History_Previos = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
       
     //-----------------------------------------------------расчет динамического канала----------------------------    
     if ( Symbol () == "GBPJPY" || Symbol () == "EURJPY" || Symbol () == "USDJPY" || Symbol () == "CHFJPY" ||   Symbol () == "NZDJPY" )  
       // || Symbol() == "XAUUSD" || Symbol() == "XAGUSD" || Symbol() == "EURGBP")   StopLossPips = StopLoss;    // т.к. волатильность (по АТР) другая (выше)
         {                 
           channel = ( iATR ( Symbol (), PERIOD_D1 ,Period_ATR, 1 )* 1000 )*Mul_Sl;                 
           StopLossPips = NormalizeDouble (channel, 0 );                                                                                                         
         }       
     else
         {                 
           channel = 10 * ( iATR ( Symbol (), PERIOD_D1 ,Period_ATR, 1 )* 10000 / 3 )*Mul_Sl;                 
           StopLossPips = NormalizeDouble (channel, 0 );                                                                                                         
         }               
   TakeProfitPips= NormalizeDouble (StopLossPips*Mul_TP, 0 );   // расчет уровня тейка для всех инструментов по заданному значению динамического стопа        
                          
   // ------------------------------------------------Ищем наш ордер---------------------------------
   int orderType;
   for ( int orderIndex = ( OrdersTotal () - 1 ); orderIndex >= 0 ; orderIndex--)
   {
       if (! OrderSelect (orderIndex, SELECT_BY_POS))     continue ; // если ордер не выбран, то идем на следующий открытый
       if ( OrderCloseTime ()!= 0 ) continue ;                     // если тикет принадлежит закрытому ордеру, то берем следующий открытый
       if (( OrderSymbol () != Symbol ()) || ( OrderMagicNumber () != MagicNumber)) continue ;
      orderType = OrderType ();
       if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue ;
          ticket = OrderTicket ( );                         // Номер ордера
          orderLots = OrderLots ();                         // Lots   
          orderProfit = OrderProfit () + OrderSwap ();       // Profit
          Price = OrderOpenPrice ();                         // Цена открытия рыночного ордера
          SL =   OrderStopLoss ();                           // Значение StopLoss ордера
          TP = OrderTakeProfit ();                           // Значение TakeProfit ордера          
           if (ticket> 0 )                                     // Если позиция открылась
              {
                 while ( OrderSelect (ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                 Sleep ( 100 );                                 
                 double OpenPrice= OrderOpenPrice ();
       // Print("OrderTicket()=",OrderTicket(),  "OrderOpenTime()=",OrderOpenTime()); 
       // Print("TimeLocal()=",TimeLocal());                                                                    
                     //---------------------Запоминаем значения сл и тп ордера                     
                 if (orderType == OP_BUY) 
                   {                
                     V_StopLossPips = NormalizeDouble (OpenPrice  - (StopLossPips * Point ), Digits );
                     V_TakeProfitPips = NormalizeDouble (OpenPrice + (TakeProfitPips * Point ), Digits );
                   }
            
                 if (orderType == OP_SELL) 
                   {        
                     V_StopLossPips = NormalizeDouble (OpenPrice  + (StopLossPips * Point ), Digits );
                     V_TakeProfitPips = NormalizeDouble (OpenPrice - (TakeProfitPips * Point ), Digits );
                   }   
                            
              }
             
     // Проверка на предельную просадку      
       double loss = - ((orderProfit * 100.0 ) / AccountBalance ());
       if (loss > MaxLoss)
      {
         Print ( "MaxLoss" );
         CloseAllOrders(MagicNumber);
         IsExpertFailed = true;
         return ( 0 );
      }
    
       // Проверка закрытия открытой позиции (ордера) по стоп-лоссу           
       if ( V_StopLossPips != 0 )
        {
           if (orderType == OP_BUY && Bid <=  V_StopLossPips)  { CloseAllOrders(MagicNumber); Print ( "V_StopLossPips закрываем по сл = " , V_StopLossPips); }             
           if ( OrderType ()== OP_SELL && Ask >=  V_StopLossPips){ CloseAllOrders(MagicNumber); Print ( "V_StopLossPips закрываем по сл = " , V_StopLossPips); }  
        }         
        
         // Проверка закрытия открытой позиции (ордера) по тейку        
         if ( V_TakeProfitPips != 0 && MathAbs (orderProfit) > MathAbs (Sum_Loss))
        {
           if (orderType == OP_BUY && Bid >=  V_TakeProfitPips)  { CloseAllOrders(MagicNumber); Print ( "V_TakeProfitPips закрываем по ТР = " , V_TakeProfitPips); }             
           if ( OrderType ()== OP_SELL && Ask <=  V_TakeProfitPips){ CloseAllOrders(MagicNumber); Print ( "V_TakeProfitPips закрываем по ТР = " , V_TakeProfitPips); }  
        }        
      
      
       // Если тралить, то с соответствующего номера итерации при выполнении НЕОБХОДИМОГО УСЛОВИЯ соответствующим 
       // выбранному видом трала      
      
       if (UseTrailing== 1 ) if ((Iteration >= k)&& ( MathAbs (orderProfit) > ( MathAbs (Sum_Loss))))
         switch (type)
          {
           case 0 :   // простой трал по аналогии учебнику - в зависимости от параметра trlinloss (тралить ли в зоне лоссов)
                   if (orderType == OP_BUY)  SampleTrailing_texbook ( 0 , V_StopLossPips, V_TakeProfitPips); // если бай
                   if (orderType == OP_SELL) SampleTrailing_texbook ( 1 , V_StopLossPips, V_TakeProfitPips); // если селл
                   break ;
           //трал по фракталам + отступ (Indent)
           case 1 : TrailingByFractals_LAVINA(ticket,signal_period,Sum_Loss,Lots_New,V_StopLossPips,trlinloss); break ; 
             //трал по теням N свечей + отступ (Indent)       
           case 2 : TrailingByShadows  (ticket,signal_period,Sum_Loss,Lots_New,V_StopLossPips,trlinloss);   break ;   
          }           
       

추신 당신은 내가 지금 먹고 있는 손에서 나의 전체 전투 로봇을 유인할 것입니다. 2010년 9월부터 간헐적으로 작업하고 해당 알고리즘에 접근하고 있습니다. 분기 참조 - 눈사태.

 

예고편의 코드 계속 크기가 큽니다:

 
     
파일:
itdakxijrxj.mq4  11 kb
 
Roman. :

네. 이것은 내 코드입니다. 나는 이미 플립 마틴에서 다음과 같이 사용한다고 썼습니다.

마지막 거래(포지션)가 플러스로 마감된 경우 플립(반복) 횟수를 재설정하고 시작 로트부터 시작합니다(마이너스인 경우).

그런 다음 연속 손실 거래 수를 고려하고 거래량이 증가하면서 반대 방향으로 열립니다.

이것은 Avalanche 의 그물 버전입니다( 같은 이름 의 분기 참조). 시장 주문은 마감되고(증가된 거래량에서 포지션이 반전될 때) 충전 계획에 따라 반대 시장 주문이 더 많은 거래량에서 열립니다. 여기 내 작업 코드가 있습니다. 유사한 expa 알고리즘이 있는 경우 필요에 따라 편집하십시오. 나는 당신의 질문에 정말로 아무것도 이해하지 못했습니다. 상황에 관계없이 "초보자 질문 ..."분기에 관심을 갖고 질문을 더 자세히 설명하십시오. 그렇지 않으면 (적어도 나에게) 명확하지 않은 것은 없습니다.

추신 당신은 내가 지금 먹고 있는 손에서 나의 전체 전투 로봇을 유인할 것입니다. 2010년 9월부터 간헐적으로 작업하고 해당 알고리즘에 접근하고 있습니다. 분기 참조 - 눈사태.


나는 이미 "초보자 질문"이라는 지점에 대해 언급했으며 침묵이 있습니다.

상황은 이 코드가 손실로 거래를 마감할 때 마이너스 잔액을 기억하고 플러스로 거래를 마감할 때 플러스가 잔액보다 작을 때 Sum_Loss를 재설정하고 필요한 재설정하는 것이 아니라 깎는 것입니다.

즉, 이제 다음과 같이 작동합니다.

마감된 주문을 확인하고, 마감된 주문의 이익이 0보다 작으면 이 이익이 Sum_Loss에 추가되고, 미결 거래의 이익이 Sum_Loss를 초과할 때까지 계속됩니다. 닫히고 Sum_Loss가 0으로 재설정되고 주기가 다시 시작됩니다.

그리고 나는 필요합니다:

빨간색으로 마감된 주문은 음수 이익이 Sum_Loss에 추가되었습니다. 다음 거래가 양수 이익으로 마감되면 Sum_Loss 금액을 수익성 있는 이익에서 받은 금액만큼 줄입니다. 더 적은 양으로 주문의 이익이 Sum_Loss보다 클 때까지 계속 진행한 다음 Sum_Loss를 재설정하고 새 주기를 시작합니다.

합계 손실 = 0;

첫 번째 청산 주문: 이익 (-50) < 0

Sum_Loss + 이익 (Sum_Loss + (-50))

Sum_Loss = -50;

두 번째 청산 주문: 이익(+40) > 0 및 Sum_Loss < 0

Sum_Loss + 이익 (Sum_Loss + 40)

합계_손실 = -10

 
belck :

1. 나는 이미 지점에 "초보자 질문"에 대해 언급했으며 침묵이 있습니다.

상황은 이 코드가 손실로 거래를 마감할 때 마이너스 잔액을 기억하고 플러스로 거래를 마감할 때 플러스가 잔액보다 작을 때 Sum_Loss를 재설정하고 필요한 재설정하는 것이 아니라 깎는 것입니다.

2. 즉, 이제 다음과 같이 작동합니다.

마감된 주문을 확인하고, 마감된 주문의 이익이 0보다 작으면 이 이익이 Sum_Loss에 추가되고, 미결 거래의 이익이 Sum_Loss를 초과할 때까지 계속됩니다. 닫히고 Sum_Loss가 0으로 재설정되고 주기가 다시 시작됩니다.

3. 하지만 나는 다음이 필요합니다.

빨간색으로 마감된 주문은 음수 이익이 Sum_Loss에 추가되었습니다. 다음 거래가 양수 이익으로 마감되면 Sum_Loss 금액을 수익성 있는 이익에서 받은 금액만큼 줄입니다. 더 적은 양으로 주문의 이익이 Sum_Loss보다 클 때까지 계속해서 Sum_Loss를 재설정하고 새로운 주기를 시작합니다.

합계 손실 = 0;

첫 번째 청산 주문: 이익 (-50) < 0

Sum_Loss + 이익 (Sum_Loss + (-50))

Sum_Loss = -50;

두 번째 청산 주문: 이익(+40) > 0 및 Sum_Loss < 0

Sum_Loss + 이익 (Sum_Loss + 40)

합계_손실 = -10

1. 다시 연락하십시오 - 사람들이 분명히 도움을 줄 것입니다 ... 해당 지점에 코드를 게시 한 후 ... (무엇입니까)

2. 맞습니다. 왜냐하면. 이것은 기본적인 Avalanche 알고리즘입니다.

3. 이 모든 것을 이 알고리즘에 대한 코드로 초보자 분기에 칠하십시오. 사람들이 고칠 것입니다. MKL4에서 일관되고 침착하게 직접 코드 작성을 시작하십시오.

스스로 대처할 수 없다면 다섯 번째 포럼의 "작업"섹션에 문의하십시오. 그들은 음식을 위해 거기에 씁니다 ...

개인적인 관심이 있는 경우에만 코드가 처음부터 무료로 작성됩니다!

모든 것.

 

숨을 쉴 수 있습니다. :-)

이번에 주문한 팩... :-) 흑자 마감!

올빼미 DoublePlus 및 vse_dlya_sela_J_OsMA_kh + 설정이 포함된 내 버전(차량 설명 포함) - 지점에 있습니다.

 
Roman. :

숨을 쉴 수 있습니다. :-)

이번에 주문한 팩... :-) 흑자 마감!

올빼미 DoublePlus 및 vse_dlya_sela_J_OsMA_kh + 설정이 있는 내 버전(차량 설명도 포함) - 지점에 있습니다.


개인적으로 프로그래밍 할 줄 아세요?

나는 프로그래밍을 잘 못한다.

그래도 코드 작성을 도와주시겠습니까?

 
Roman. :

숨을 쉴 수 있습니다. :-)

이번에 주문한 팩... :-) 흑자 마감!

그리고 이익 전에 제비를 추가하지 않은 것이 유감입니까? :))
 
belck :

나는 프로그래밍을 잘 못한다.

그래도 코드 작성을 도와주시겠습니까?

자신을 더듬지 않고 mql5.com의 "작업" 서비스에 문의하십시오. 그러면 신속하게 모든 변덕을 충족시켜 드릴 것입니다.