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

 
YOUNGA :
나는 그런 전설을 생각해 냈습니다. 구매 거래는 판매 거래와 거의 같기 때문에 nafik은 함께 테스트합니다. 실제로는 판매 거래 모듈이 고문에 작성되지 않습니다 (그러나 구매와 동일) 보류 중인 지정가 주문만 거래
이것은 가격이 항상 먼저 매수에 도달한 다음 매도에 도달하여 CloseBy에 마감된다는 것을 의미합니까? 그리고 그것이 내려와 오랫동안 지속된다면?
 

이것은 테스트의 트릭입니다 - 우리가 오랫동안 하락하고 구매 주문만 열려 있으면 시스템은 죽어야합니다 (반복합니다 - 원칙적으로 판매 주문이 없습니다) 반등에 대한 모든 희망은 총계를 속이는 것입니다 주문 팩의 이익. 이제 수정되었습니다.

 
YOUNGA :

나에게 주식 곡선은 시모틱(simotic)인 것 같았습니다. 예, 마팅게일이 반대 방향으로 움직였습니다. 로트 크기는 공식으로 계산됩니다. lastlot = NormalizeDouble(R/ ( StopLoss-Step*(CountTrades(OP_BUY)) ),2) R=5..50 레벨 간 계단 거리


곡선은 이쁘고 취향의 문제지만 이런 최대의 적자폭으로 연 10%를 버는 것은 좋지 않다.
 
글쎄, 그것은 입력의 절반입니다 ;-) 예, 수확량을 늘릴 수 없습니다(아마도 연간 약 20%). 지금까지 그는 제비를 계산하는 접근 방식을 보여주었습니다.
 
Roman. :

비디오에서와 같이 할 필요가 있습니다 ... 먼저 ... IMHO. 이미 거기 봐...


주문한 대로 :)))

초기 창고 10000

초기 로트 1

무작위 항목, 한 쌍은 판매용이고 다른 쌍은 구매용입니다.

TP ~10핍

SL ~40핍

손절매가 발동되면 로트가 "두 배로" 됩니다.

 
pako :


주문한 대로 :)))

초기 창고 10000

초기 로트 1

무작위 항목, 한 쌍은 판매용이고 다른 쌍은 구매용입니다.

TP ~10핍

SL ~40핍

손절매가 발동되면 로트가 "두 배로" 됩니다.

코드가 닫힌 이유는 무엇입니까?

봐 - 그 계획은 그러한가 / 그렇지 않습니까?

4일째입니다.

 int start()     // -----------------------СТАРТ ЭКСПЕРТА--------------- 
{
 //while(GetAsyncKeyState(16)){Sleep(500);} 
 
//   if(iTime(Symbol(),s_signal_period,0) == prevtime) return(0);    //ждем нового бара на сигнальном таймфрейме
//   prevtime = iTime(Symbol(),s_signal_period,0);                   //если появился новый бар, то включаемся

   if (IsExpertStopped) { Comment ( "Не удалось инициализировать советник!" ); return ( 0 );}   
   if (IsExpertFailed)  { Comment ( "Критическая ошибка! Советник остановлен." ); return ( 0 );}
   
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
   int time = 0 ;   // время - для определения факта работы только с крайним закрытым ордером
  
   bool pos1 = false , pos2 = false ;

   
       
//---Поиск крайних отработавших ордеров для открытия очередных позиций на увеличенных при лоссе и стартовых при профите объёмах   
   for ( int orderIndex = ( OrdersHistoryTotal () - 1 ); orderIndex >= 0 ; orderIndex--)
   {   
       if (! OrderSelect (orderIndex, SELECT_BY_POS , MODE_HISTORY )) { Print ( " Ошибка при доступе к исторической базе (" ,GetLastError(), ")" ); continue ;}   
       if (( OrderSymbol () != Symb1)  || ( OrderMagicNumber () != MagicNumber))   continue ;              
   //------------------------- Принимаем в расчет только ордер, закрытый cамым крайним -----------------------
       if (time< OrderCloseTime ())     //(сравниваем его с хранящимся в переменной time) 
        {
         time= OrderCloseTime ();     //если время закрытия ордера больше - ложим его в переменную     
         int lastType = OrderType ();
         double lastLots1 = OrderLots ();
         double lastProfit1 = OrderProfit () + OrderSwap ();
        }  
   }
     
   time = 0 ;
   for (orderIndex = ( OrdersHistoryTotal () - 1 ); orderIndex >= 0 ; orderIndex--)
   {   
       if (! OrderSelect (orderIndex, SELECT_BY_POS , MODE_HISTORY )) { Print ( " Ошибка при доступе к исторической базе (" ,GetLastError(), ")" ); continue ;}   
       if (( OrderSymbol () != Symb2) || ( OrderMagicNumber () != MagicNumber))   continue ;  
                  
   //------------------------- Принимаем в расчет только ордер, закрытый cамым крайним -----------------------
       if (time< OrderCloseTime ())     //(сравниваем его с хранящимся в переменной time) 
        {
         time= OrderCloseTime ();     //если время закрытия ордера больше - ложим его в переменную     
         lastType = OrderType ();
         double lastLots2 = OrderLots ();
         double lastProfit2 = OrderProfit () + OrderSwap ();
        } 
   }       
//-------------------------------- продолжение стартовым после профита или увеличение по мартину  -----------------------------------------------------------------         
pos1 = ExistPositions(Symb1,- 1 ,MagicNumber, 0 );
pos2 = ExistPositions(Symb2,- 1 ,MagicNumber, 0 );
 
 if (pos1 == false && pos2 == false ) // при отсутствии позиций в рынке по символам
    {       
            
         
 // Анализ крайних двух ордеров по двум инструментам на профит для принятия решения по объёму следующих     
         if (lastProfit1 > 0 && lastProfit2 > 0 )
         {
   //---Ордер закрылся с прибылью - обнуляем счетчик итераций, счетчик для подсчета последовательного убытка позиций колен лавины,
   //---текущий и суммарный убыток и открываемся стартовым лотом по тренду                 
            
             // Ордера закрылись в профит, открыться стартовым лотом            
           if ( MathRand () > 16384 )
             {  
              WmOrderSend(Symb1, OP_BUY ,  Lots, MarketInfo (Symb1, MODE_ASK ), MarketInfo (Symb1, MODE_BID ) - StopLossPips *   MarketInfo (Symb1, MODE_POINT ), MarketInfo (Symb1, MODE_BID ) + TakeProfitPips * MarketInfo (Symb1, MODE_POINT ), " старт " , MagicNumber);
              WmOrderSend(Symb2, OP_SELL , Lots, MarketInfo (Symb2, MODE_BID ), MarketInfo (Symb2, MODE_ASK ) + StopLossPips *   MarketInfo (Symb2, MODE_POINT ), MarketInfo (Symb2, MODE_ASK ) - TakeProfitPips * MarketInfo (Symb2, MODE_POINT ), " старт " , MagicNumber);
             } 
           else 
             {  
              WmOrderSend(Symb1, OP_SELL , Lots, MarketInfo (Symb1, MODE_BID ), MarketInfo (Symb1, MODE_ASK ) + StopLossPips *   MarketInfo (Symb1, MODE_POINT ), MarketInfo (Symb1, MODE_ASK ) - TakeProfitPips * MarketInfo (Symb1, MODE_POINT ), " старт " , MagicNumber);
              WmOrderSend(Symb2, OP_BUY ,  Lots, MarketInfo (Symb2, MODE_ASK ), MarketInfo (Symb2, MODE_BID ) - StopLossPips *   MarketInfo (Symb2, MODE_POINT ), MarketInfo (Symb2, MODE_BID ) + TakeProfitPips * MarketInfo (Symb2, MODE_POINT ), " старт " , MagicNumber);
             }                 
                
         }
         
         
         if (lastProfit1 < 0 && lastProfit2 > 0 )  
           {
               
               // Ордер по первому символу закрылся с убытком - открываемся по нему увеличенными объёмами        
              Lots_New = lastLots1 * 2 ;                  
              
                   
 // ---------НОРМАЛИЗАЦИЯ НОВЫХ РАСЧЕТНЫХ ЛОТОВ И ОТКРЫТИЕ ОЧЕРЕДНОЙ ПОЗИЦИИ...            
                    Lots_New = NormalizeLots(Lots_New);
                     if ( MathRand () > 16384 )
                       {  
                        WmOrderSend(Symb2, OP_BUY ,  Lots,     MarketInfo (Symb2, MODE_ASK ), MarketInfo (Symb2, MODE_BID ) - StopLossPips *   MarketInfo (Symb2, MODE_POINT ), MarketInfo (Symb2, MODE_BID ) + TakeProfitPips * MarketInfo (Symb2, MODE_POINT ),   " бАх " , MagicNumber);
                        WmOrderSend(Symb1, OP_SELL , Lots_New, MarketInfo (Symb1, MODE_BID ), MarketInfo (Symb1, MODE_ASK ) + StopLossPips *   MarketInfo (Symb1, MODE_POINT ), MarketInfo (Symb1, MODE_ASK ) - TakeProfitPips * MarketInfo (Symb1, MODE_POINT ), " бАх " , MagicNumber);
                       } 
                     else 
                       {  
                        WmOrderSend(Symb2, OP_SELL , Lots,     MarketInfo (Symb2, MODE_BID ), MarketInfo (Symb2, MODE_ASK ) + StopLossPips *   MarketInfo (Symb2, MODE_POINT ), MarketInfo (Symb2, MODE_ASK ) - TakeProfitPips * MarketInfo (Symb2, MODE_POINT ), " бАх " , MagicNumber);
                        WmOrderSend(Symb1, OP_BUY ,  Lots_New, MarketInfo (Symb1, MODE_ASK ), MarketInfo (Symb1, MODE_BID ) - StopLossPips *   MarketInfo (Symb1, MODE_POINT ), MarketInfo (Symb1, MODE_BID ) + TakeProfitPips * MarketInfo (Symb1, MODE_POINT ), " бАх " , MagicNumber);
                       }     
                                            
           }       
           
       if (lastProfit1 > 0 && lastProfit2 < 0 )  
           {
               
               // Ордер по первому символу закрылся с убытком - открываемся по нему увеличенными объёмами             
              Lots_New = lastLots2 * 2 ; // Последующие лоты открываются в соответствие с классическим мартином - удвоение         
                   
 // ---------НОРМАЛИЗАЦИЯ НОВЫХ РАСЧЕТНЫХ ЛОТОВ И ОТКРЫТИЕ ОЧЕРЕДНОЙ ПОЗИЦИИ...            
                    Lots_New = NormalizeLots(Lots_New);
                     if ( MathRand () > 16384 )
                       {  
                        WmOrderSend(Symb1, OP_BUY ,  Lots,     MarketInfo (Symb1, MODE_ASK ), MarketInfo (Symb1, MODE_BID ) - StopLossPips *   MarketInfo (Symb1, MODE_POINT ), MarketInfo (Symb1, MODE_BID ) + TakeProfitPips * MarketInfo (Symb1, MODE_POINT ), " бАх " , MagicNumber);
                        WmOrderSend(Symb2, OP_SELL , Lots_New, MarketInfo (Symb2, MODE_BID ), MarketInfo (Symb2, MODE_ASK ) + StopLossPips *   MarketInfo (Symb2, MODE_POINT ), MarketInfo (Symb2, MODE_ASK ) - TakeProfitPips * MarketInfo (Symb2, MODE_POINT ), " бАх " , MagicNumber);
                       } 
                     else 
                       {  
                        WmOrderSend(Symb1, OP_SELL , Lots,     MarketInfo (Symb1, MODE_BID ), MarketInfo (Symb1, MODE_ASK ) + StopLossPips *   MarketInfo (Symb1, MODE_POINT ), MarketInfo (Symb1, MODE_ASK ) - TakeProfitPips * MarketInfo (Symb1, MODE_POINT ), " бАх " , MagicNumber);
                        WmOrderSend(Symb2, OP_BUY ,  Lots_New, MarketInfo (Symb2, MODE_ASK ), MarketInfo (Symb2, MODE_BID ) - StopLossPips *   MarketInfo (Symb2, MODE_POINT ), MarketInfo (Symb2, MODE_BID ) + TakeProfitPips * MarketInfo (Symb2, MODE_POINT ), " бАх " , MagicNumber);
                       }     
                                            
           }  
           
       if (lastProfit1 < 0 && lastProfit2 < 0 ) // Этого варианта нет на видео - удваивает объёмы на обоих символах  
           {
               
                     
                    Lots_New1 = lastLots1 * 2 ;
                    Lots_New2 = lastLots2 * 2 ;   
                                
 // ---------НОРМАЛИЗАЦИЯ НОВЫХ РАСЧЕТНЫХ ЛОТОВ И ОТКРЫТИЕ ОЧЕРЕДНОЙ ПОЗИЦИИ...            
                    Lots_New = NormalizeLots(Lots_New);
                     if ( MathRand () > 16384 )
                       {  
                        WmOrderSend(Symb2, OP_BUY ,  Lots_New2, MarketInfo (Symb2, MODE_ASK ), MarketInfo (Symb2, MODE_BID ) - StopLossPips *   MarketInfo (Symb2, MODE_POINT ), MarketInfo (Symb2, MODE_BID ) + TakeProfitPips * MarketInfo (Symb2, MODE_POINT ),   " бАх " , MagicNumber);
                        WmOrderSend(Symb1, OP_SELL , Lots_New1, MarketInfo (Symb1, MODE_BID ), MarketInfo (Symb1, MODE_ASK ) + StopLossPips *   MarketInfo (Symb1, MODE_POINT ), MarketInfo (Symb1, MODE_ASK ) - TakeProfitPips * MarketInfo (Symb1, MODE_POINT ), " бАх " , MagicNumber);
                       } 
                     else 
                       {  
                        WmOrderSend(Symb2, OP_SELL , Lots_New2, MarketInfo (Symb2, MODE_BID ), MarketInfo (Symb2, MODE_ASK ) + StopLossPips *   MarketInfo (Symb2, MODE_POINT ), MarketInfo (Symb2, MODE_ASK ) - TakeProfitPips * MarketInfo (Symb2, MODE_POINT ), " бАх " , MagicNumber);
                        WmOrderSend(Symb1, OP_BUY ,  Lots_New1, MarketInfo (Symb1, MODE_ASK ), MarketInfo (Symb1, MODE_BID ) - StopLossPips *   MarketInfo (Symb1, MODE_POINT ), MarketInfo (Symb1, MODE_BID ) + TakeProfitPips * MarketInfo (Symb1, MODE_POINT ), " бАх " , MagicNumber);
                       }     
                                            
           }       
    }       
//---------------------------------------------------------------------------------------------------               
   
   // ----------------------- Свежих закрытых ордеров не было - открытие стартовым лотом ------------    
pos1 = ExistPositions(Symb1,- 1 ,MagicNumber, 0 );
pos2 = ExistPositions(Symb2,- 1 ,MagicNumber, 0 );
 if (pos1 == false && pos2 == false ) // при отсутствии позиций в рынке по символам
    {       
     if ( MathRand () > 16384 )
             {  
              WmOrderSend(Symb1, OP_BUY ,  Lots, MarketInfo (Symb1, MODE_ASK ), MarketInfo (Symb1, MODE_BID ) - StopLossPips *   MarketInfo (Symb1, MODE_POINT ), MarketInfo (Symb1, MODE_BID ) + TakeProfitPips * MarketInfo (Symb1, MODE_POINT ), " старт " , MagicNumber);
              WmOrderSend(Symb2, OP_SELL , Lots, MarketInfo (Symb2, MODE_BID ), MarketInfo (Symb2, MODE_ASK ) + StopLossPips *   MarketInfo (Symb2, MODE_POINT ), MarketInfo (Symb2, MODE_ASK ) - TakeProfitPips * MarketInfo (Symb2, MODE_POINT ), " старт " , MagicNumber);
             } 
           else 
             {  
              WmOrderSend(Symb1, OP_SELL , Lots, MarketInfo (Symb1, MODE_BID ), MarketInfo (Symb1, MODE_ASK ) + StopLossPips *   MarketInfo (Symb1, MODE_POINT ), MarketInfo (Symb1, MODE_ASK ) - TakeProfitPips * MarketInfo (Symb1, MODE_POINT ), " старт " , MagicNumber);
              WmOrderSend(Symb2, OP_BUY ,  Lots, MarketInfo (Symb2, MODE_ASK ), MarketInfo (Symb2, MODE_BID ) - StopLossPips *   MarketInfo (Symb2, MODE_POINT ), MarketInfo (Symb2, MODE_BID ) + TakeProfitPips * MarketInfo (Symb2, MODE_POINT ), " старт " , MagicNumber);
             }    
    }         
    
     Print ( " lastProfit1 = " , lastProfit1, " lastProfit2 = " , lastProfit2);                 
        
        
   return ( 0 );     //  ВЫХОД ИЗ СТАРТ
}
파일:
fcusvedptz.mq4  22 kb
zymzspzmcy.ex4  10 kb
 
Roman. :

코드가 닫힌 이유는 무엇입니까?

봐 - 그 계획은 그러한가 / 그렇지 않습니까?

"지적 재산권" :))) 일부 이벤트 후에 소스를 확인하지 않습니다((

MQ 또는 WinDoof의 예로서 조언하지 않습니다. 아마도 다 이유가 있을 것입니다 :)))

아니요, 아주 간단한 논리입니다.

무작위 유전자 0:1

0이면 매도, 1이면 부표

둘 다 플러스로 닫힌 경우 계수 1
Elze, 계수 2, 카운터 1

여전히 누출 :))) ((

 
pako :

"지적 재산권" :))) 일부 이벤트 후에 소스를 확인하지 않습니다((

MQ 또는 WinDoof의 예로서 조언하지 않습니다. 아마도 다 이유가 있을 것입니다 :)))

아니요, 아주 간단한 논리입니다.

무작위 유전자 0:1

0이면 매도, 1이면 부표

둘 다 플러스로 닫힌 경우 계수 1
Elze, 계수 2, 카운터 1

여전히 누출 :))) ((


분명한. 비디오에는 그렇지 않습니다. 하나가 양수이면 다른 하나는 음수이고, 음수이면 lot_previous * 2입니다. 더하기로 닫히고 시작으로 열립니다. 영상에 다 나와있다...

조금 있다가 상위 5위 안에 쓰겠습니다...

 
Roman. :


분명한. 비디오에 있습니다. 그렇지 않습니다. 하나가 양수이면 다른 하나는 음수이고, 음수이면 lot_previous * 2입니다. 더하기로 닫히고 시작으로 열립니다. 영상에 다 나와있다...

조금 있다가 상위 5위 안에 쓰겠습니다...


네 말이 맞아 내가 잘 못봤어 미안해
 
pako :

네 말이 맞아 내가 잘 못봤어 미안해
:-)