[Archiv] EIN LAND ZUSAMMEN SCHREIBEN!!! - Seite 3

 
dmmikl86 >> :

Sie können auf dem Tageskurs eröffnen und dann einen Stopp auf den unteren Fraktalen eines kleineren TF nachziehen.

Gespielt)

zusätzliche Nachlaufzeit bei Fraktalen.


ein bisschen mehr und ein Gral :D

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

Nur Fractals_TF sollte wahrscheinlich benannt werden

 
gince >> :

Nur Fractals_TF sollte wahrscheinlich benannt werden

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

Ich denke, es ist richtig, sich auf die folgenden Dinge zu stützen:

- die Art der Bewegung innerhalb des Ausbruchsbereichs und die Stimmung vor dem Ausbruch (was weniger wichtig ist)

- Der allgemeine Trend, möglicherweise in einer größeren TF.

Was den letzten Punkt betrifft, versuche, von Parabolic zu tanzen, vielleicht hilft das.

Schrieb... Das Ergebnis war schlechter als ursprünglich .... Prof. Faktor ist nach der Optimierung nur 1,31 :(

Ich halte es für sinnvoller, in diesem System Oszillatoren zu verwenden

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

Wie auch immer, ich versuche hier nicht, ein Supersystem zu schreiben... Den Grund dafür habe ich bereits zu Beginn des Themas beschrieben.

Ich wollte etwas nachprüfen, und zwar. Mein Hauptziel ist es (ich wollte es anfangs nicht sagen, aber ich denke, dieser Zweig wird ausgelöscht werden), herauszufinden, wie sich das System, das ich über einen historischen Zeitraum (sagen wir, das letzte halbe Jahr) verbessere, in den vergangenen Perioden verhalten wird. Ich habe zu Beginn gesagt, dass es sich langfristig um ein 50/50-System handelt, d.h. wenn wir das System im Jahr 2009 mit maximaler Rentabilität zeichnen, wird es in der Vergangenheit besser funktionieren ... Nehmen wir an, dass wir es auf die Ebene von pr.f. bringen. 2,0 oder höher... wird sie seit z.B. 2000 besser abschneiden? ???

Ich gehe davon aus (und nur davon!!!), dass je besser es heute läuft, desto schlechter wird es auf lange Sicht laufen. D.h. wir erzielen heute den maximalen Gewinn, und das System wird in der Historie nicht 1,0 anzeigen, sondern wahrscheinlich auf 0,9 fallen.

Aber das ist nur eine Vermutung... Ich versuche nicht, irgendetwas zu beweisen, aber.... Und ehrlich gesagt, hoffe ich, dass ich mich irre.

 

Ich verstehe ehrlich gesagt nicht, warum man versucht, herauszufinden, wie sich das System in der Vergangenheit verhalten wird. Es ist besser, in die Zukunft zu blicken. Der Markt verändert sich, und es gibt kein Entrinnen aus ihm. Auch wenn

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

Und selbst wenn das der Fall ist, was soll's?

Meine persönliche Vermutung (und nur eine Vermutung))) ist, dass es keine Abhängigkeit gibt, und nachdem ich das für ein System gesagt habe (und sogar bewiesen habe), ist es keine Tatsache, dass es für absolut alle Systeme gleich ist.

Es gibt ein gutes Sprichwort: Suche nicht nach Glück, wo es nicht vorhanden ist.

 
sayfuji >> :

Meine persönliche Überzeugung (und einzige Überzeugung))) ist, dass es keine Abhängigkeit gibt.

Das ist es, was ich sicherstellen möchte...

Man nehme einen Expert Advisor, der 50/50 auf der Grundlage der Historie arbeitet, und füge ihm einige zusätzliche Indikatoren, Oszillatoren und andere Tricks hinzu. Testen Sie es über einen kleinen Zeitraum (ein halbes Jahr) und sehen Sie, was passiert...

Vielen Dank an Swan und gince für ihr Interesse. Und dusolltest besser sayfuji etwas vorschlagen .... wie man eine Position auf etwas anderem als dem T.P. schließt, vielleicht würde das helfen...

 
RomanS >> :

Eröffnen Sie einfach bei der Aufschlüsselung des Hochs/Tiefs des Vortages mit einem festen TP und stoppen Sie beim Hoch/Tief des heutigen Tages. Warum genau? Weil es keinen Indikator verwendet.

Meine Idee ist 100% die gleiche)) nur auf H4 Ergebnisse Tester...

Die Sache ist nur die... Meine Richtung wird durch die vorherige Kerze bestimmt, und der Stopp wird auf den niedrigeren der beiden Werte gesetzt - das aktuelle/vorherige Hoch/Tief...



 
ALex2008 >> :

Meine Idee ist 100% die gleiche)) nur auf H4 Ergebnisse Tester...

Die Sache ist nur die... Meine Richtung wird durch die vorhergehende Kerze bestimmt, und der Stopp wird durch den kleineren der beiden - den aktuellen/vorherigen Höchst-/Tiefststand - gesetzt...



Tolle Idee... ist es einen Versuch wert, davon zu tanzen...

Ich habe mir den Link angesehen, die Periode ist klein... haben Sie es mit 2000 versucht? vielleicht tritt das gleiche Problem auf.... 50/50???