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

 
Esa es la cuestión, me gustaría eliminar la distancia fija entre fills y hacerlos dinámicos, y que se cierren cuando se cruce la línea contraria (cuando se invierta la señal)
 
BeerGod:
La cuestión es que quiero deshacerme de la distancia fija entre topes, y hacerlos dinámicos, y que se cierren al cruzar la línea contraria (a señal contraria)

He hecho un ancho de canal dinámico en función de la indicación del ATR. Hasta ahora he estado usando este esquema (invertido) tipo Avalanche (martin invertido) en micro-real, junto con Ilan con ajustes de esta rama. Todavía no he probado ese esquema en ilan. Mi entrada no es por bollinger, sino por el indicador OSMA.

Para Ilan - la herramienta de promediación, puede hacer una entrada de inicio por las barras de bollinger...

El código calcula la anchura del canal de promediación, a partir de la cual se realiza la promediación en volúmenes mayores:

extern int Period_ATR = 30;       // значение АТР для расчета динамического канала
extern double Mul_TP = 4.0;       // множитель целевой  прибыли в единицах волатильности (АТР)
extern double Mul_Sl = 0.8;       // множитель защитной  остановки с последующим производством усреднения позиции при ее сработке уже 
                                  // увеличенным лотом в единицах волатильности (АТР)
... 
//-----------------------------------------------------расчет динамического канала----------------------------    
    if (Symbol() == "GBPJPY" || Symbol() == "EURJPY" || Symbol() == "USDJPY" || Symbol() == "CHFJPY" ||  Symbol() == "NZDJPY" 
        ||  Symbol() == "USDRUR") 
         {                 
           channel = (iATR(Symbol(),PERIOD_D1,Period_ATR,1)*1000)*Mul_Sl;                 
           StopLossPips = NormalizeDouble(channel,0);                                                                                                         
         }       
    else
         {                 
           channel = 10* (iATR(Symbol(),PERIOD_D1,Period_ATR,1)*10000/3)*Mul_Sl;                 
           StopLossPips = NormalizeDouble(channel,0);                                                                                                         
         }               
          
    if (Symbol() == "XAGUSD")  // || Symbol() == "EURGBP")   StopLossPips = StopLoss;    // т.к. волатильность (по АТР) другая (выше)
         {                 
           channel = (iATR(Symbol(),PERIOD_D1,Period_ATR,1)*100)*Mul_Sl;                 
           StopLossPips = NormalizeDouble(channel,0);                                                                                                         
         }       
     if (Symbol() == "XAUUSD")  // || Symbol() == "XAUUSD" || Symbol() == "EURGBP")   StopLossPips = StopLoss;    // т.к. волатильность (по АТР) другая (выше)
         {                 
           channel = (iATR(Symbol(),PERIOD_D1,Period_ATR,1)*100)*Mul_Sl;   // Большая волатильность, поэтому умножение на 10.              
           StopLossPips = NormalizeDouble(channel,0);                                                                                                         
         }             
       
     TakeProfitPips=NormalizeDouble(StopLossPips*Mul_TP,0);  // расчет уровня тейка для всех инструментов по заданному значению динамического стопа        
                          
 

Gracias, voy a experimentar. En general, funciona si se rellena con sensatez.


 
BeerGod:

Gracias, voy a experimentar. Por lo general, hay cierta utilidad si se hacen las recargas con sensatez.


De nada. ¡Claro! ¡IMHO!

No estamos hablando de recargas, estamos hablando de promedios - eso si estás pensando en exps tipo Elan... :-)

En cuanto optimice las variables externas y prepare una versión para el mundo real, publicaré un informe.

También puedo hacer una entrada en las tiras de bollinger...

 
Decidí escribir mi "Illan" desde cero, es un comercio arriesgado, pero el riesgo está justificado, decidí usar bollejder para la entrada y ahora tengo que hacer un promedio sabio para mantener el sistema en el depósito mínimo.
 
BeerGod:
Decidí escribir mi "Illan" desde cero, es un comercio arriesgado, pero el riesgo está justificado, decidí usar bollejder como punto de entrada, ahora tengo que hacer un promedio sabio, para mantener el sistema con un depósito mínimo.

Transferiré los esquemas de promediación de mi Avalancha (inversión y acción) uno a uno en Ilan (precio de promediación de poses), y utilizaré variantes. Puede que también haga una entrada en Bollinger... Por ahora en OSME.

Tengo un código como este:

extern int Max_Iteration = 36;    // Максимальное количество итераций (ордеров) в мартине 
extern int k = 2;                 // с какой итерации тралим
extern int VAR_MM = 0;            // используемый вариант MM в соотв-ии:
                                  // 0 = множитель с числами ФИБО; 
                                  // 1 - по Илану в соответствие с LotExponent 
                                  // 2 - классический мартин - удвоение предыдущего объема
                                  // 3 - мн по ар-ой прогрессии 
                                  // 4 - мартин по схеме домножения предпредыдущего объёма на 2, т.е. 1,2,3,4,6,8,12,16,24,32
extern double LotExponent = 1.1;  // на сколько умножать стартовый лот в степени - схема по Илану          
....
 if (Iteration <= Max_Iteration && VAR_MM == 0)                  
              // Последующие лоты открываются по множителю в соответствие с числами ФИБО           
               switch(Iteration)                                  // Заголовок switch 
                   {                                              // Начало тела switch                  
                     case 1 : Lots_New = lastLots * 1; lots = lastLots; Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );break; //расчет нового объема       
                     case 2 : Lots_New = lots * 2;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;   
                     case 3 : Lots_New = lots * 3;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;      
                     case 4 : Lots_New = lots * 5;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;  
                     case 5 : Lots_New = lots * 8;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;     
                     case 6 : Lots_New = lots * 13;   Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;      
                     case 7 : Lots_New = lots * 21;   Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;     
                 ...
                     case 19: Lots_New = lots * 6765; Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;                                                   
                     case 20: Lots_New = lots * 10946;Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;                           
                     default: Lots_New = lots * 17711; {Iteration = 0; Print("Выход за пределы. Iteration = ", Iteration, " Lots_New = ", Lots_New ); }                      
                   }                                    // Конец тела switch      
                    
           if (Iteration <= Max_Iteration && VAR_MM == 1)
              //Последующие лоты открываются по ИЛАНУ через экспоненту: iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal);
               switch(Iteration)                        // Заголовок switch 
                   {                                    // Начало тела switch    
                  // case 0 : Lots_New = lots;  Print("старт, Lots_New = ", Lots_New );break; // СТАРТ                
                     case 1 : Lots_New = lastLots * 1; lots = lastLots; Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );break; //расчет нового объема                                                                                                                        
                     // расчет последующих объемов, открываемых позиций, начиная с объема ПЕРВОЙ-case 1
                     default: Lots_New = lots * MathPow(LotExponent, Iteration); Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);                                                                    
                   }                                   // Конец тела switch  
                
          if (Iteration <= Max_Iteration && VAR_MM == 2)// Последующие лоты открываются в соответствие с классическим мартином - удвоение           
               switch(Iteration)                       // Заголовок switch 
                   {                                   // Начало тела switch                       
                     case 1 : Lots_New = lastLots * 1; lots = lastLots; Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );break; //расчет нового объема       
                     case 2 : Lots_New = lots * 2;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;   
                     case 3 : Lots_New = lots * 4;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;      
                ...                                                    
                     case 16: Lots_New = Lots * 32768;Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;
                     case 17: Lots_New = Lots * 65536;Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;                                                                  
                     default: Lots_New = lots * 65536; {Iteration = 0; Print("Выход за пределы. Iteration = ", Iteration, " Lots_New = ", Lots_New ); }                      
                   }                          
                   
         if (Iteration <= Max_Iteration && VAR_MM == 3)// Последующие лоты открываются в соответствие с членами ар прогрессии           
               switch(Iteration)                       // Заголовок switch 
                     {                                 // Начало тела switch         
                     case 1 : Lots_New = lastLots * 1; lots = lastLots; Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );break; //расчет нового объема            
                     case 2 : Lots_New = lots * 3;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;   
                     case 3 : Lots_New = lots * 5;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;      
                     case 4 : Lots_New = lots * 7;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;  
                     case 5 : Lots_New = lots * 9;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;     
                ...
                     
                     case 57: Lots_New = lots * 113;  Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break; 
                     case 58: Lots_New = lots * 115;  Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;        
                     default: Lots_New = lots * 117;  {Iteration = 0; Print("Выход за пределы. Iteration = ", Iteration, " Lots_New = ", Lots_New ); }                       
                   }                                   // Конец тела switch                                                      
              
               if (Iteration <= Max_Iteration && VAR_MM == 4) // мартин по схеме домножения предпредыдущего объёма на 2, т.е. 1,2,3,4,6,8,12,16,24,32             
               switch(Iteration)                       // Заголовок switch 
                   {                                   // Начало тела switch                       
                     case 1 : Lots_New = lastLots * 1; lots = lastLots; Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );break; //расчет нового объема       
                     case 2 : Lots_New = lots * 2;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;   
                     case 3 : Lots_New = lots * 3;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;      
                     case 4 : Lots_New = lots * 4;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;  
                   ...  
                    
                     case 31: Lots_New = lots * 49152;Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;
                     case 32: Lots_New = lots * 65536;Print("Iteration = ", Iteration, " Lots_New = ", Lots_New);  break;
                     default: Lots_New = lots * 98304;{Iteration = 0; Print("Выход за пределы. Iteration = ", Iteration, " Lots_New = ", Lots_New ); }  
                   }                          
      
 
Gracias por los códigos, me dan una idea, aunque reescribiré el código para que se ajuste a mi lógica, debería experimentar con el promediado dinámico, entonces los milagros son posibles) El sistema tiene el potencial... Sí, es una parte de la historia, pero todo depende de la distancia de promediado (el cálculo correcto)
 
¿Funciona en la historia? ¿Quizás sea el momento de ir a la fuente de las citas?
 
 

¡Priva!

Enhorabuena por el nacimiento de su hija.

¡Bien hecho!