lernen, wie man Geld verdient Dorfbewohner [Episode 2] ! - Seite 298

 

Das ist der Punkt des Testens - wenn wir für eine lange Zeit nach unten gehen und nur Kaufaufträge öffnen, sollte das System sterben (ich wiederhole - keine Aufträge zu verkaufen, als eine Frage des Prinzips). Jetzt ist es behoben.

 
YOUNGA:

Ich habe festgestellt, dass die Aktienkurve simothetisch ist - ja, Martingal auf der gegenüberliegenden Seite. Die Losgröße wird mit der Formel lastlot = NormalizeDouble(R/(StopLoss-Step*(CountTrades(OP_BUY)) berechnet ),2) R=5..50 Stufenabstand zwischen den Ebenen


Die Kurve mag attraktiv sein, das ist Geschmackssache, aber es ist unsympathisch, mit einem solchen maximalen Drawdown 10 % pro Jahr zu verdienen.
 
Nun, das ist die Hälfte der Einträge ;-) Ich kann die Rentabilität in keiner Weise steigern (wahrscheinlich etwa 20 % pro Jahr). Bisher habe ich einen Ansatz zur Losberechnung vorgestellt.
 
Roman.:

Ich muss wie im Video vorgehen... am Anfang... IMHO. Dann pass auf...


wie befohlen:)))

Ersteinlage 10000

Ausgangslos 1

Zufälliger Eintrag, ein Paar verkaufen, ein Paar kaufen

TR ~10pip

SL ~40bp

Verdoppelung des Loses bei Auslösung des Stop-Loss

 
pako:


wie befohlen:)))

Ersteinlage 10000

Ausgangslos 1

Zufälliger Eintrag, ein Paar verkaufen, ein Paar kaufen

TR ~10pip

SL ~40bp

Wenn der Stopp-Loss ausgelöst wird, verdoppelt sich das Los.

Warum Code - geschlossen?

Schauen Sie sich das an - ist das Muster so/nicht so?

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

Warum ist der Code gesperrt?

Sehen Sie - ist das Schema so oder nicht?

"geistiges Eigentum" :)))) nach einigen Ereignissen den Quellcode nicht mehr kerzengerade(((

und Sie nicht raten, als ein Beispiel MQ oder WinDoof, es ist wahrscheinlich alles für einen Grund :)))

Nein, die Logik dahinter ist ganz einfach.

Zufallsgen 0:1

wenn 0-verkaufen, wenn 1-kaufen

wenn sie beide im Plus schließen, Quote 1
Sonst, Koeffizient 2, Zähler 1

und so weiter

immer noch verlieren:))) ((

 
pako:

"geistiges Eigentum" :)))) nach einigen Ereignissen den Quellcode nicht mehr kerzengerade(((

und Sie nicht raten, als ein Beispiel MQ oder WinDoof, es ist wahrscheinlich alles für einen Grund :)))

Nein, die Logik dahinter ist ganz einfach.

Zufallsgen 0:1

wenn 0-verkaufen, wenn 1-kaufen

wenn beide im Plus schließen, Quote 1
Wenn sie beide positiv abschließen, ist die Quote 2, der Zähler 1.

und so weiter

immer noch verlieren:))) ((


Ich verstehe. In dem Video sieht das anders aus. Wenn einer der beiden auf der Plusseite und der andere auf der Minusseite ist, dann ist lot_previous * 2 für den auf der Minusseite. Derjenige, der auf der Plusseite geschlossen hat, öffnet den Startpunkt. Das Video hat es in sich.

Ich werde später selbst etwas über die fünf schreiben...

 
Roman.:


Ich verstehe. In dem Video sieht das anders aus. Wenn einer der beiden auf der Plusseite und der andere auf der Minusseite ist, dann ist lot_previous * 2 für den auf der Minusseite. Derjenige, der auf der Plusseite geschlossen hat, öffnet den Startpunkt. Das Video hat es in sich.

Ich werde später selbst etwas über die fünf schreiben...


Sie haben Recht, ich habe nicht genau hingesehen, ich entschuldige mich.
 
pako:

Sie haben Recht, ich habe nicht genau hingesehen, ich entschuldige mich.
:-)
 
Roman.:
:-)


(Es tut mir leid, der EA handelt anders, haben Sie wieder etwas geändert?)