köylüler kazanmayı öğrenin [Bölüm 2]! - sayfa 298

 
YOUNGA :
Böyle bir efsane buldum - satın almadaki fırsatlar satıştakiyle yaklaşık olarak aynı olduğundan, o zaman nafik bunları birlikte test edin - gerçekte, satışta ticaret modülü danışmanda yazmıyor (ama satın alma ile aynı) Sadece bekleyen limit emirleri ile ticaret
Bu, fiyatın her zaman önce alışı vurduğu ve ardından CloseBy'de kapanarak satışa çıktığı anlamına mı geliyor?! Ve eğer düşerse ve uzun bir süre için?
 

test etmenin hilesi bu - uzun bir süre düşüşe geçersek ve sadece alım emirleri açıksa, sistem ölmeli (tekrar ediyorum - prensipte satılacak emir yok) Bir toparlanma için tüm umutlar toplam ile hile yapmaktır bir paket siparişin karı. Şimdi düzeltildi.

 
YOUNGA :

Bana eşitlik eğrisi simotik gibi geldi - evet, karşı hamlede bir martingale. Parti büyüklüğü, lastlot = NormalizeDouble(R/ ( StopLoss-Step*(CountTrades(OP_BUY)) ),2) formülü ile hesaplanır R=5..50 Seviyeler arası adım mesafesi


Eğri güzel olabilir, bu bir zevk meselesi, ancak böyle bir maksimum düşüşle yılda %10 kazanmak hoş değil.
 
Bu girdilerin yarısı ;-) Evet, verimi artıramam (muhtemelen yılda yaklaşık %20). Şimdiye kadar, partiyi hesaplamak için bir yaklaşım gösterdi.
 
Roman. :

Videoda olduğu gibi yapmak gerekiyor ... ilk ... IMHO. zaten oraya bak...


sipariş edildiği gibi :)))

ilk depo 10000

ilk parti 1

rastgele giriş, bir çift satılık, diğeri satın almak için

TP ~10pip

SL ~40pip

stoploss tetiklendiğinde, lot "iki katına çıkar"

 
pako :


sipariş edildiği gibi :)))

ilk depo 10000

ilk parti 1

rastgele giriş, bir çift satılık, diğeri satın almak için

TP ~10pip

SL ~40pip

stoploss tetiklendiğinde, lot "iki katına çıkar"

Kod neden kapalı?

Bak - şema böyle / değil mi?

Bu 4. sırada:

 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 );     //  ВЫХОД ИЗ СТАРТ
}
Dosyalar:
fcusvedptz.mq4  22 kb
zymzspzmcy.ex4  10 kb
 
Roman. :

Kod neden kapalı?

Bak - şema böyle / değil mi?

"fikri mülkiyet" :))) bazı olaylardan sonra kaynakları kontrol etmiyorum ((

ve size tavsiye etmiyorum, MQ veya WinDoof örneği olarak, muhtemelen hepsinin bir nedeni var :)))

Hayır, bu çok basit bir mantık.

rastgele gen 0:1

0-satıyorsa, 1-şamandıra ise

her ikisi de artı ile kapalıysa, katsayı 1
Elze, katsayı 2, sayaç 1

yakında

hala sızıyor :))) ((

 
pako :

"fikri mülkiyet" :))) bazı olaylardan sonra kaynakları kontrol etmiyorum ((

ve size tavsiye etmiyorum, MQ veya WinDoof örneği olarak, muhtemelen hepsinin bir nedeni var :)))

Hayır, bu çok basit bir mantık.

rastgele gen 0:1

0-satıyorsa, 1-şamandıra ise

her ikisi de artı ile kapalıysa, katsayı 1
Aksi takdirde, katsayı 2, sayaç 1

yakında

hala sızıyor :))) ((


Açık. Videoda var - öyle değil. Biri pozitif, diğeri negatifse, negatif olan için lot_previous * 2 olur. Artı ile kapanan, başlayanla açılır. Hepsi videoda...

İlk beşi biraz sonra yazacağım...

 
Roman. :


Açık. Videoda var - öyle değil. Biri pozitif, diğeri negatifse, negatif olan için lot_previous * 2 olur. Artı ile kapanan, başlayanla açılır. Hepsi videoda...

İlk beşi biraz sonra yazacağım...


haklısın dikkatli bakmamışım pardon
 
pako :

haklısın dikkatli bakmamışım pardon
:-)