Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 71

 
Vitalie Postolache:

Seit wann ist ein Punkt ein Doppeltyp?

Das ist es, was ich sage, string+int ist ein Fehler

Aber wenn Sie es so machen, wie ich es oben geschrieben habe, wird es keinen Fehler geben.

 
Renat Akhtyamov:

Das ist es, was ich meine: string+int ist ein Fehler.

Aber wenn Sie es so machen, wie ich es oben geschrieben habe, wird es keinen Fehler geben.


IntegerToString? Nö, habe ich nicht gehört ;)
 
Vitalie Postolache:

IntegerToString? Nö, habe ich nicht gehört ;)
Beide Möglichkeiten funktionieren gut, ich sehe kein Problem.
 

Hallo zusammen

Ich bin neu im Programmieren, aber ich versuche zu lernen)

Ich habe ein kleines Problem mit der Schließung der Bestellung nach dem Indikator Lesungen

Ich sollte gleich über die Eröffnungs- und Schließungsbedingungen informieren: Ich eröffne eine Position entsprechend den Indikatorwerten und schließe sie entsprechend den Indikatorwerten, aber in der entgegengesetzten Richtung, ohne Stopps und Gewinn.

if(r > 50 && p > m) //Bedingungen für die Eröffnung eines Kaufauftrags

{

ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //Kaufauftrag eröffnen

}

Schreibe ich die Bedingung für den Auftragsabschluss richtig?

if(r < 50 && p < m) --- dies ist eine Verkaufsbedingung und eine Schlussbedingung

{

OrderClose(ticketB,0.1,Bid,5,Red);

}

und druckt die mögliche Verwendung der nicht initialisierten Variablen 'ticketB' und den Rückgabewert von 'OrderClose' sollte geprüft werden

Könnt ihr mir sagen, wo ich es falsch geschrieben habe?



 
funnyrain8:

Hallo zusammen

Ich bin neu im Programmieren, aber ich versuche zu lernen)

Ich habe ein kleines Problem mit der Schließung der Bestellung nach dem Indikator Lesungen

Ich kann die Bedingungen für das Öffnen und Schließen einer Position anhand der Indikatorwerte sofort erkennen und den Auftrag in der entgegengesetzten Richtung ohne Stopps und Gewinn schließen.

if(r > 50 && p > m) //Bedingungen für die Eröffnung eines Kaufauftrags

{

ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //Kaufauftrag eröffnen

}

Schreibe ich die Bedingung für den Auftragsabschluss richtig?

if(r < 50 && p < m) --- dies ist eine Verkaufsbedingung und eine Schlussbedingung

{

OrderClose(ticketB,0.1,Bid,5,Red);

}

und druckt die mögliche Verwendung der nicht initialisierten Variablen 'ticketB' und den Rückgabewert von 'OrderClose' sollte geprüft werden

Könntet ihr mir sagen, wo ich es falsch geschrieben habe?



Die Variable ticketB ist nicht initialisiert, d. h., ihr Typ ist nicht bekannt. In diesem Fall ist es Int

Der zweite Fehler besteht darin, dass wir das Ergebnis des Abschlusses der Bestellung auf Fehler überprüfen müssen. Suche nach "Fehlerbehandlungsfunktion" im Forum

 
Renat Akhtyamov:

die Variable ticketB ist nicht initialisiert, d. h. der Typ ist nicht bekannt. In diesem Fall ist es Int.

Der zweite Fehler bezieht sich auf die Überprüfung des Ergebnisses des Auftragsabschlusses auf Fehler. Suche nach "Fehlerbehandlungsfunktion" im Forum

Ich kann die Logik nicht ganz verstehen oder bin sprachlos), aber wie mache ich das? Zuerst habe ich versucht, es mit OrderSelect zu machen, aber es war falsch)

Ich brauche einige Informationen dazu.

 
funnyrain8:

ist es GetLastError? ich kann die Logik nicht verstehen oder ich bin ein bisschen dumm), aber wie kann man es einstellen? zuerst habe ich versucht, alles mit OrderSelect zu machen, aber es ist nicht das gleiche)

Ich brauche einige Informationen dazu.

Ja.

Schauen Sie sich die Codebasis an - es gibt viele Beispiele für die Umsetzung.

 
Hallo, ich bin ein Signal-Verkäufer, würde ich gerne wissen, wie Sie Ihre Signale zu fördern, so dass die Menschen zu ihnen abonnieren?
 
Vitalie Postolache:


Wo ist die Logik? Sie legen die maximal zulässige Menge für den ersten Auftrag fest und erhöhen sie dann für jeden weiteren Auftrag. Halten Sie das nicht für, gelinde gesagt, nicht sehr vernünftig?

Außerdem verringern Sie die Menge des ersten Auftrags in der Schleife mit einer völlig unverständlichen Methode, während die Mengen der anderen Aufträge, die zuvor "berechnet" wurden, unverändert bleiben, und diese Werte überschreiten in keiner Weise die Grenzen dieser Funktion. Was tun sie dann?

Ganz zu schweigen davon, dass die Inkrementschleife keine reelle Zahl sein kann, sondern ein Zähler, eine ganze Zahl, sein muss. Aber Sie setzen den Wert des Loses als Zähler und subtrahieren bei jeder Iteration einen Wert davon. Dies ist ein großer Fehler, ein sehr schwerer Fehler.

Klären Sie die Logik zunächst in Ihrem Kopf und versuchen Sie dann, sie in Ihrem Code umzusetzen.

Die Werte, die nicht herausgenommen werden, um das endgültige Lot nach der Multiplikation zu bestimmen, sollte es das maximal mögliche Lot zu öffnen, in der Tat, die Aufträge mit diesen Lots möglicherweise nicht öffnen, weil der EA öffnet Aufträge in einem kleinen Intervall, aber es gibt eine Möglichkeit, so möchte ich die maximal mögliche anfängliche Lot zu berechnen. Ich habe Ihren Rat befolgt, und das ist es, was ich bekommen habe. Was halten Sie von dieser Funktion? Ich glaube, ich habe etwas übersehen oder falsch verschrieben; der Tester hängt ein wenig und erhält eine kleine Menge an Output.
//Функция расчета торгового лота
double GetLots()
{
 double lots = 0.0;
 double L9 = MarketInfo(Symbol(),MODE_MAXLOT);
 double L8 = L9 / Multipler;
 double L7 = L8 / Multipler;
 double L6 = L7 / Multipler;
 double L5 = L6 / Multipler;
 double L4 = L5 / Multipler;
 double L3 = L4 / Multipler;
 double L2 = L3 / Multipler;
 double cl = L2 / Multipler;
 double balance = AccountFreeMarginCheck(Symbol(),OP_BUY,L9);
 
 if(balance <= AccountFreeMargin())
 {
  for(int risk = 100;balance > 0 && risk > 0;risk--)
  {
   if(!IsStopped())
   {
    if(risk >= 1)
    {
     lots = (cl/100)*risk;
    }
    if(risk < 1)
    {
     for(int risk2 = 100;balance > 0 && risk2 >= 1;risk2--)
     {
      lots = (cl/100)*(risk2*0.01);
     }
    }
   }
  }
 }
 double clots = NormalizeDouble(MathMax(lots,MarketInfo(Symbol(),MODE_MINLOT)),2);
 return(clots);
}
 
Arseniy Barudkin:

Was halten Sie davon?


Ich werde dasselbe sagen. Du bist nicht gut in Logik. Was ist das Problem bei der sofortigen Berechnung der anfänglichen Menge, basierend auf den verfügbaren Mitteln und dem Wert des Risikos (ich glaube, es wurde über 3% geschrieben)? Warum müssen Sie alles an einem Ort erledigen?

Man nehme den Wert der freien Marge, multipliziere mit dem Risiko, teile durch 100 und den Wert der Marge für 1 Lot - so lautet die einfachste Formel zur Berechnung des Lots mit einem bestimmten Prozentsatz der freien Marge. Außerdem müssen Sie den Schritt des Loswechsels berücksichtigen und verhindern, dass die von den Maklerunternehmen zugelassene minimale/maximale Losgröße überschritten wird:

input double risk = 3; //процент свободной маржи для расчёта лота
double GetLots()
{
  double margin = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
  double lotstep = MarketInfo(Symbol(),MODE_LOTSTEP);
  double rsk = MathMin(100.0,risk);
  double lotmax = MarketInfo(Symbol(), MODE_MAXLOT);
  double lotmin = MarketInfo(Symbol(), MODE_MINLOT);

  double clots = NormalizeDouble(lotstep*MathRound(AccountFreeMargin()*rsk/100/margin/lotstep),2);
  if(clots < lotmin) clots = lotmin;
  if(clots > lotmax) clots = lotmax;

return(clots);
}