apprenez comment gagner de l'argent avec les villageois [Episode 2] ! - page 298

 

C'est le but des tests - si nous descendons pendant une longue période et n'ouvrons que des ordres d'achat, le système devrait mourir (je répète - pas d'ordres de vente, par principe). Maintenant, c'est réparé.

 
YOUNGA:

J'ai trouvé la courbe d'équité simothétique - oui martingale sur le côté opposé . La taille du lot est calculée à l'aide de la formule lastlot = NormalizeDouble(R/(StopLoss-Step*(CountTrades(OP_BUY)) ),2) R=5..50 Distance entre les échelons des niveaux


La courbe peut être attrayante, c'est une question de goût, mais il est peu sympathique de gagner 10% par an avec un prélèvement aussi maximal.
 
Eh bien, c'est la moitié des entrées ;-) Je ne peux pas augmenter la rentabilité de quelque manière que ce soit (environ 20% par an probablement). Jusqu'à présent, j'ai démontré une approche du calcul des lots.
 
Roman.:

Je dois faire comme dans la vidéo... au début... IMHO. Alors regardez...


comme commandée :)))

dépôt initial de 10000

lot initial 1

entrée aléatoire, une paire vendue, une paire achetée

TR ~10pip

SL ~40bp

le lot "double" lorsque le stop loss est déclenché

Dossiers :
 
pako:


comme commandée :)))

dépôt initial de 10000

lot initial 1

entrée aléatoire, une paire vendue, une paire achetée

TR ~10pip

SL ~40bp

lorsque le stop loss se déclenche, le lot "double".

Pourquoi le code - fermé ?

Regardez - le modèle est-il comme ça/non ?

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

Pourquoi le code est-il verrouillé ?

Ecoutez - le schéma est-il comme ça/pas comme ça ?

"propriété intellectuelle" :)))) après certains événements, ne bougiez pas le code source(((

et vous ne conseillez pas, par exemple, MQ ou WinDoof, c'est probablement pour une raison :))))

Non, la logique est très simple.

gène aléatoire 0:1

si 0-vendre, si 1-acheter

si les deux clôtures sont positives, cote 1
Else, coefficient 2, compteur 1

et ainsi de suite

perdent toujours :))) ((

 
pako:

"propriété intellectuelle" :)))) après certains événements, ne bougiez pas le code source(((

et vous ne conseillez pas, par exemple, MQ ou WinDoof, c'est probablement pour une raison :))))

Non, la logique est très simple.

gène aléatoire 0:1

si 0-vendre, si 1-acheter

si les deux clôturent en plus, cote 1
si les deux ont clôturé en profit, la cote est de 2, le compteur de 1.

et ainsi de suite

perdent toujours :))) ((


Je vois. Ce n'est pas ce que l'on voit dans la vidéo. Si l'un est du côté positif et l'autre du côté négatif, alors lot_précédent * 2 pour celui qui est du côté négatif. Celui qui s'est fermé sur le côté positif ouvre le côté négatif. Il y a tout sur vidéo.

J'écrirai moi-même sur les cinq un peu plus tard...

 
Roman.:


Je vois. Ce n'est pas ce que l'on voit dans la vidéo. Si l'un est du côté positif et l'autre du côté négatif, alors lot_précédent * 2 pour celui qui est du côté négatif. Celui qui s'est fermé sur le côté positif ouvre le côté négatif. Il y a tout sur la vidéo.

J'écrirai moi-même sur les cinq un peu plus tard...


Vous avez raison, je n'ai pas bien regardé, je m'excuse.
 
pako:

Vous avez raison, je n'ai pas bien regardé, je m'excuse.
:-)
 
Roman.:
:-)


(Je suis désolé, l'EA opère différemment, avez-vous changé quelque chose à nouveau ?)
Raison: