[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 520

 
Roger:

Im Allgemeinen habe ich zwei Variablen hinzugefügt - eine für die zu erreichende Pfandhöhe und die zweite für die Anzahl der zu löschenden Dateien. Es funktioniert nur einmal, danach muss das Niveau auf einen anderen Wert korrigiert oder der Expert Advisor neu gestartet werden.
Danke - jetzt werde ich den Test durchführen. Oder ist es nicht für den Betrieb im Tester geeignet?
 
alex12:
Danke - ich werde den Test jetzt durchführen. Oder ist sie für den Testlauf nicht geeignet?

Wie würde ich es testen?
 
demlin:

Grüße an alle!

Bitte empfehlen Sie einen normalen Indikator für die Bestimmung einer Wohnung, vielen Dank im Voraus ))))


Ich teste das gerade selbst.

Kann mit Hilfe von iCustom() leicht in einen Expert Advisor eingefügt (plugged) werden.

 
Ein einfaches System zum Überqueren von 2 Waggons.
Kaufen - der Schnelle kreuzt den Langsamen nach oben.
Verkaufen - der schnelle kreuzt den langsamen nach unten.

Schließen - gegenüber Signal oder Schleppnetz. Können Sie mir bitte sagen, was ich im Code ändern sollte, um den Stop = 50 Pips bei jeder Positionseröffnung zu setzen?

extern double Lots           =   0; // лот, если 0, то динамический
extern double RiskPercentage =  70; // % от депо на лот, если динамический
extern int    FastPer        =   4;
extern int    SlowPer        =  18;
extern int    magicnumber    = 777;
extern int    TrailingStop   =  20; 
extern bool   PolLots        = true;



int prevtime;
int ticket=0;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----




   if (!IsDemo())
    {
//     Print ("Эта версия только для демо-счетов");
//     return(0);
    }   


   if(Time[0] == prevtime)
   { 

       return(0);
   }
   prevtime = Time[0];
   if(!IsTradeAllowed()) 
     {
       prevtime = Time[1];
       return(0);
     }




 int Ord=0;
 double ClLot=0;
int LotsCount=0;
   int i=0;  
   int total = OrdersTotal();   
   for(i = 0; i <= total; i++) 
     {
      if(TrailingStop>0)  
       {                 
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
         ticket=OrderTicket(); 
         ClLot=OrderLots();
         if (OrderType()==OP_BUY)
          {
           Ord=1;
          }
         else
          {
           Ord=2;
          }         
          LotsCount ++;
          TrailingStairs(OrderTicket(),TrailingStop);
         }
       }
      }
/*
 
     for(i = 0; i <= OrdersTotal(); i++) 
      {
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
         ticket=OrderTicket(); 
         ClLot=OrderLots();
         if (OrderType()==OP_BUY)
          {
           Ord=1;
          }
         else
          {
           Ord=2;
          }
         }
      } 
*/    
bool SellOp=false;
bool BuyOp=false;

double MAFast1=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MAFast2=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MAFast3=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,0),Digits);
double MASlow1=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MASlow2=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MASlow3=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,0),Digits);


      
if ((MAFast1<MASlow1)&&
    (MAFast2==MASlow2)&&
    (MAFast3>MASlow3))
{
 BuyOp=true;
}

if ((MAFast1>MASlow1)&&
    (MAFast2==MASlow2)&&
    (MAFast3<MASlow3))
{
 SellOp=true;
}



if (BuyOp)
 {
  if (Ord==2)
   {
    OrderClose(ticket,ClLot,Ask,3,Red);
   }
  if (Ord!=1)
   {
    OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,0,0,"MA_Buy",magicnumber,0,Green);
   }
 }

if (SellOp)
 {
  if (Ord==1)
   {
    OrderClose(ticket,ClLot,Bid,3,Green);
   }
  if (Ord!=2)
   {
    OrderSend(Symbol(),OP_SELL,Lot(),Bid,3,0,0,"MA_Sell",magicnumber,0,Red);
   }
 }



   
//----
   return(0);
  }
//+------------------------------------------------------------------+
void TrailingStairs(int ticket,int trldistance)
   { 
    int Spred=Ask - Bid;
    if (OrderType()==OP_BUY)
      {
       if((Bid-OrderOpenPrice())>(Point*trldistance))
         {
          if(OrderStopLoss()<Bid-Point*trldistance || (OrderStopLoss()==0))
            {
             OrderModify(ticket,OrderOpenPrice(),Bid-Point*trldistance,OrderTakeProfit(),0,Green);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,1)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,1),Bid,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Bid,3,Green);
               }
            }
         }
       }
     else
       {
        if((OrderOpenPrice()-Ask)>(Point*trldistance))
          {
           if((OrderStopLoss()>(Ask+Point*trldistance)) || (OrderStopLoss()==0))
             {
              OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*trldistance,OrderTakeProfit(),0,Red);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,1)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,1),Ask,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Ask,3,Green);
               }
             }
          }
        }
    }
    
double Lot()
{
 double LotQ = Lots;

 if (Lots==0)
  {
   double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
   double minLot = MarketInfo(Symbol(), MODE_MINLOT);
   double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
   double step =   MarketInfo(Symbol(), MODE_LOTSTEP);
   double account = AccountFreeMargin();
   
   double percentage = account*RiskPercentage/100;
   
   LotQ = MathRound(percentage/margin/step)*step;
   
   if(LotQ < minLot)
   {
      LotQ = minLot;
   }
   
   if(LotQ > maxLot)
   {
      LotQ = maxLot;
   }
  } 
  return (LotQ);
  }

 
Roman.:


Das teste ich gerade selbst.

Er kann dem Expert Advisor über iCustom() einfach hinzugefügt (verbunden) werden.

Ich frage mich, wie Sie die extremen Tiefst- und Höchstwerte in einem EA definieren? Denn in einem lokalen Bereich des Charts war 0,3800 (die blaue Linie) ein Extremwert und entsprach einer vorübergehenden Korrektur, während im nächsten lokalen Bereich 0,3041 (die grüne Linie) zu seinem Extremwert wurde und eine Umkehr markierte...

Was ist mit dem Tiefstwert 0,4596 beim ersten Long (rote Linie), der nichts aussagt?

Und wie stellen Sie fest, ob der Tiefstwert des Indikators auf eine Korrektur oder eine Umkehrung hinweist? In der Tat deutet der Wert von 0,3800 im ersten Fall auf eine Korrektur hin (die grüne vertikale Linie), und im zweiten Fall - das Ende des Trends (die rote vertikale Linie)

Und schließlich gibt es eine ganze Reihe solcher lokaler Extreme auf der Karte. Schließlich gibt es für einen Zeitraum von 3 bis 5 Stunden mit Sicherheit den niedrigsten Wert, und zwar einen extrem niedrigen Wert für dieses Zeitintervall. Wenn wir ein bestimmtes Zeitintervall für die Suche nach Indikator-Extremwerten angeben, werden diese gefunden, aber... Es kann jedoch vorkommen, dass der Indikatorwert in den nachfolgenden Balken, die über den angegebenen Zeitrahmen hinausgehen, noch niedriger (höher) wird, und dann wird dieser Wert extrem niedrig (hoch) sein - aber was soll man mit dem zuvor gefundenen Wert machen? Umso mehr, als der Expert Advisor auf dieser Grundlage eine Entscheidung trifft.

Aber...


 
artmedia70:

Ich frage mich, wie Sie extreme Tiefst- und Höchstwerte in Ihrem Expert Advisor definieren? Denn in einem lokalen Bereich des Charts war 0,3800 (die blaue Linie) ein Extremwert und entsprach einer vorübergehenden Korrektur, während im nächsten lokalen Bereich 0,3041 (die grüne Linie) zu seinem Extremwert wurde und eine Umkehr markierte...

Was ist mit dem Tiefstwert 0,4596 beim ersten Long (rote Linie), der nichts aussagt?

Und wie lässt sich feststellen, ob der extrem niedrige Wert des Indikators auf eine Korrektur oder eine Umkehrung hinweist? In der Tat deutet der Wert von 0,3800 im ersten Fall auf eine Korrektur hin (die grüne vertikale Linie), und im zweiten Fall - das Ende des Trends (die rote vertikale Linie)

Und schließlich gibt es eine ganze Reihe solcher lokaler Extreme auf der Karte. Wenn wir ein Intervall von 3 bis 5 Stunden festlegen, wird dies sicherlich der niedrigste Wert sein, und zwar ein extrem niedriger Wert für dieses Zeitintervall. Wenn wir ein bestimmtes Zeitintervall für die Suche nach Indikator-Extremwerten angeben, werden diese zwar gefunden, aber... Es kann jedoch vorkommen, dass der Indikatorwert in den nachfolgenden Balken, die über den angegebenen Zeitrahmen hinausgehen, noch niedriger (höher) wird, und dann wird dieser Wert extrem niedrig (hoch) sein - aber was soll man mit dem zuvor gefundenen Wert machen? Umso mehr, als der Expert Advisor darauf basierend eine Entscheidung treffen wird...

Aber...





Ich betrachte diesen Indikator als einen Filter für den Einstieg in den Markt einer Trend- oder Flat-Strategie, d.h. es ergibt sich die folgende Interpretation seines Wertes:

double iVAR_1 = iCustom (Symbol(),trend_period, "iVAR", n, nBars, 0, 1);                    // расчет индикатора iVAR
   

Ein Indikatorwert von unter 0,5 bedeutet, dass sich der Markt in einem Trend befindet.

iVAR_1 < 0.5 &&                                                            // тренд на основном ТФ   

Extrem niedrige Werte gehen oft dem Ende (Korrektur) des aktuellen Trends voraus - es ist bereits auf der Abbildung zu sehen - hier wirkt Schleppnetz (wenn im Markt).


Ein Indikatorwert von über 0,5 bedeutet einen flachen Marktzustand

iVAR_1 > 0.5 && 

Der extrem hohe Wert geht oft dem Beginn eines bedeutenden Trends voraus - siehe die vorherige Interpretation.

Der Wert des Indikators um 0,5 bedeutet eine unsichere Marktsituation - hier ist es möglich, ein gewisses "Niveau" der Einrückung zu verwenden (ich schließe nicht aus, dass es redundant ist, d.h. Nehmen Sie den Wert 0,5 und alle), sowohl unter - x, und über - y Wert 0,5 (Basis-Ebene), setzen Sie sie in externe Variablen und optimieren mit Schritt 0,02, sagen wir, das gleiche wie Variable n - Start:2 Schritt:1 Stop:7 - es ist nicht überflüssig, ich tue es - bald werde ich Ergebnisse in Avalanche Zweig (es ist Trend-System...:-)), nur mit MM von Martin... und alle... :-)))).

 
Roman.:


Ich betrachte diesen Indikator als Filter für den Einstieg in den Markt, entweder im Rahmen einer Trend- oder einer Flat-Strategie, d.h. ich interpretiere seinen Wert wie folgt:

Ein Indikatorwert unter 0,5 deutet auf einen tendenziellen Marktzustand hin.

Extrem niedrige Werte gehen oft dem Ende (Korrektur) des aktuellen Trends voraus - das passt schon zur Figur - hier wirkt Schleppnetz (wenn im Markt).


Der Indikatorwert über 0,5 bedeutet einen flachen Marktzustand

Ein extrem hoher Wert geht oft dem Beginn eines bedeutenden Trends voraus - siehe die vorherige Interpretation.

Der Wert des Indikators um 0,5 bedeutet eine unsichere Marktlage - hier ist es möglich, ein gewisses "Niveau" der Einrückung zu verwenden (ich schließe nicht aus, dass es redundant ist, d.h. nehmen Wert 0,5 und alle), sowohl unter - x, und über - y Wert 0,5 (Basis-Ebene), geben Sie sie in externe Variablen und optimieren mit Schritt 0,02, sagen wir, das gleiche wie Variable n - Start:2 Schritt:1 Stop:7 - das ist nicht übertrieben, ich tue es - bald werde ich Ergebnisse in Lavina Zweig (es ist Trend-System...:-)), nur mit MM von Martin... und alle... :-)))).

Ich mag keine Optimierung: Das Wesentliche ist die Passform... Und ich optimiere nie die Parameter meiner Babys... Ich versuche, die notwendigen Parameter für unterschiedliche Marktbedingungen zu wählen.

Aber danke für die Aufklärung... :) Ehrlich gesagt - der obige Beitrag war ein Kieselstein in Richtung des Truthahns... :)

 

Guten Tag!

Ich habe eine solche Frage. Der Expert Advisor hat eine Funktion, die Trades in eine csv-Datei schreibt, aber ich habe ein Problem entdeckt, das auftritt, wenn ich die Option Money Management System in den Expert Advisor-Parametern aktiviere/deaktiviere(TRUE/FALSE). Zum Beispiel funktioniert direkt nach dem Kompilieren der Quelldatei alles korrekt und die Gewerke werden wie vorgesehen in die Datei geschrieben. Die nachstehende Abbildung zeigt die korrekt geschriebenen Daten:

Dann aktiviere ich im Tester die Option Money Management System in den Expert Advisor-Parametern, führe den Test aus, aber die Daten werden nicht korrekt in die Datei geschrieben. Die folgende Abbildung zeigt zwei Varianten zum Vergleich. Die linke Seite ist richtig (wie oben), die rechte Seite ist nicht richtig:

Ich habe selbst nicht herausfinden können, worum es sich handeln könnte, aber ich habe Folgendes gefunden. Wenn ich außerdem die Option Geldverwaltungssystem aktiviere/deaktiviere und die Quelldatei vor dem Start des Tests erneut kompiliere, wird alles korrekt geschrieben.

Können Sie mir sagen, was das Problem sein könnte?

 
artmedia70:

Ich mag keine Optimierung: das Wesentliche ist die Anpassung... Und ich optimiere nie die Parameter meiner Produkte... Ich versuche, sie die notwendigen Parameter für unterschiedliche Marktbedingungen wählen zu lassen.

Obwohl, danke für die Klarstellung... :) Ehrlich gesagt - gehen mit dem Beitrag oben war ein Kieselstein in Richtung eines Truthahns... :)


Ich verstehe... Falls es Sie interessiert, hier ist etwas Ähnliches (im Trailer). Siehe auch hier (gesamter Thread) - es gibteine Behandlung oberhalb/unterhalb von 0,6 und hier(ausgewählte Seiten).

Dateien:
 
Roman.:


Ich teste das gerade selbst.

Einfaches Hinzufügen (Einfügen) in den EA über iCustom().

Danke, ich habe es heruntergeladen, ich werde es in meinem Expert Advisor testen