[Archivio!] SCRIVERE UN PAESE INSIEME!!! - pagina 3

 
dmmikl86 >> :

Si può aprire sul giornaliero e poi tirare su uno stop sui frattali inferiori di un TF più piccolo

Suonato)

aggiunto il trascinamento sui frattali.


un po' di più e un graal :D

File:
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 >> :

Solo Fractals_TF dovrebbe probabilmente essere chiamato

 
gince >> :

Solo Fractals_TF dovrebbe probabilmente essere chiamato

//+-----------------------------------------------------------------------+
//|                                                              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 >> :

Penso che sia corretto basarsi sulle seguenti cose:

- la natura del movimento all'interno dell'intervallo di rottura, e il sentimento prima della rottura (che è meno importante)

- La tendenza generale, forse su un TF più grande.

Per quanto riguarda l'ultimo, prova a ballare da Parabolic, forse ti aiuterà.

Ha scritto... Il risultato si è rivelato peggiore di quello originale.... Il fattore prof. è solo 1,31 dopo l'ottimizzazione :(

Penso che sia più sensato usare gli oscillatori in questo 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;       
  }
 

Comunque, non sto cercando di scrivere un super sistema qui... Ho descritto la ragione per fare questo all'inizio del thread.

Volevo controllare una cosa, cioè. Il mio obiettivo principale è (non volevo dirlo all'inizio, ma penso che questo ramo si estinguerà) scoprire come il sistema che sto migliorando in un periodo storico (diciamo l'ultimo semestre), si comporterà nei periodi passati. Ho detto all'inizio che è un sistema 50/50 a lungo termine, cioè se disegniamo il sistema nel 2009 alla massima redditività, funzionerà meglio nel passato ... Supponiamo di portarlo al livello di pr.f.. 2.0 o superiore... avrà un rendimento migliore dal 2000, ad esempio? ???

Presumo (e solo presumo!!!) che meglio si comporta oggi, peggio sarà a lungo termine. Cioè guadagniamo il massimo profitto oggi, e il sistema non mostrerà 1,0 sulla storia, e probabilmente scenderà a 0,9

Ma questa è solo un'ipotesi... Non sto cercando di dimostrare nulla ancora.... E onestamente, spero di sbagliarmi.

 

Onestamente non capisco perché cercare di capire come si comporterà il sistema in passato. È meglio guardare al futuro. Il mercato sta cambiando e non c'è modo di uscirne. Anche se

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

anche se lo fa, e allora?

La mia supposizione personale (e solo supposizione)) è che non c'è dipendenza, e avendo detto (anche dimostrato) questo per un sistema, o anche per mille sistemi, non è un fatto che sarà lo stesso per assolutamente tutti i sistemi.

C'è un buon detto: non cercare la felicità dove non è presente.

 
sayfuji >> :

La mia convinzione personale (e unica convinzione)) è che non c'è dipendenza.

È di questo che voglio essere sicuro...

Prendete un Expert Advisor che funziona al 50/50 sulla storia e aggiungetegli alcuni indicatori aggiuntivi, oscillatori e altri trucchi. Testalo su un piccolo periodo di tempo (mezzo anno) e vedi cosa succede...

Molte grazie a Swan e gince per aver mostrato interesse. Ed èmeglio che sayfuji suggerisca qualcosa .... come chiudere una posizione su qualcosa di diverso dal t.p., forse aiuterebbe...

 
RomanS >> :

Basta aprire alla rottura dell'alto/basso del giorno precedente con un TP fisso e fermarsi all'alto/basso di questo giorno. Perché esattamente? Perché non usa nessun indicatore.

La mia idea è al 100% la stessa)) solo su H4 Results tester...

L'unica cosa è... La mia direzione è scelta dalla candela precedente, e lo stop è impostato al più basso dei due - l'attuale/precedente High/Low...



 
ALex2008 >> :

La mia idea è al 100% la stessa)) solo su H4 Results tester...

L'unica cosa è... la mia direzione è scelta dalla candela precedente, e lo stop è posto dal più piccolo dei due - l'attuale/precedente alto/basso...



Grande idea... vale la pena provare a ballare da esso...

Ho guardato il link, il periodo è piccolo... hai provato con 2000? forse si verificherà lo stesso problema.... 50/50???

Motivazione: