Leute, ich brauche Hilfe, ich bin seit ein paar Tagen nicht in der Lage, die notwendigen Änderungen an dem folgenden Code vorzunehmen:
void start()
{
StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);
// Определение направления пересечения мувинговif (Init) InitMetod();
// Трейлинг стоп открытых позицийif (Trailing != 0 ) RealTrailOrder(TrailStop, TrailStep, StopLevel, MagicNumber);
// Ожидание нового бара на графикеif(timeprev == Time[0]) return;
timeprev = Time[0];
// Открытие ордера по методу Пуриа
CheckForOpen();
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+void CheckForOpen() // Открытие ордера по методу Пуриа
{
double malw,mas1,mas2,macd;
int res;
// Считывание параметров индикаторов
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);
macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0);
// Проверяем положение мувмнговif(malw>mas1 && malw>mas2 && OrderSell)
{
OrderBuy=true;
OrderSell=false;
Order=true;
}
if(malw<mas1 && malw<mas2 && OrderBuy)
{
OrderBuy=false;
OrderSell=true;
Order=true;
}
// Открываем ордер Buyif(macd>0 && OrderBuy && Order)
{
res=OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue);
Order=false;
return;
}
// Открываем ордер Sell if(macd<0 && OrderSell && Order)
{
res=OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red);
Order=false;
return;
}
}
//+------------------------------------------------------------------+//| Calculate optimal lot size |//+------------------------------------------------------------------+double Lots() // Расчет объема лота
{
double Lots;
if (Lot > 0) return(Lot);
Lots=AccountFreeMargin()/5000;
Lots=MathMin(15,MathMax(0.01,Lots));
if(Lots<0.1) Lots=NormalizeDouble(Lots,2);
else
{
if(Lots<1) Lots=NormalizeDouble(Lots,1);
else Lots=NormalizeDouble(Lots,0);
}
return(Lots);
}
//+------------------------------------------------------------------+//| Init metod Puria function |//+------------------------------------------------------------------+void InitMetod() // Опредеоение начального пересечения мувингов
{
double malw,mas1,mas2;
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);
if((malw<=mas1 && malw>=mas2) || (malw>=mas1 && malw<=mas2))
{
Init=false;
OrderBuy=true;
OrderSell=true;
}
return;
}
Eigentlich, was ich versucht, aber konnte nicht hier hinzufügen: machen die EA warten auf 4 Kerze offen Preise in einer Reihe, nachdem alle Indikatoren (Kerze offen Preise ) übereinstimmen:
1. der Eröffnungskurs der ersten Kerze - (5) über (75) und (85) + MACD-Balken über 0 geöffnet - 1 von 4 Bestätigungen ist; 2. der Eröffnungskurs der zweiten Kerze - (5) über (75) und (85) + MACD-Balken über 0 geöffnet-2 von 4 Bestätigungen ist; 3.Der Eröffnungskurs der 3. Kerze - (5) über (75) und (85) + MACD-Balken über 0 geöffnet-3 von 4 Bestätigungen ja; 4. Der Eröffnungskurs der 4. Kerze - (5) über (75) und (85) + MACD-Balken über 0 geöffnet-4 von 4 Bestätigungen ja-Handel eröffnen, um auf derselben Kerze (4.) zu kaufen.
Die gleiche Situation mit Verkaufsaufträgen, nur in die andere Richtung sollten Indikatoren öffnen. Und es gibt einen wichtigen Punkt - wenn, sagen wir, in irgendeiner Phase von der 1. Kerze bis zur 4.,die Indikatoren ihre Positionändern(z.B. auf der 3. Eröffnungskerze, der MACD-Balken öffnet entweder unter 0, oder = 0) - dann wird alles zurückgesetzt, weil die Signale nicht auf der Eröffnung der 4-th Kerze in einer Reihe überprüft wurden.
Bitte beraten Sie, erfahrene Programmierer, was muss im Code geändert werden, damit diese Bedingungen funktionieren? Ich habe viele Dinge ausprobiert, und ich weiß nicht...
Der Eröffnungskurs der 1. Kerze - (5) über (75) und (85) + MACD-Balken eröffnet über 0 - 1 von 4 Bestätigungen ja;
2 Der Eröffnungskurs der 2. Kerze - (5) über (75) und (85) + MACD-Balken über 0 eröffnet-2 von 4 Bestätigungen ja;
3 Der Eröffnungskurs der 3. Kerze - (5) über (75) und (85) + MACD-Balken eröffnet über 0-3 von 4 Bestätigungen ist;
4 Der Eröffnungskurs der 4. Kerze - (5) über (75) und (85) + MACD-Balken über 0 eröffnet-4 von 4 Bestätigungen ja-Eröffnen Sie einen Handel zum Kauf auf derselben Kerze (4.).
Für einen Prüfer bedeutet dies
OrderSendtut und sogar auf schnellen Servern funktioniert, aber wenn man kein Tester ist, ist es besser, es nach der Dokumentation zu machen :)
Eigentlich, was ich versucht, aber konnte nicht hier hinzufügen: machen die EA warten auf 4 Kerze offen Preise in einer Reihe, nachdem alle Indikatoren (Kerze offen Preise ) übereinstimmen:
1. der Eröffnungskurs der ersten Kerze - (5) über (75) und (85) + MACD-Balken über 0 geöffnet - 1 von 4 Bestätigungen ist;
2. der Eröffnungskurs der zweiten Kerze - (5) über (75) und (85) + MACD-Balken über 0 geöffnet- 2 von 4 Bestätigungen ist;
3.Der Eröffnungskurs der 3. Kerze - (5) über (75) und (85) + MACD-Balken über 0 geöffnet- 3 von 4 Bestätigungen ja;
4. Der Eröffnungskurs der 4. Kerze - (5) über (75) und (85) + MACD-Balken über 0 geöffnet- 4 von 4 Bestätigungen ja- Handel eröffnen, um auf derselben Kerze (4.) zu kaufen.
Die gleiche Situation mit Verkaufsaufträgen, nur in die andere Richtung sollten Indikatoren öffnen. Und es gibt einen wichtigen Punkt - wenn, sagen wir, in irgendeiner Phase von der 1. Kerze bis zur 4., die Indikatoren ihre Position ändern(z.B. auf der 3. Eröffnungskerze, der MACD-Balken öffnet entweder unter 0, oder = 0) - dann wird alles zurückgesetzt, weil die Signale nicht auf der Eröffnung der 4-th Kerze in einer Reihe überprüft wurden.
Bitte beraten Sie, erfahrene Programmierer, was muss im Code geändert werden, damit diese Bedingungen funktionieren? Ich habe viele Dinge ausprobiert, und ich weiß nicht...
if(malw>mas1 && malw>mas2 && OrderSell)Wie man so schön sagt: Verlassen Sie sich nicht auf unser Wort.
OrderSellKeine Ahnung, was da drin sein könnte, teilen Sie die Entscheidungslogik im Code.
artem artem #:
Der Eröffnungskurs der 1. Kerze - (5) über (75) und (85) + MACD-Balken eröffnet über 0 - 1 von 4 Bestätigungen ja;
2 Der Eröffnungskurs der 2. Kerze - (5) über (75) und (85) + MACD-Balken über 0 eröffnet- 2 von 4 Bestätigungen ja;
3 Der Eröffnungskurs der 3. Kerze - (5) über (75) und (85) + MACD-Balken eröffnet über 0- 3 von 4 Bestätigungen ist;
4 Der Eröffnungskurs der 4. Kerze - (5) über (75) und (85) + MACD-Balken über 0 eröffnet- 4 von 4 Bestätigungen ja- Eröffnen Sie einen Handel zum Kauf auf derselben Kerze (4.).
Einen Wert mit einem anderen verrechnen, nichts? Ersten Block teilen = Lösung, zweiten Block teilen = Lösung, Blöcke vergleichen.
Einen Wert mit einem anderen verrechnen, nichts? Ersten Block teilen = Lösung, zweiten Block teilen = Lösung, Blöcke vergleichen.
Es stellt sich heraus, dass Sie im Code einen logischen Fehler haben.
OK, aber die Variablen werden abstürzen, wenn Sie sie auf diese Weise verwenden, und dann werden Sie nicht wissen, was die "Wunder" sind
OK, aber die Variablen werden abstürzen, wenn Sie sie auf diese Weise verwenden, und dann werden Sie nicht wissen, was die "Wunder" sind.
Wenn Sie eine andere Möglichkeit kennen, schreiben Sie sie auf...
Sie können Menschen helfen.)