[Arşivle!] BİRLİKTE DANIŞMAN YAZIYORUZ!!! - sayfa 3

 
dmmikl86 >> :

gün açabilir ve ardından daha küçük TF'nin alt fraktallarındaki durağı yukarı çekebilirsiniz.

etrafında oynadı)

fraktallar tarafından sonuna eklendi.


biraz daha ve kase :D

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

Sadece muhtemelen Fractals_TF adlandırılmalıdır

 
gince >> :

Sadece muhtemelen Fractals_TF adlandırılmalıdır

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

Aşağıdaki şeylere güvenmenin doğru olduğunu düşünüyorum:

- kırılma aralığındaki hareketin doğası ve kırılmadan önceki ruh hali (ki bu daha az önemlidir)

- genel bir eğilim, muhtemelen daha geniş bir zaman diliminde.

İkincisi ile ilgili olarak, Parabolik'ten dans etmeyi deneyin, yardımcı olabilir.

Yazdı ... Sonuç orijinalinden daha kötüydü .... prof. faktör optimizasyondan sonra sadece 1.31 :(

Bence bu sistemde osilatör kullanmak daha uygun

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

Genel olarak burada süper bir sistem yazmaya çalışmıyorum... Tüm bunlara neden başladığımı şubenin başında anlatmıştım.

Bir şeyi kontrol etmek istedim, yani. Asıl amacım (başta söylemek istemedim ama şubenin çıkacağını hissediyorum) tarihsel süreçte (diyelim ki son yarım yılda) geliştirmekte olduğunuz sistemin nasıl hareket edeceğini öğrenmek. geçmiş dönemler. Başlangıçta bunun uzun vadede 50/50 bir sistem olduğunu söylemiştim, yani. 2009'da sistemden çekiliyor. maksimum kârlılığa, geçmişte daha mı iyi çalışacak... Diyelim ki pr.f. 2.0 veya üstü... örneğin 2000'den daha iyi çalışır mı? ???

Bugün ne kadar iyi performans gösterirse, uzun vadede o kadar kötü performans göstereceğini tahmin ediyorum (ve sadece tahmin ediyorum!!!) Onlar. bugün maksimumu zorluyoruz. kar, ancak tarihte bu sistem artık 1.0 vermeyecek, ancak muhtemelen 0,9'a düşecek

Ama bunlar sadece varsayımlar... Henüz bir şey kanıtlamaya çalışmıyorum .... Dürüst olmak gerekirse, umarım yanılırım.

 

Dürüst olmak gerekirse, sistemin geçmişte nasıl davranacağını anlamaya çalışmanın nedenini anlamıyorum. Geleceğe bakmak daha iyi. Pazar değişiyor ve etrafta dolaşmak yok. Hatta

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

peki ya ne?

Şahsen benim varsayımım (ve sadece varsayım))) bağımlılığın olmadığı ve bunu bir sistem için, hatta bin sistem için söylediğim (hatta kanıtladığım), bunun kesinlikle tüm sistemler için doğal olacağı bir gerçek değil.

Öyle güzel bir söz vardır ki mutluluğun olmadığı yerde aramayın.

 
sayfuji >> :

Şahsen, benim varsayımım (ve sadece varsayım))) bağımlılığın olmadığı

Emin olmak istediğim şey bu...

Tarihte 50/50 çalışan bir danışman alın ve ek göstergeler, osilatörler ve diğer araçlarla tamamlayın. Kısa bir süre (yarım yıl) test edin ve ne olduğunu görün...

Swan ve Gince'e ilgi gösterdikleri için çok teşekkürler. Ve sen daha iyi olurdun sayfuji bir şey önerirdi.... örneğin, benzerlerine göre olmayan bir pozisyonun nasıl kapatılacağı. belki mantıklı olur...

 
RomanS >> :

Sadece önceki günün Yüksek/Düşükünü sabit bir kârla kırarak ve bugünün Yüksek/Düşükünde bir duraklama ile açılıyoruz. Neden tam olarak? Evet, çünkü öncelikle böyle bir sistem tek bir gösterge kullanmaz ...

Benim fikrim %100 aynı)) sadece H4 Tester sonuçlarında..

Benim için tek şey... benim için yön önceki mum tarafından seçilir ve durak iki mumdan daha küçüğü tarafından yerleştirilir - mevcut/önceki yüksek/düşük..



 
ALex2008 >> :

Benim fikrim %100 aynı)) sadece H4 Tester sonuçlarında..

Benim için tek şey... benim için yön önceki mum tarafından seçilir ve durak iki mumdan daha küçük olanı tarafından yerleştirilir - mevcut/önceki yüksek/düşük..



Harika fikir ... denemeye ve ondan dans etmeye değer ...

Linke baktım süre çok az.. 2000'den beri denemediniz mi? belki aynı sorun .... 50/50???