¡aprender a ganar dinero aldeanos [Episodio 2] ! - página 298

 
YOUNGA:
Se me ocurrió esta leyenda - ya que las operaciones de compra son casi iguales a las de venta, no hay razón para probarlas juntas - de hecho, el EA no tiene un módulo para operar en la venta (pero es lo mismo que en la compra) Operar sólo con órdenes pendientes de límite
Entonces, ¿el precio siempre tocó primero por la compra y luego se topó con la venta y cerró en CloseBy? ¿Y si baja y durante mucho tiempo?
 

Este es el punto de las pruebas - si bajamos durante mucho tiempo y abrimos sólo órdenes de compra el sistema debería morir (repito - sin órdenes de venta, por principio). Ahora está arreglado.

 
YOUNGA:

La curva de la equidad me pareció simotética - sí martingala en el lado opuesto . El tamaño del lote se calcula mediante la fórmula lastlot = NormalizeDouble(R/(StopLoss-Step*(CountTrades(OP_BUY)) ),2) R=5..50 Paso-distancia entre niveles


La curva puede ser atractiva, es cuestión de gustos, pero es antipático ganar un 10% anual con una detracción tan máxima.
 
Bueno, eso es la mitad de las entradas ;-) No puedo aumentar la rentabilidad de ninguna manera (alrededor del 20% anual probablemente). Hasta ahora, he demostrado un enfoque para el cálculo de lotes.
 
Roman.:

Tengo que hacer como en el video... al principio... EN MI OPINIÓN. Entonces mira...


como se ordenó:)))

depósito inicial 10000

lote inicial 1

entrada al azar, un par de venta, un par de compra

TR ~10pip

SL ~40bp

el lote se "duplica" cuando se activa el stop loss

Archivos adjuntos:
 
pako:


como se ordenó:)))

depósito inicial 10000

lote inicial 1

entrada al azar, un par de venta, un par de compra

TR ~10pip

SL ~40bp

cuando se activa el stop loss, el lote se "duplica"

¿Por qué código - cerrado?

Compruébalo - ¿el patrón es así/no?

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

¿Por qué está bloqueado el código?

Mira - ¿el esquema es así/no?

"propiedad intelectual" :)))) después de algunos eventos, no velas el código fuente(((

y no aconseja, como ejemplo MQ o WinDoof, probablemente todo sea por una razón :)))

No, la lógica es bastante simple.

gen aleatorio 0:1

si 0-vender, si 1-comprar

si ambos cerraron en el lado positivo, las probabilidades son de 1
Si no, coeficiente 2, contador 1

y así sucesivamente

todavía pierden:))) ((

 
pako:

"propiedad intelectual" :)))) después de algunos eventos, no velas el código fuente(((

y no aconseja, como ejemplo MQ o WinDoof, probablemente todo sea por una razón :)))

No, la lógica es bastante simple.

gen aleatorio 0:1

si 0-vender, si 1-comprar

si ambos se acercan en el plus, las probabilidades son de 1
si ambos cierran en positivo, las probabilidades son 2, el contador es 1.

y así sucesivamente

todavía pierden:))) ((


Ya veo. No es así como se ve en el video. Si uno está en el lado positivo y el otro en el negativo, entonces lot_previous * 2 para el que está en el lado negativo. El que cerró en el lado positivo abre el de salida. El vídeo lo tiene todo.

Escribiré sobre los cinco yo mismo un poco más tarde...

 
Roman.:


Ya veo. No es así como se ve en el video. Si uno está en el lado positivo y el otro en el negativo, entonces lot_previous * 2 para el que está en el lado negativo. El que cerró en el lado positivo abre el de salida. Hay de todo en vídeo.

Escribiré sobre los cinco yo mismo un poco más tarde...


Tienes razón, no me fijé bien, me disculpo.
 
pako:

Tienes razón, no me fijé bien, me disculpo.
:-)