[아카이브!] 어드바이저를 함께 씁니다!!! - 페이지 3

 
dmmikl86 >> :

당신은 당일에 열고 더 작은 TF의 더 낮은 프랙탈에서 정지를 당길 수 있습니다

연주)

프랙탈로 후행을 추가했습니다.


조금 더 그리고 성배 :D

파일:
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 >> :

Fractals_TF만 이름을 지정해야 합니다.

 
gince >> :

Fractals_TF만 이름을 지정해야 합니다.

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

다음 사항에 의존하는 것이 옳다고 생각합니다.

- 브레이크아웃 범위 내에서의 움직임의 특성 및 브레이크아웃 전의 분위기(덜 중요함)

- 일반적인 경향, 가능하면 더 큰 기간에.

후자에 관해서는 Parabolic에서 춤을 추면 도움이 될 것입니다.

쓴 ... 결과는 원본보다 더 나빴습니다 .... 교수. 요소는 최적화 후 1.31에 불과합니다.

이 시스템에서는 오실레이터를 사용하는 것이 더 편리하다고 생각합니다.

 //+-----------------------------------------------------------------------+
//|                                                     Крокодил ГЕНА.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 ;       
  }
 

일반적으로 여기에서 슈퍼 시스템을 작성하려고 하는 것이 아닙니다. 이 모든 것을 분기 초반에 시작한 이유를 설명했습니다.

나는 무언가를 확인하고 싶었다. 내 주요 목표는 (처음에는 말하고 싶지 않았지만 지점이 나갈 것 같습니다) 역사적 기간(지난 반년을 가정해 봅시다)에서 개선하고 있는 시스템이 앞으로 어떻게 작동할지 알아내는 것입니다. 지난 기간. 처음에 나는 이것이 장기적으로 50/50 시스템이라고 이미 말했습니다. 2009년 시스템 철수. 수익성을 극대화하려면 과거에 더 잘 작동할까요... pr.f. 2.0 이상... 예를 들어 2000년부터 더 잘 작동합니까? ???

나는 그것이 오늘날 더 나은 성과를 낼수록 장기적으로 더 나빠질 것이라고 추측한다(그리고 추측만 할 수 있다!!!). 저것들. 오늘 우리는 최대를 밀고 있습니다. 그러나 역사상 이 시스템은 더 이상 1.0을 제공하지 않지만 아마도 0.9로 떨어질 것입니다.

하지만 이것들은 단지 가정일 뿐입니다... 저는 아직 아무것도 증명하려고 하지 않습니다.... 그리고 솔직히 말하면, 저는 제가 틀렸기를 바랍니다.

 

과거에 시스템이 어떻게 작동할지 이해하려고 노력하는 이유를 솔직히 이해하지 못합니다. 미래를 내다보는 것이 좋습니다. 시장은 변하고 있고 아무데도 가지 않습니다. 조차

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

그래서, 그것은 무엇입니까?

개인적으로 내 가정(그리고 유일한 가정))) 종속성이 없으며 하나의 시스템, 심지어 천 시스템에 대해 이것을 말했지만(심지어 증명하기까지) 이것이 절대적으로 모든 시스템에서 자연스러울 것이라는 사실은 아닙니다.

그런 좋은 말이 있습니다. 행복이 존재하지 않는 곳에서 찾지 마십시오.

 
sayfuji >> :

개인적으로, 내 가정 (그리고 유일한 가정))) 의존성이 없다는 것

내가 확인하고 싶은 것은 이것이다...

역사에 대해 50/50으로 일하는 고문을 선택하고 추가 지표, 발진기 및 기타 장치로 마무리하십시오. 짧은 기간(반년) 동안 테스트하고 어떤 일이 발생하는지 확인하십시오...

관심을 보여주신 Swan과 gince에게 감사드립니다. 그리고 당신은 더 나을 것입니다 sayfuji는 무언가를 제안할 것입니다. 예를 들어, 이와 같지 않은 포지션을 청산하는 방법. 아마도 의미가있을 것입니다 ...

 
RomanS >> :

우리는 고정 이익으로 전날의 고가/저가를 돌파하고 오늘의 고가/저가에서 정지하여 개장합니다. 정확히 왜? 예, 첫째, 그러한 시스템은 단일 지표를 사용하지 않기 때문에 ...

내 생각은 100% 동일)) H4 Tester 결과에서만..

유일한 것은 ... 나를 위해 방향은 이전 촛불에 의해 선택되고 정지는 현재/이전 고가/저가 중 더 작은 것에 의해 배치됩니다.



 
ALex2008 >> :

내 생각은 100% 동일)) H4 Tester 결과에서만..

유일한 것은 ... 나를 위해 방향은 이전 캔들에 의해 선택되고 정지는 현재/이전 고가/저가 중 더 작은 것에 의해 배치됩니다..



좋은 아이디어 ... 시도하고 춤을 출 가치가 있습니다 ...

링크를 보니 기간이 너무 짧네요.. 2000년 이후로 안써봤나요? 아마 같은 문제가 될 것입니다 .... 50/50???