[Arquivo!] ESCREVENDO JUNTO A UM PAÍS!!! - página 3

 
dmmikl86 >> :

Você pode abrir diariamente e depois puxar para cima uma parada nos fractais inferiores de um TF menor

Jogado)

acrescentou o rastreamento sobre os fractais.


um pouco mais e um graal :D

Arquivos anexados:
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 >> :

Somente Fractals_TF deve provavelmente ser nomeado

 
gince >> :

Somente Fractals_TF deve provavelmente ser nomeado

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

Acho correto confiar nas seguintes coisas:

- a natureza do movimento dentro da faixa de fuga e o sentimento antes da fuga (que é menos importante)

- A tendência geral, possivelmente em uma TF maior.

Quanto ao último, tente dançar da Parabólica, talvez isso ajude.

Escreveu... O resultado acabou por ser pior do que originalmente.... O fator prof. é de apenas 1,31 após a otimização :(

Acho que é mais sensato usar osciladores neste 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 qualquer forma, não estou tentando escrever um super sistema aqui... Descrevi a razão para fazer isto no início do fio.

Eu queria verificar uma coisa, a saber. Meu principal objetivo é (eu não queria dizer isso no início, mas acho que este ramo vai se extinguir) para descobrir como o sistema que estou melhorando ao longo de um período histórico (digamos, no último semestre), vai se comportar nos períodos passados. Eu disse no início que é um sistema 50/50 a longo prazo, ou seja, se o sistema for desenhado em 2009 com a máxima rentabilidade, ele funcionará melhor no passado ... Suponha que o levemos ao nível de pr.f.. 2.0 ou superior... terá um melhor desempenho desde, por exemplo, 2000 ? ???

Eu presumo (e só presumo!!!!) que quanto melhor ela funciona hoje, pior funcionará a longo prazo. Isto é, ganhamos o máximo lucro hoje, e o sistema não mostrará 1,0 na história, e provavelmente cairá para 0,9

Mas isto é apenas um palpite... Ainda não estou tentando provar nada.... E sinceramente, espero estar errado.

 

Sinceramente, não entendo por que tentar descobrir como o sistema irá se comportar no passado. É melhor olhar para o futuro. O mercado está mudando e não há como fugir dele. Mesmo se

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

Mesmo que sim, e daí?

Minha suposição pessoal (e apenas suposição)) é que não há dependência, e tendo dito (mesmo tendo provado) para um sistema, ou mesmo para mil sistemas, não é um fato que será o mesmo para absolutamente todos os sistemas.

Há um bom ditado - não procure a felicidade onde ela não está presente.

 
sayfuji >> :

Minha crença pessoal (e única crença)) é que não há dependência.

É disso que eu quero ter certeza...

Pegue um Expert Advisor que trabalha 50/50 na história e acrescente alguns indicadores adicionais, osciladores e outros truques a ela. Teste-o em um pequeno período de tempo (meio ano) e veja o que acontece...

Muito obrigado ao Swan e ao gince por mostrarem interesse. Eé melhor você dizerfuji sugerir algo como fechar uma posição em algo que não seja a p.t., talvez ajude...

 
RomanS >> :

Basta abrir na parada do dia anterior com um TP fixo e parar no dia anterior com um TP fixo e parar no dia anterior com um TP fixo. Por que exatamente? Porque não utiliza nenhum indicador.

Minha idéia é 100% a mesma)) apenas no testador de resultados H4...

A única coisa é... Minha direção é escolhida pela vela anterior, e a parada é colocada na parte inferior das duas - a atual/anterior alta/baixa...



 
ALex2008 >> :

Minha idéia é 100% a mesma)) apenas no testador de resultados H4...

A única coisa é... minha direção é escolhida pela vela anterior, e a parada é colocada pela menor das duas - a atual/anterior alta/baixa...



Grande idéia... vale a pena tentar dançar a partir dele...

Eu olhei para o link, o período é pequeno... você já tentou com 2000? talvez o mesmo problema ocorra.... 50/50???

Razão: