[¡Archivo!] ¡¡¡Escribiendo un país juntos!!! - página 3

 
dmmikl86 >> :

Puedes abrir en el diario y luego subir el stop en los fractales inferiores de un TF menor

Reproducido)

añadió el arrastre en los fractales.


un poco más y un grial :D

Archivos adjuntos:
gena.mq4  5 kb
 


//+-----------------------------------------------------------------------+
//|                                                              Gena.mq4 |
//+-----------------------------------------------------------------------+
// Описание ТС
// 1. Открытие позиций происходит при пробитии High или Low предыдущего дня
//    SL ставиться на High или Low текущего дня, TP выставляется во внешних переменных, 
//    единственная оговорка не более 1 позиции в день в переменной LastTradeTime 
//    если в ней нет необходимост смело сносите /RomanS/
// 2.
// 3.
// 4.
// 5.
 
// Внешние переменные
extern double TakeProfit = 4000;

extern string vybor_perioda ="1;5;15;30;60;240;1440";
extern int period = 1440;

extern int Fractals_TF = 240;
//extern
double Lots = 0.1;
// Глобальные переменные
int LastTradeTime = 0;      // Время последней открытой сделки
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
  // Поехали... :)
int start() 
 {
//+----фсяки разны значения, индикаторы и т.д. и т.п. :)
double SL=0, TP=0,
Spread=Ask-Bid,
StopLevel=Point*MarketInfo(Symbol(),MODE_STOPLEVEL);
int per;
switch( period)
{
case 1440:  per=PERIOD_D1; 	break;
case 240:   per=PERIOD_H4; 	break;
case 60:    per=PERIOD_H1; 	break;
case 30:    per=PERIOD_M30; 	break;
case 15:    per=PERIOD_M15; 	break;
case 5:     per=PERIOD_M5; 	break;
case 1:     per=PERIOD_M1; 	break;
default:    per=0; 		break;
}

HighD1=iHigh(Symbol(), per,1),
LowD1=iLow(Symbol(), per,1);
//----Критерии открытия позиций
bool Open_Bay=false, Open_Sell=false;
if(Bid > HighD1+0.5*Point) Open_Bay = true; 
if(Bid < LowD1-0.5*Point) Open_Sell = true;
//----Проверяем нужно ли торговать :)// Закрытие позиции// Модификация ордера
int Ticket, cnt, Total=0;
for( cnt=0; cnt<OrdersTotal(); cnt++)
   {
   OrderSelect( cnt, SELECT_BY_POS);
   if(OrderSymbol()==Symbol())
      {
      Total++;
      if(OrderType()==OP_BUY)// long position is opened
         {
         SL= LowerFractal();
         if( SL-0.5*Point>OrderStopLoss()
         && SL-0.5*Point>OrderOpenPrice()
         && Bid- SL> StopLevel+0.5*Point)
            {
            OrderModify(OrderTicket(),OrderOpenPrice(), SL,OrderTakeProfit(),0);
            return(0);
            }
         }
//--------
      if(OrderType()==OP_SELL)// Short position is opened
         {
         SL= UpperFractal();
         if( SL+0.5*Point<OrderStopLoss()
         && SL+0.5*Point<OrderOpenPrice()
         && SL-Ask> StopLevel+0.5*Point)
            {
            OrderModify(OrderTicket(),OrderOpenPrice(), SL,OrderTakeProfit(),0);
            return(0);
            }
         }
      }
   }
//+----Открытие позиций
int TradeTime=TimeDay(TimeCurrent());
if( Total<1 && LastTradeTime!= TradeTime)
   {
   if( Open_Bay)
      {      
      //SL = LowerFractal();
      SL = iLow(NULL,PERIOD_D1,0);
      if( TakeProfit>0) TP = Ask + TakeProfit*Point;
      if(Bid- SL< StopLevel-0.5*Point) return(0);  // проверяем минимальный уровень стопов
      //Alert("Пробуем открыть Buy ",SYMBOL, " по ",ASK, SL, TP);         
      Ticket=OrderSend(Symbol(),OP_BUY, Lots,Ask,20, SL, TP);
      if ( Ticket > 0)                                                  
         {            
         //Alert ("Открыт ордер Buy ",Ticket);
         LastTradeTime= TradeTime; // задаем время сделки, чтобы сегодня больше не торговать 
         }     
      return(0);
      }
//+----
   if( Open_Sell)
      {      
      //SL = UpperFractal()+Spread;
      SL = iHigh(NULL,PERIOD_D1,0)+ Spread;
      if( TakeProfit>0) TP = Bid - TakeProfit*Point;
      if ( SL-Ask< StopLevel-0.5*Point) return(0); // проверяем минимальный уровень стопов
      Ticket = OrderSend(Symbol(),OP_SELL, Lots,Bid,20, SL, TP);
      if ( Ticket > 0)                                                  
         { 
         //Alert ("Открыт ордер Sell ",Ticket);
         LastTradeTime= TradeTime;  // задаем время сделки, чтобы сегодня больше не торговать
         }         
      }
   }
  return(0);
 }
//+------------------------------------------------------------------+
double LowerFractal()
   {
   for(int i=3; i<iBars(NULL, Fractals_TF)-3; i++)
      {
      double Fractal=iFractals(NULL, Fractals_TF,MODE_LOWER, i);
      if( Fractal!=0.0) return( Fractal);
      }
   }
//+-----
double UpperFractal()
   {
   for(int i=3; i<iBars(NULL, Fractals_TF)-3; i++)
      {
      double Fractal=iFractals(NULL, Fractals_TF,MODE_UPPER, i);
      if( Fractal!=0.0) return( Fractal);
      }
   }
//+-----
 
gince >> :

Probablemente, sólo Fractals_TF debería llamarse

 
gince >> :

Probablemente, sólo Fractals_TF debería llamarse

//+-----------------------------------------------------------------------+
//|                                                              Gena.mq4 |
//+-----------------------------------------------------------------------+
// ???????? ??
// 1. ???????? ??????? ?????????? ??? ???????? High ??? Low ??????????? ???
//    SL ????????? ?? High ??? Low ???????? ???, TP ???????????? ?? ??????? ??????????, 
//    ???????????? ???????? ?? ????? 1 ??????? ? ???? ? ?????????? LastTradeTime 
//    ???? ? ??? ??? ???????????? ????? ??????? /RomanS/
// 2.
// 3.
// 4.
// 5.
 
// ??????? ??????????
extern double TakeProfit = 4000;

extern string vybor_perioda ="1;5;15;30;60;240;1440";
extern int period = 1440;

extern int fract = 240;
//extern
double Lots = 0.1;
// ?????????? ??????????
int LastTradeTime = 0;      // ????? ????????? ???????? ??????
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
  // ???????... :)
int start() 
 {
//+----????? ????? ????????, ?????????? ? ?.?. ? ?.?. :)
double SL=0, TP=0,
Spread=Ask-Bid,
StopLevel=Point*MarketInfo(Symbol(),MODE_STOPLEVEL);
int per;
switch( period)
{
case 1440:  per=PERIOD_D1; fract=240;break;
case 240:   per=PERIOD_H4; fract=60;break;
case 60:    per=PERIOD_H1; fract=30;break;
case 30:    per=PERIOD_M30; fract=15;break;
case 15:    per=PERIOD_M15; fract=5;break;
case 5:     per=PERIOD_M5; fract=1;break;
default:    per=0; 		break;
}

double _High=iHigh(Symbol(), per,1);
double _Low=iLow(Symbol(), per,1);
//----???????? ???????? ???????
bool Open_Bay=false, Open_Sell=false;
if(Bid > _High+0.5*Point) Open_Bay = true; 
if(Bid < _Low-0.5*Point) Open_Sell = true;
//----????????? ????? ?? ????????? :)// ???????? ???????// ??????????? ??????
int Ticket, cnt, Total=0;
for( cnt=0; cnt<OrdersTotal(); cnt++)
   {
   OrderSelect( cnt, SELECT_BY_POS);
   if(OrderSymbol()==Symbol())
      {
      Total++;
      if(OrderType()==OP_BUY)// long position is opened
         {
         SL= LowerFractal( fract);
         if( SL-0.5*Point>OrderStopLoss()
         && SL-0.5*Point>OrderOpenPrice()
         && Bid- SL> StopLevel+0.5*Point)
            {
            OrderModify(OrderTicket(),OrderOpenPrice(), SL,OrderTakeProfit(),0);
            return(0);
            }
         }
//--------
      if(OrderType()==OP_SELL)// Short position is opened
         {
         SL= UpperFractal( fract);
         if( SL+0.5*Point<OrderStopLoss()
         && SL+0.5*Point<OrderOpenPrice()
         && SL-Ask> StopLevel+0.5*Point)
            {
            OrderModify(OrderTicket(),OrderOpenPrice(), SL,OrderTakeProfit(),0);
            return(0);
            }
         }
      }
   }
//+----???????? ???????
int TradeTime=TimeDay(TimeCurrent());
if( Total<1 && LastTradeTime!= TradeTime)
   {
   if( Open_Bay)
      {      
      //SL = LowerFractal();
      SL = iLow(NULL,PERIOD_D1,0);
      if( TakeProfit>0) TP = Ask + TakeProfit*Point;
      if(Bid- SL< StopLevel-0.5*Point) return(0);  // ????????? ??????????? ??????? ??????
      //Alert("??????? ??????? Buy ",SYMBOL, " ?? ",ASK, SL, TP);         
      Ticket=OrderSend(Symbol(),OP_BUY, Lots,Ask,20, SL, TP);
      if ( Ticket > 0)                                                  
         {            
         //Alert ("?????? ????? Buy ",Ticket);
         LastTradeTime= TradeTime; // ?????? ????? ??????, ????? ??????? ?????? ?? ????????? 
         }     
      return(0);
      }
//+----
   if( Open_Sell)
      {      
      //SL = UpperFractal()+Spread;
      SL = iHigh(NULL,PERIOD_D1,0)+ Spread;
      if( TakeProfit>0) TP = Bid - TakeProfit*Point;
      if ( SL-Ask< StopLevel-0.5*Point) return(0); // ????????? ??????????? ??????? ??????
      Ticket = OrderSend(Symbol(),OP_SELL, Lots,Bid,20, SL, TP);
      if ( Ticket > 0)                                                  
         { 
         //Alert ("?????? ????? Sell ",Ticket);
         LastTradeTime= TradeTime;  // ?????? ????? ??????, ????? ??????? ?????? ?? ?????????
         }         
      }
   }
  return(0);
 }
//+------------------------------------------------------------------+
double LowerFractal(int fract)
   {
int Fractals_TF;
 Fractals_TF= fract;
   for(int i=3; i<iBars(NULL, Fractals_TF)-3; i++)
      {
      double Fractal=iFractals(NULL, Fractals_TF,MODE_LOWER, i);
      if( Fractal!=0.0) return( Fractal);
      }
   }
//+-----
double UpperFractal(int fract)
   {
   int Fractals_TF;
 Fractals_TF= fract;
   for(int i=3; i<iBars(NULL, Fractals_TF)-3; i++)
      {
      double Fractal=iFractals(NULL, Fractals_TF,MODE_UPPER, i);
      if( Fractal!=0.0) return( Fractal);
      }
   }
//+-----
 
sayfuji >> :

Creo que es correcto basarse en las siguientes cosas:

- la naturaleza del movimiento dentro del rango de ruptura, y el sentimiento antes de la ruptura (que es menos importante)

- La tendencia general, posiblemente en una TF mayor.

En cuanto a la última, intenta bailar desde Parabolic, quizás te ayude.

Escribió... El resultado resultó ser peor que el original.... El factor Prof. es sólo 1,31 después de la optimización :(

Creo que es más sensato utilizar osciladores en este sistema

//+-----------------------------------------------------------------------+
//|                                                     Крокодил ГЕНА.mq4 |
//|                                                         Крокодил ГЕНА |
//+-----------------------------------------------------------------------+
// Описание ТС
// 1. Открытие позиций происходит при пробитии High или Low предыдущего дня
//    SL ставиться на High или Low текущего дня, TP выставляется во внешних переменных, 
//    единственная оговорка не более 1 позиции в день в переменной LastTradeTime 
//    если в ней нет необходимости смело сносите /RomanS/
// 2. Добавил к условию открытия трендовый параболик + трал. стоп по нему же на М5. 
//    Результат оказался хуже :( /RomanS/
// 3.
// 4.
// 5.
 
  // Внешние переменные
  extern double TakeProfit = 900;
  extern double SAR_steep  = 0.0005;
  extern double Lot        = 1;    
  extern string SYMBOL     = "EURUSD";
  
  // Глобальные переменные
  int LastTradeTime = 0;      // Время последней открытой сделки
  
  // Поехали... :)
  int start() 
  {  
     int Ticket;
  double BID,
         ASK,
         SL=0,
         TP=0;                                  
    bool Trade     = true,
         Open_Bay  = false,
         Open_Sell = false;

  // Проверяем можно ли торговать
  if ( Trade==true) 
   {
   
  // Критерии открытия позиций
    ASK = MarketInfo( SYMBOL,10);
    BID = MarketInfo( SYMBOL,9);
    if ( BID > iHigh ( SYMBOL,PERIOD_D1,1) && iSAR( SYMBOL,PERIOD_M5, SAR_steep,0.2,0)< BID) Open_Bay = true; 
    if ( BID < iLow ( SYMBOL,PERIOD_D1,1) && iSAR( SYMBOL,PERIOD_M5, SAR_steep,0.2,0)> BID) Open_Sell = true;
        
  // Открытие позиций
      if ( Open_Bay == true && OrdersTotal()==0 && TimeDay(TimeCurrent())!= LastTradeTime)                                           
        {      
         RefreshRates(); 
          SL = iLow( SYMBOL,PERIOD_D1,0);
          TP = ASK + TakeProfit*Point;
          if (( ASK- SL)/Point<MarketInfo( SYMBOL,14)) return;  // проверяем минимальный уровень стопов
          Alert("Пробуем открыть Buy ", SYMBOL, " по ", ASK, SL, TP);         
          Ticket=OrderSend( SYMBOL,OP_BUY, Lot, ASK,20, SL, TP);         
           if ( Ticket > 0)                                                  
            {            
             Alert ("Открыт ордер Buy ", Ticket);
             LastTradeTime=TimeDay(TimeCurrent()); // задаем время сделки, чтобы сегодня больше не торговать 
             return;                                                       
            }         
        }
     if ( Open_Sell == true && OrdersTotal()==0 && TimeDay(TimeCurrent())!= LastTradeTime)                                             
        {      
         RefreshRates();                                             
          SL = iHigh ( SYMBOL,PERIOD_D1,0);
          TP = BID - TakeProfit*Point;
          if (( SL- BID)/Point<MarketInfo( SYMBOL,14)) return; // проверяем минимальный уровень стопов
          Ticket = OrderSend( SYMBOL,OP_SELL, Lot, BID,20, SL, TP);         
           if ( Ticket > 0)                                                  
             { 
              Alert ("Открыт ордер Sell ", Ticket);
              LastTradeTime=TimeDay(TimeCurrent());  // задаем время сделки, чтобы сегодня больше не торговать
              return;                                   
             }         
          return;                                                       
        }
   
   // Закрытие позиции
   // .......
   
   // Модификация ордера
    for(int i=0; i<=OrdersTotal(); i++)      
      {  
       if (OrderSelect( i, SELECT_BY_POS)==true)     
         {                                       
         if (OrderSymbol()!= SYMBOL) continue;    
          if (OrderType() == 0)                                                    
            {               
             double TralStop = iSAR( SYMBOL,PERIOD_M5, SAR_steep,0.2,0);
             if ( SL < TralStop)                   
               {
                SL= TralStop;                                   
                 bool Ans=OrderModify(OrderTicket(),OrderOpenPrice(), SL,OrderTakeProfit(),0); 
                 if ( Ans == true)                                       
                  {               
                //   Alert ("Ордер Bay ","EURUSD"," №",Ticket," модифицирован. Новый Stop Loss ", SL);               
                   break;                                             
                  }   
               }
            }
          if (OrderType() == 1)               
            {  
             TralStop = iSAR( SYMBOL,PERIOD_M5, SAR_steep,0.2,0);
              if ( SL > TralStop)  
               {
                SL= TralStop;  
                if (( SL- ASK)/Point<MarketInfo("EURUSD",14)) break;                  
                Ans=OrderModify(OrderTicket(),OrderOpenPrice(), SL,OrderTakeProfit(),0); 
                 if ( Ans == true)                                       
                   {               
                  //  Alert ("Ордер Sell ","EURUSD"," №",Ticket," модифицирован. Новый Stop Loss ", SL);               
                    break;                                             
                    }         
               }
            }
         }
      }
   }
  return;       
  }
 

De todos modos, no estoy tratando de escribir un súper sistema aquí... He descrito la razón para hacer esto al principio del hilo.

Quería comprobar algo, a saber. Mi objetivo principal es (no quería decirlo al principio, pero creo que esta rama se va a extinguir) averiguar cómo se comportará el sistema que estoy mejorando en un periodo histórico (digamos, el último medio año), en los periodos pasados. Dije al principio que es un sistema 50/50 a largo plazo, es decir, si dibujamos el sistema en 2009 con la máxima rentabilidad, funcionará mejor en el pasado ... Supongamos que lo llevamos al nivel de pr.f.. 2.0 o superior... ¿tendrá mejores resultados desde, por ejemplo, el año 2000? ???

Asumo (¡¡y sólo asumo!!) que cuanto mejor funcione hoy, peor lo hará a largo plazo. Es decir, ganamos el máximo beneficio hoy, y el sistema no mostrará 1,0 en el historial, y probablemente caerá a 0,9

Pero esto es sólo una suposición... No estoy tratando de demostrar nada todavía.... Y sinceramente, espero equivocarme.

 

Sinceramente, no entiendo por qué intentar averiguar cómo se comportará el sistema en el pasado. Es mejor mirar al futuro. El mercado está cambiando y no hay forma de evitarlo. Incluso si

Я предпологаю (и только предпологаю!!!), что чем лучше она будет работать сегодня, тем хуже она отработает в долгосрочке.

aunque lo haga, ¿y qué?

Mi suposición personal (y sólo una suposición)) es que no hay dependencia, y habiéndolo dicho (incluso habiéndolo demostrado) para un sistema, incluso para mil sistemas, no es un hecho que vaya a ser igual para absolutamente todos los sistemas.

Hay un buen refrán: no busques la felicidad donde no la hay.

 
sayfuji >> :

Mi creencia personal (y única creencia)) es que no hay dependencia.

Eso es lo que quiero asegurar...

Tome un Asesor Experto que funciona 50/50 en el historial y añada algunos indicadores adicionales, osciladores y otros trucos. Pruébalo en un pequeño periodo de tiempo (medio año) y mira lo que pasa...

Muchas gracias a Swan y a gince por mostrar su interés. Yserá mejor que sayfuji sugiera algo .... como cerrar una posición en algo que no sea el t.p., tal vez ayude...

 
RomanS >> :

Simplemente abra en el desglose del Máximo/Mínimo del día anterior con un TP fijo y pare en el Máximo/Mínimo de este día. ¿Por qué exactamente? Porque no utiliza ningún indicador.

Mi idea es 100% la misma)) solo que en H4 Results tester...

Lo único es que... Mi dirección es elegida por la vela anterior, y la parada se establece en el más bajo de los dos - el actual / anterior Alto / Bajo...



 
ALex2008 >> :

Mi idea es 100% la misma)) solo que en H4 Results tester...

Lo único es que... mi dirección es elegida por la vela anterior, y el stop es colocado por el menor de los dos - el alto/bajo actual/anterior...



Gran idea... vale la pena intentar bailar desde ella...

He mirado el enlace, el punto es pequeño... ¿has probado con el 2000? quizás se produzca el mismo problema.... 50/50???