[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 3

 

oops :-)

Ich danke Ihnen!

 

Hallo Genießer!

Hier ist ein EA. Es öffnet eine Position auf einem Fraktal up/down. Wie kann ich den Stop 5 Pips höher (bei KAUFEN) und 5 Pips niedriger (bei VERKAUFEN) vom oberen Ende des Fraktals setzen?

P_up0=iCustom(0,0,"Ценовой канал", Chperiod,0,0);
   P_down0=iCustom(0,0,"Ценовой канал", Chperiod,1,0);
   P_up1=iCustom(0,0,"Ценовой канал", Chperiod,0,1);
   P_down1=iCustom(0,0,"Ценовой канал", Chperiod,1,1);
   Up=iCustom(0,0,"olyakish_fractals_02(для Skonti)",15,150,"Процент для отсеивания по объему",110,1,3);
   Down=iCustom(0,0,"olyakish_fractals_02(для Skonti)",15,150,"Процент для отсеивания по объему",110,3,3);
//задали все данные 

   total=OrdersTotal();
   if( total<1) 
     {
      // Проверка свободной маржи
      if(AccountFreeMargin()<(1000* Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }
      // Условие открытие позиции BUY
      if( Up> Down)
        {
         Lots= GetSizeLot();
         ticket=OrderSend(Symbol(),OP_BUY, Lots,Ask,3,0,0,"",16384,0,Green);
         if( ticket>0)
           {
            if(OrderSelect( ticket, SELECT_BY_TICKET, MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
      // Условие открытие позиции SELL
      if( Up< Down)
        {
         Lots= GetSizeLot();
         ticket=OrderSend(Symbol(),OP_SELL, Lots,Bid,3,0,0,"",16384,0,Red);
         if( ticket>0)
           {
            if(OrderSelect( ticket, SELECT_BY_TICKET, MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
      return(0);
     }
    
   for( cnt=0; cnt< total; cnt++)
     {
      OrderSelect( cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol())  
        {
         if(OrderType()==OP_BUY)   // длинная позиция открыта
           {
            // условие закрытие длинной позиции
            if( P_down1> P_down0|| Up< Down)
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); 
                 return(0); 
                }
            if( TrailingStop>0)  
              {                  
               if(Bid-OrderOpenPrice()>Point* TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point* TrailingStop && OrderStopLoss()!=OrderOpenPrice()+ X*Point)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+ X*Point,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else 
           {
            // условие закрытия короткой позиции
            if( P_up1< P_up0|| Up> Down)
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); 
               return(0); 
              }
            if( TrailingStop>0)  
              {               
               if((OrderOpenPrice()-Ask)>(Point* TrailingStop))
                 {
                  if(NormalizeDouble(OrderStopLoss(),Digits) != NormalizeDouble(OrderOpenPrice()- X*Point,Digits))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()- X*Point,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
  }

Ich habe hier den Preiskanal verwendet.

// условие закрытия короткой позиции
            if( P_up1< P_up0|| Up> Down)
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); 
               return(0); 
              }
и
// условие закрытие длинной позиции
            if( P_down1> P_down0|| Up< Down)
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); 
                 return(0); 
                }

Ich habe Probleme, das L oder H des Fraktals zu identifizieren, an dem die Position eröffnet wurde!

ungefähr so!!!?

if (NormalizeDouble (MathAbs (High [ i]-5),Digits) < Price)
 
welcher Instrumentenpreis ist=5?
if (NormalizeDouble (MathAbs (High [ i]-5),Digits) < Price)

multiplizieren Sie also mit dem Preis der untersten Ziffer

5*Point
 

An dieser Stelle habe ich einen Fehler gemacht. Danke.

Wie man den oberen Rand des Fraktals, auf dem die Position eröffnet wurde, festlegt????

 
Alle Fragen werden durch Experimente geklärt: Schreiben Sie ein Skript und führen Sie es aus,
- sehen wir die folgenden Unterschiede zum Standard-iFractals()
1. der Indikator durch den Fraktalindex ist genau gleich dem Hoch/Tief
2. nicht vorhandener Wert des Fraktals ==0
int i;
   double f;
   for( i=0; i<50; i++) { f=iFractals(NULL,0,MODE_UPPER, i); if( f!=0) break;}
 Alert(f,"  ",High[i]," i=",i);
P.S. Schauen Sie von der Position durch diesen Zyklus zurück, zum Zeitpunkt der Positionseröffnung, erinnern Sie sich
datetime timeFractalOnOpenPos=Time[i]
 
Ich verstehe nicht, wie man dies in der EA anzeigen. beim Öffnen einer Position, erinnern diese Fraktal. dann, wie man es in der Bedingung schließen aufrufen?
 
es ist unklar, was es bedeutet, anzurufen,
in den globalen Variablen des Programms
Erinnern Sie sich an die Zeit eines Balken-Fraktals, um eine Position zu eröffnen. Mit der Zeit des Balkens kennen wir die Balkennummer durch iBars()
-Erinnerung an den fraktalen Preis
erinnere dich an den fraktalen Preis - erinnere dich an oben/unten
und was ist dann noch einmal zu tun?
 
Vielleicht habe ich mich nicht so ausgedrückt, aber ich habe keine Ahnung, wie man das codiert.
 
wie viele Aufträge und welche an jede Seite?
 

über alle Blöcke

double UfractalBuy,LfractalBuy;

bei der Eröffnung eines Kaufauftrags das nächstgelegene Fraktal schreiben

int i; double f;

     if( ticket>0)
           {
            if(OrderSelect( ticket, SELECT_BY_TICKET, MODE_TRADES)) 
            {
            Print("BUY order opened : ",OrderOpenPrice());
  
   for( i=0; i<50; i++) { f=iFractals(NULL,0,MODE_UPPER, i); if( f!=0) break;}
   UfractalBuy=High[ i];
   for( i=0; i<50; i++) { f=iFractals(NULL,0,MODE_LOWER, i); if( f!=0) break;}
   LfractalBuy=Low[ i];
            }
           }

eine weitere Bedingung für den Kaufauftrag eingeben

if(P_down1>P_down0||Up<Down||Close[0]+5*Point<LfractalBuy)
Grund der Beschwerde: