Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 328

 
double GetLastUpperFractalPrice()
{
for (int i = 3; i<=Bars; i++)
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i);
double LastUpperFractalPrice = High [i]; return (LastUpperFractalPrice);

}

Ist das richtig? Wird diese Funktion den Preis des letzten oberen Fraktals zurückgeben?

 
Trader7777:

Ist das richtig? Wird diese Funktion den Preis des letzten oberen Fraktals zurückgeben?


Beispiel für eine fraktale Suche
 
double GetLastUpperFractalPrice()
{
for (int i = 3; i<=Bars; i++)
{
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i);
{
double LastUpperFractalPrice = High [i];
}
}
return (LastUpperFractalPrice);

}

Wird das funktionieren oder nicht?

 
Trader7777:
double GetLastUpperFractalPrice()
{
for (int i = 3; i<=Bars; i++)
{
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0)
{
double LastUpperFractalPrice = Hoch [i];
}
}
return (LastUpperFractalPrice;)

}

Wird das funktionieren oder nicht?


So wird es zum Beispiel:

double GetLastUpperFractalPrice()
{
   for (int i = 3; i<=Bars; i++)
   {
      if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0)
      {
         return(High [i]);
      }
   }
   return(EMPTY_VALUE);
}

So wie Sie es haben, wird es das nicht.

 
Trader7777:
double GetLastUpperFractalPrice()
{
for (int i = 3; i<=Bars; i++)
{
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i);
{
double LastUpperFractalPrice = High [i];
}
}
return (LastUpperFractalPrice);

}

Wird es funktionieren oder nicht?


Nein. Geben Sie den Code über den SRC im Bedienfeld ein.

return (ХХХ) wird von der Benutzerfunktion zurückgegeben - was dort eingegeben wurde, wird von dieser Funktion zurückgegeben - der Wert von ХХХХ oder ein Ergebnis einiger Rechenfunktionen.

Wenn also ein Fraktal gefunden wird, schreiben Sie return (High [i]) - Sie müssen nichts weiter erfinden.

Weit vor Ihnen))

 

Dies ist eine elementare Funktion der Platzierung von schwebenden Aufträgen, die Parameter sind nicht wichtig, aber es ist wichtig, um den Expert Advisor (es kann die bestehende Schleife von schwebenden Aufträgen verwenden) nach Erhalt eines "neuen Preises" oder zurückzusetzen oder anderweitig zu vermeiden, Aufträge zum gleichen Preis. In diesem Fall sollte die Schleife der Auftragserteilung nicht unterbrochen werden.

double Dist=10000.0;
Zeichenfolge SMB;
double NewPrice;
int i;
int start()
{
RefreshRates();
SMB=Symbol();
{UstanOtlozh();}
}
zurück(0);
void UstanOtlozh()
{
double OldPrice=WindowPriceOnDropped(); // Hier wird das Skript ausgelöst
RefreshRates();
SMB=Symbol();
{
int i=1;
while(i<=OrdersTotal())
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // wenn es eine
{ // Auftragsanalyse:
if (OrderSymbol()!= SMB) continue; // Nicht unser Finanzinstrument.
int Tip=OrderType(); // Art der Bestellung
if (Tip<2) continue; // Börsenauftrag
double NewPrice=OrderOpenPrice(); // Preis der Bestellung
{
while(NeuerPreis<=Ask+200*Punkt||NeuerPreis>=Ask+50*Punkt)
{
NeuerPreis=NeuerPreis+50*Punkt;
OrderSend(SMB,OP_BUYSTOP,0.01,NewPrice,3,0,0,NULL,0,CLR_NONE);
if(NeuerPreis>Ask+200*Punkt||NeuerPreis<Ask+50*Punkt)
Pause;
}}}}}}

 
ALXIMIKS:
Ich habe es so eingerichtet, dass es kompiliert - und 555 Build von mt4 EDITOR verwenden - es hilft wirklich, Probleme schnell zu finden. lesen Sie einfach das Handbuch vor der Installation - die ersten 15 Seiten.

Ich hätte nie gedacht, dass ich einmal nach einer so einfachen Sache fragen würde. Beim Kompilieren erhalte ich die Meldung, dass die Funktion BU() nicht beteiligt ist. Ich habe es so formuliert (der Code ist gegeben), dass jetzt alles kompiliert wird, aber die Break-Even-Funktion funktioniert nicht. Ich habe die gleiche Breakeven-Funktion in anderen EAs gesehen.

int start()
  {
   if(Volume[0]>1) return; 
  
   if (CountTrades()==0 && Open[1]>Close[1] && Open[2]<Close[2] && High[1]>High[2] && Low[1]<Low[2])  // продажа
   {
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);
      if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
      {
         TP=NormalizeDouble(Bid - TakeProfit * Point, Digits);
         OrderModify(ticket, OrderOpenPrice(),0,TP,0);
      }
   }
   else
   if (CountTrades()==0 && Open[1]<Close[1] && Open[2]>Close[2] && High[1]>High[2] && Low[1]<Low[2]) // покупка
    {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);   
      if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
      {
         TP=NormalizeDouble(Ask + TakeProfit * Point, Digits);
         OrderModify(ticket, OrderOpenPrice(),0,TP,0);
      }
    }
   if (CountTrades()>0)
      {
      otype = FindLastOrderType();
      if (otype == OP_BUY)
         { // ценапоследнего ордера на покупку
         price = FindLastBayPrice();
         
         if ((Bid - price) / Point >= Step)
            {
               ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);  
            }
         }
      else if (otype == OP_SELL)
         { // цена последнего ордера на продажу
         price = FindLastSellPrice();
         
          if ((price - Ask) / Point >= Step)
            {
               ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);  
            }
         }
      }
    BU();  
    return(0);
  }
 
alexey1979621:

Ich hätte nie gedacht, dass ich einmal nach einer so einfachen Sache fragen würde. Beim Kompilieren erhalte ich die Meldung, dass die Funktion BU() nicht beteiligt ist. Ich habe es so formuliert (der Code ist gegeben), dass jetzt alles kompiliert wird, aber die Break-Even-Funktion funktioniert nicht. In anderen EAs funktioniert genau die gleiche Break-Even-Funktion.




Der einzige Grund ist der falsche if(...)-Operator return; Es scheint, dass Sie nur einen haben - am Anfang des Programms.
 

Meine Herren!!! Worüber seid ihr verwirrt?

iFractals() gibt den Preis zurück, nicht die Taktnummer des Fraktals.

 
tara:

Der einzige Grund dafür ist ein falscher if(...)-Operator, der zurückkehrt; Sie scheinen einen zu haben - am Anfang des Programms.
Diese wurde entfernt. Aber das Problem liegt woanders - in der Normalisierung. Aus irgendeinem Grund hat mein Expert Advisor 4 und nicht 5 Dezimalstellen angezeigt.
extern double  Lots             = 0.1;
extern string Сomment           = "Pattern_1";
extern int TakeProfit           = 10;     
extern int StopLoss             = 0;   
extern int Step                 = 2;   

extern int BULevel              = 2;
extern int   NotBULevel         = 2;         // Уровень безубытка в пунктах

extern int Slippage             = 2; // проскальзывание 
extern int Magic                = 111;



//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
      if (Digits ==5) // для пятизначного брокера
         {
            TakeProfit *= 10;
            StopLoss *= 10;
            Slippage *= 10;
            Step *= 10;
            BULevel *= 10;
            NotBULevel *= 10;
         }
      return(0);
}
Wie kann man das beheben?
Grund der Beschwerde: