Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 252

 

> err=StringToInteger((string)err)

das sollte in die Annalen eingehen ;-)

ursprünglich in err haben Sie offensichtlich int von GetLastError(). Konvertiert den Fehlercode in eine lesbare Beschreibung ErrorDescription(err); vorausgesetzt, dass #include <stdlib.mqh> aktiviert ist.

aber die Art und Weise, wie es geschrieben ist, ist ein Flop.

PS/ Und lernen Sie nicht die MQL-Programmierung. MQL 4 und 5 sind Zielsprachen für eine bestimmte Plattform.

 

Können Sie mir bitte sagen, ob Sie es auf diese Weise schreiben können. Es will keine Transaktionen öffnen. Vielleicht ist das Format der berechneten Zahlen falsch? oder andere Fehler im Code?


double TakeLong(double shp)

{

int CurrentDayRange=0, fiveDayATR=0, take=0;

double TP_ATR=0;

//////Pivot-Eingänge

double P, S1, R1, S2, R2, S3, R3;

double LastHigh, LastLow, x;

int counted_bars = IndicatorCounted();

int Grenze, i;

shp=iHigh(Symbol(),PERIOD_D1,0);


//---- Berechnung des Pivot-Indikators

if(gezählte_Balken == 0)

{

x = Zeitraum();

wenn(x > 240)

zurück(-1);

}

if(gezählte_Balken < 0)

zurück(-1);

Grenze = (Balken - gezählte_Balken) - 1;

//----

for(i = limit; i >= 0; i--)

{

if(Hoch[i+1] > LetzterHöchststand)

LastHigh = High[i+1];

//----

if(Tiefstwert[i+1] < Letzter Tiefstwert)

LastLow=Low[i+1];

if(ZeitTag(Zeit[i]) != ZeitTag(Zeit[i+1])

{

P = (LastHigh + LastLow + Close[i+1]) / 3;

R1 = (2*P) - LastLow;

S1 = (2*P) - LastHigh;

R2 = P + (LetzterHöchststand - LetzterTiefststand);

S2 = P - (LastHigh - LastLow);

R3 = (2*P) + (LastHigh - (2*LastLow));

S3 = (2*P) - ((2* LastHigh) - LastLow);

LastLow = Open[i];

LastHigh = Open[i];

}

}

////ATR Berechnung

for (i=1;i<6;i++)

{ if(iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i)>0) FiveDayATR += (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));}

FiveDayATR = NormalizeDouble(FiveDayATR/5,Digits());

CurrentDayRange = (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));

if(FiveDayATR-CurrentDayRange>0) TP_ATR=Ask+FiveDayATR-CurrentDayRange; sonst TP_ATR=0;


if (Bid>R1 && TP_ATR==0) take=shp;

else if (Bid<R1 && R1<TP_ATR) take=R1;

sonst take=TP_ATR;

return(take);

}

 
forexpipsrunner: bitte sagen Sie mir, ob Sie es so schreiben können. es will sich nicht öffnen

Der vorgeschlagene Code sieht wie ein Indikator aus. Die Geschäfte werden durch einen Expert Advisor oder ein Skript eröffnet. Der Aufruf der Funktion OrderSend ist im Indikator nicht erlaubt. Der Indikator kann einen Alarm auslösen - fügen Sie an der entsprechenden Stelle die Funktion Alarmruf oder Ton ein

 
STARIJ:

Der vorgeschlagene Kodex ist dem Indikator ähnlich. Die Geschäfte werden durch einen Expert Advisor oder ein Skript eröffnet. Der Aufruf der Funktion OrderSend ist im Indikator verboten. Der Indikator kann ein Signal geben - fügen Sie den Aufruf der Alert-Funktion oder den Ton an der entsprechenden Stelle ein


Dies ist der TP-Definitionscode, der das Ergebnis an OrderSend sendet. Ohne diesen komplexen Algorithmus werden die Trades zwar gesendet, aber es gibt keine Möglichkeit, sie zu senden. Ich rufe die Funktion TP = TakeLong(SHP) auf;

 
forexpipsrunner: Dies ist der TP-Definitionscode, der das Ergebnis an OrderSend weitergibt. Ohne diesen Algorithmus werden die Trades nicht gesendet.

Es gibt viele Möglichkeiten der Fehlersuche - der Prozess der Fehlersuche, wenn ein Fehler festgestellt wurde. Die erste ist F5 - Debugging in MetsEditor starten. 2) Alerts verwenden, um die Ausführung zu verfolgen. 3 und 4) geben Debugging-Informationen in Textbeschriftungen und die Funktion Kommentar aus. Wählen Sie den bequemen Weg und debuggen Sie diese einfache Funktion - dann werden Sie ein Programmierer. Ein Programm mit Tausenden von Zeilen gilt als komplex.

 
forexpipsrunner:

Können Sie mir bitte sagen, ob Sie es so schreiben können. es will keine Transaktionen öffnen. vielleicht ist das Format der berechneten Zahlen falsch? oder ein anderer Fehler im Code?


int take=0 - Sie geben eine ganze Zahl zurück, sollte diese Variable nicht ein Double sein?
 
Hallo! Ich möchte ein "rail"-Muster machen, aber ich kann nicht herausfinden, die Größe des Körpers der Kerze....

Ich berechne die Größe des Candlestick-Körpers wie folgt:
MathAbs( Close1[i] - Open1[i] ) / Point + 1
MathAbs( Close2[i] - Open2[i] ) / Point + 1

Im vollständigen Code sieht es so aus

double Close1 = iClose(Symbol(), 0, i);
double Open1 = iOpen(Symbol(), 0, i);
double Close2 = iClose(Symbol(), 0, i+1);
double Open2 = iOpen(Symbol(), 0, i+1);

MathAbs( Close1[i] - Open1[i] ) / Point + 1
MathAbs( Close2[i] - Open2[i] ) / Point + 1

if (Close1 < Open1 && Close2 > Open2){
BUY();
}
if (Close1 > Open1 && Close2 < Open2){
SELL();
}

Ist das richtig? Wie kann ich es schaffen?
 
sviter-pro:   Hallo, ich möchte ein "rail" Muster machen, aber ich kann nicht herausfinden, die Größe des Körpers der Kerze....

Haben Sie es auf dem M1-Demokonto ausprobiert? Was bekommen Sie?

 
STARIJ:

Haben Sie es mit einem M1-Demokonto versucht? Wie sieht es aus?

Nichts funktioniert....(((
 
void trailing(string symbol,string comment,int magic,int trail_p)
  {
   if(symbol==NULL) symbol=Symbol();
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==symbol && OrderComment()==comment && OrderMagicNumber()==magic)
           {
            switch(OrderType())
              {
               case OP_BUY:
                  if(OrderOpenPrice()+(trail_p*Point)<Ask && OrderStopLoss()+(trail_p*Point)<Ask)
                    {
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()+(trail_p*Point),OrderTakeProfit(),OrderExpiration(),clrNONE))
                       {
                        Print("OrderModify завершилась с ошибкой #",GetLastError());
                       }
                    }
                  break;
               case OP_SELL:
                  if(OrderOpenPrice()-(trail_p*Point)>Bid && OrderStopLoss()-(trail_p*Point)>Bid)
                    {
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()-(trail_p*Point),OrderTakeProfit(),OrderExpiration(),clrNONE))
                       {
                        Print("OrderModify завершилась с ошибкой #",GetLastError());
                       }
                    }
                  break;
              }
           }
        }
        Comment("StopLoss=",OrderStopLoss());
     }
  }

Können Sie mir sagen, warum das Schleppnetz bei jedem Tick ausgelöst wird?

Grund der Beschwerde: