und was bewirkt der folgende Befehl print("Anzahl der Lose : ",Lots); ?
#property link"" #property version"1.00" #property strict //--- input parameters inputint Percent=50; inputint Fast_EMA_Period=12; inputint Slow_EMA_Period=25; inputint Signal_Period=9; inputdouble Step_PSAR=0.02; inputdouble Maximum_PSAR=0.2; inputint MAGICNUMBER=413; staticdatetime New_Time;// Время текущего бара double Margin_Percent; //Используемые средства для открытия ордеров double Lots;//Определение общего количества лотов double Lots_Volume; double MacdCurrent;//Параметры MACD основной линии текущего бара double MacdPrevious1;//Параметры MACD основной линии предыдущего бара double MacdPrevious2;//Параметры MACD основной линии со смещением на 2 бара double StopLoss;//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара double Previous_StopLoss;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара double CurrentPSAR;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ voidOnTick() {
bool New_Bar=false; // Флаг нового бара int ticket,total,cnt; //--------------------------------------------------------------------------- New_Time=TimeCurrent(); if(Time[0]==New_Time) // Сравниваем время New_Bar=true; // Поймался новый бар elseif(New_Bar==false) // Если бар не новый..
Die fünfte Zeile gibt den Prozentsatz an. Im Protokoll steht: "Anzahl der Lose: 90.0100000001". Vielleicht sollten wir NormalizeDouble() hinzufügen?
Michail_David: In der fünften Zeile wird Percent eingestellt. Das Protokoll zeigt: "Die Anzahl der Lose ist 90.0100000001". Vielleicht sollten wir NormalizeDouble() hinzufügen?
Mit dem Grundstück ist alles in Ordnung.
Suchen Sie nach einem Fehler in der Logik der Auftragseröffnung.
In solchen Fällen setze ich normalerweise eine explizite Bedingung, die den Auftrag öffnet
Suchen Sie nach einem Fehler in der Logik der Auftragseröffnung.
In der Regel stelle ich in solchen Fällen eine ausdrückliche Bedingung für die Öffnung des Auftrags auf
Bitte geben Sie uns ein Beispiel mit einer eindeutigen Bedingung. Wenn ich es richtig verstehe, sollte es eine Bedingung in der zu öffnenden Schleife geben. Ist dies richtig?
Michail_David: Bitte geben Sie ein Beispiel mit einer eindeutigen Bedingung an. Wenn ich es richtig verstehe, sollte die Schleife eine Bedingung für das Öffnen haben. Oder?
Geben Sie am Anfang des Codes, gleich nach der Berechnung des Loses, einen Befehl zum Öffnen eines Auftrags und vergewissern Sie sich, dass der Tester richtig funktioniert. Dann können Sie alles wieder zurücklegen.
Renat Akhtyamov: Geben Sie am Anfang des Codes, gleich nach der Berechnung des Loses, einen Befehl zur Eröffnung eines Auftrags und vergewissern Sie sich, dass der Tester richtig funktioniert. Dann können Sie alles wieder an seinen Platz setzen.
Ich danke Ihnen. Ich habe einen Fehler gefunden. Ich hatte zurückgegeben; nach Berechnung der Lose. Deshalb haben sich die Lose nicht geöffnet.
Michail_David: Die fünfte Zeile gibt den Prozentsatz an. Im Protokoll wird angezeigt: "Anzahl der Lose 90.0100000001". Vielleicht sollten wir NormalizeDouble() hinzufügen?
Ja, das sollten Sie. Und nicht nur Lose, sondern auch alle anderen Werte, die an den Server übergeben werden. Lots sind auch nützlich, um die minimale und maximale erlaubt in den Kontowert zu überprüfen, auch auf der Schritt ändern, gab es Fälle, in denen das Los in Schritten von 0,03 geändert werden kann, so 90,01 wird nicht funktionieren, zumindest überschrieben.
Ich hoffe, dass der Variablen Percent in OnInit() ein Wert zugewiesen wird?
Meine Prozent-Variable ist benutzerdefiniert. OnInit() habe ich entfallen lassen.
wenn Lots=0, wird nichts vom Prüfer geöffnet
Margin_Percent=AccountFreeMargin()*Percent/100;
Lots=Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED);
Lots_Volume=(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP));
if(Lots>Lots_Volume){
Lots=Lots_Volume;
}
else if(Lots<Lots_Volume)
Lots=MathFloor(Lots);
Print("Количество лотов : ",Lots);
return;
Und dennoch, wo im Code ist Prozent eingestellt
und was bewirkt der folgende Befehl print("Lots : ",Lots); ?
Doch wo im Code ist Percent
und was bewirkt der folgende Befehl print("Anzahl der Lose : ",Lots); ?
#property version "1.00"
#property strict
//--- input parameters
input int Percent=50;
input int Fast_EMA_Period=12;
input int Slow_EMA_Period=25;
input int Signal_Period=9;
input double Step_PSAR=0.02;
input double Maximum_PSAR=0.2;
input int MAGICNUMBER=413;
static datetime New_Time;// Время текущего бара
double Margin_Percent; //Используемые средства для открытия ордеров
double Lots;//Определение общего количества лотов
double Lots_Volume;
double MacdCurrent;//Параметры MACD основной линии текущего бара
double MacdPrevious1;//Параметры MACD основной линии предыдущего бара
double MacdPrevious2;//Параметры MACD основной линии со смещением на 2 бара
double StopLoss;//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double CurrentPSAR;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
bool New_Bar=false; // Флаг нового бара
int ticket,total,cnt;
//---------------------------------------------------------------------------
New_Time=TimeCurrent();
if(Time[0]==New_Time) // Сравниваем время
New_Bar=true; // Поймался новый бар
else if(New_Bar==false) // Если бар не новый..
In der fünften Zeile wird Percent eingestellt. Das Protokoll zeigt: "Die Anzahl der Lose ist 90.0100000001". Vielleicht sollten wir NormalizeDouble() hinzufügen?
Mit dem Grundstück ist alles in Ordnung.
Suchen Sie nach einem Fehler in der Logik der Auftragseröffnung.
In solchen Fällen setze ich normalerweise eine explizite Bedingung, die den Auftrag öffnet
Mit dem Grundstück ist alles in Ordnung.
Suchen Sie nach einem Fehler in der Logik der Auftragseröffnung.
In der Regel stelle ich in solchen Fällen eine ausdrückliche Bedingung für die Öffnung des Auftrags auf
Bitte geben Sie ein Beispiel mit einer eindeutigen Bedingung an. Wenn ich es richtig verstehe, sollte die Schleife eine Bedingung für das Öffnen haben. Oder?
Geben Sie am Anfang des Codes, gleich nach der Berechnung des Loses, einen Befehl zur Eröffnung eines Auftrags und vergewissern Sie sich, dass der Tester richtig funktioniert. Dann können Sie alles wieder an seinen Platz setzen.
Die fünfte Zeile gibt den Prozentsatz an. Im Protokoll wird angezeigt: "Anzahl der Lose 90.0100000001". Vielleicht sollten wir NormalizeDouble() hinzufügen?