Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 852

 

Eröffnet nicht einen Handel, wo ist der Fehler?

iRSI_handle=iRSI(NULL,0,15,PRICE_OPEN);

double iRSI_buf[];

ArraySetAsSeries(iRSI_buf,true);

CopyBuffer(iRSI_handle,0,0,20,iRSI_buf);

if (iRSI_buf[0]>60)

trader.Buy(Lot);
 
Askr:

Öffnet den Handel nicht, wo ist der Fehler?

Fehler Nummer 1: Bei jedem Tick erstellen Sie einen NEUEN Indikator HANDL

Schwarm Nummer 2: (wahrscheinlich) hat die Variable Lot ein falsches Volumen.

Fehler Nummer 3: (wahrscheinlich) ist die Auftragsart für die Klasse CTrade nicht gefüllt.


Was steht im Allgemeinen im Protokoll des Terminals (oder des Testers)?

 
Kirill Belousov:

der Betrag multipliziert mit dem Währungsverlust von 1 SL

Und wenn der Verlust 1 ist, zum Beispiel in BO.

Ich setze die Werte in die Formel ein und erhalte nicht einmal annähernd das gleiche Ergebnis.

Was ist los?

double lot=1.0;
double koef_lot=2.0;
int seriya =15;
double depo=0.0;
depo=(lot*(koef_lot*seriya-1))/(koef_lot-1);
   Comment(" depo ",depo);
 
Vladimir Karputov:

Lücke Nummer 1: Für jeden Tick erstellen Sie einen NEUEN Indikator HANDL

Schwarm Nummer 2: (wahrscheinlich) hat die Variable Lot ein falsches Volumen.

Fehler Nummer 3: (wahrscheinlich) ist die Auftragsart für die Klasse CTrade nicht gefüllt.


Wie auch immer, was steht im Protokoll des Terminals (oder des Testers)?

Dieser Code war in Onitics

ArraySetAsSeries(iRSI_buf,true);

CopyBuffer(iRSI_handle,0,0,20,iRSI_buf);

Verschieben Sie es zu Onytics. Ich habe gerade die Artikel hier gelesen - und ich habe verstanden, dass es keinen Unterschied für die Arbeit gibt, aber es ist besser in onitiket. Aber in Bezug auf die Klarheit für mich selbst, war ich bequemer, alles in 1 Block zu tun, ich bin rein für mich, während die Lösung von Problemen, die ich mir selbst (Lernen.)

Das Problem war das Los - ich musste eine nicht variable Menge eingeben - und die Funktion returnlot (weil es eine Funktion zur Berechnung des Loses war).

Jetzt habe ich einen Fehler in der Lot-Funktion gefunden - das Lot wird mit vielen Nachkommastellen berechnet und als Ergebnis kann der Auftrag nicht geöffnet werden. Wir müssen unnötige Zeichen reduzieren und nur 2 übrig lassen.

//параметры
input double      StartLot=0.1;
input double      StartEquityLot=10000;

//переменные
double KoefLotEQUITY;//разница эквити
double Lot;

//функция расчета текущего торгового лота
double LotF(double Lot)
{
KoefLotEQUITY=AccountInfoDouble(ACCOUNT_EQUITY)/ StartEquityLot;
Lot=StartLot*KoefLotEQUITY;
//функция минимального возможного лота
if (Lot<0.01)
{
Lot=0.01;
}

return(Lot);
} 

NormalizeDouble und DoubleToStr so weit kann nicht funktionieren - schreibt, dass die Funktion nicht in der Funktion platziert werden kann, und unten, wenn ich ihre Arbeit mit der Funktion schreibt Fehler - die ich nicht beheben kann.


 
Askr:

Dieser Code war in Onitik.

Nach ontic verschoben. Ich habe gerade die Artikel hier gelesen - und aus ihnen habe ich verstanden, dass es keinen Unterschied für die Arbeit gibt, aber es ist besser in ontiket. Aber in Bezug auf die Klarheit für mich selbst, war ich bequemer, alles in 1 Block zu tun, ich bin rein für mich, während die Lösung von Problemen, die ich mir selbst (Lernen.)

Das Problem war das Los - ich musste eine nicht variable Menge eingeben - und die Funktion returnlot (weil es eine Funktion zur Berechnung des Loses war).

Jetzt habe ich einen Fehler in der Lot-Funktion gefunden - das Lot wird mit vielen Nachkommastellen berechnet und als Ergebnis kann der Auftrag nicht geöffnet werden. Wir müssen unnötige Zeichen reduzieren und nur 2 übrig lassen.

Wenn ich die Funktion NormalizeDouble und DoubleToStr einfüge, kann ich es noch nicht tun, es sagt, dass die Funktion nicht eingefügt werden kann, und unten sehe ich Fehler, die ich nicht korrigieren kann.


In MQL5 müssen Sie ein Indikator-Handle NUR einmal und NUR in OnInit erstellen. Es ist ein Axiom. Sie können nicht bei jedem Tick in OnTick ein Indikator-Handle erstellen - das ist falsch.

Die korrekte Normalisierung des Loses erfolgt in der Handelsklasse CSymbolInfo::NormalizePrice

 
Vladimir Karputov:

In MQL5 müssen Sie ein Indikator-Handle NUR einmal und NUR in OnInit erstellen. Es ist ein Axiom. Sie können nicht bei jedem Tick in OnTick ein Indikator-Handle erstellen - das ist RICHTIG.

Die korrekte Normalisierung des Loses erfolgt in der Handelsklasse CSymbolInfo::NormalizePrice

Das ist falsch, das bestreite ich nicht. ABER!!! Was wird sich ändern, wenn wir sie bei jedem Häkchen erstellen??? Nicht einmal der Wert wird sich ändern.

 
Alexey Viktorov:

Falsch, das lässt sich nicht bestreiten. ABER!!! Was wird sich ändern, wenn Sie bei jedem Häkchen etwas erstellen? Nicht einmal der Wert wird sich ändern.

Was soll das bringen? Das ist nur eine Menge zusätzlicher Arbeit für das Drehbuch, das ist alles.

 
Alexey Viktorov:

Falsch, das lässt sich nicht bestreiten. ABER!!! Was wird sich ändern, wenn Sie bei jedem Häkchen etwas erstellen? Nicht einmal der Wert wird sich ändern.

In einem kürzlich erschienenen Artikel habe ich gezeigt, dass MQL5 die Überbleibsel der Codierung im MQL4-Stil - Erstellung von Handles bei jedem Tick - wirksam bekämpft: Der Speicher wird nicht verschwendet, aber die Betriebsgeschwindigkeit wird zumindest verringert. Aber ich wiederhole: Die Erstellung von Indikatoren in MQL5 im Stil von MQL4 ist nicht die richtige Methode. Wenn Sie zu MQL5 wechseln, bedeutet das, dass der Programmierstil neu aufgebaut werden muss.

 
Konstantin Nikitin:

Was soll das bringen? Es ist nur zusätzliche Arbeit für das Drehbuch, das ist alles.

Das hat natürlich keinen Sinn. Es war so eine versteckte Frage drubashke: Warum ähneln Neurastheniker, die hier sind genug, wie es ist, und schalten Sie Caps Lock?

 

Das heißt, das Ergebnis ist das gleiche, aber die Ausführung ist natürlich sinnlos und viel anstrengender, wie ich dem Geschriebenen entnehme.

Ich wünschte, sie hätten daran gedacht, dies in dem Artikel zu erwähnen, aber im Allgemeinen ist es klar, dass es keinen Grund gibt, dieselbe Sache mehrmals zu tun.

Aber ich hatte das Ziel zu schreiben, um zu verstehen und selbst zu arbeiten, nicht um zu optimieren - das ist, nachdem ich gezählt habe.