Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 99
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Dratuti. Wie macht man eine solche Tafel?
Dratuti. Wie macht man eine solche Tafel?
Dratuti. Wie macht man eine solche Tafel?
Vitaly Muzichenko,Artyom Trishkin, vielen Dank.
Weiter zu schreiben ein weiteres Huckepack auf martingale, verlieren auch in der Tester, sonst wie sollen wir einen Elch wachsen.
Im Moment gibt es einen gewünschten Parameter, der dafür sorgen soll, dass die nächste Bestellung geöffnet werden kann, nachdem die vorherige(n) Bestellung(en) abgeschlossen ist/sind
Es gibt 2 Szenarien
1) wenn der Wert wahr ist
einen Auftrag eröffnen
Prozess
schließen
und wieder öffnen
2) wenn falsch
Öffnen Sie die Bestellung
Prozess
Schließen Sie
und dann ExpertRemove ausführen
das ganze Problem besteht darin, dass sich diese beiden Bedingungen gegenseitig ausschließen, aber in 1 EA kombiniert werden müssen, da
1) Wert wird zu Beginn festgelegt
2) der Wert wird in den Eingabe- und Verarbeitungsbedingungen festgelegt und zur Verarbeitung akzeptiert (wenn wahr, offen)
3) nach dem Schließen setzen wir false
Wenn jemand an solchen Dingen interessiert ist, würde ich mich freuen, meine Varianten zu hören.Das ist ganz einfach:
Wir haben Probleme mit der Logik.
Alles ist einfach:
Irgendetwas scheint nicht zu stimmen, wenn es stimmt - du solltest Kohl hacken, nicht in den Büschen)
Bitte beraten Sie mich. Der Expert Advisor eröffnet keine Aufträge im Terminal. Die Zusammenstellung ist im Gange, laut den Charts sollten die Aufträge eröffnet werden. Aber sie sind es nicht. Ich füge den Code bei.
double Lots=NormalizeDouble((AccountFreeMargin()/100*Percent)/MarketInfo(Symbol(),MODE_MARGINREQUIRED),1);//Die Anzahl der Lots bestimmen
double MacdCurrent=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,0);//MACD-Parameter des aktuellen Balkens
double MacdPrevious1=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,1);//die MACD-Parameter des vorherigen Balkens
double MacdPrevious2=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,2);//die MACD-Parameter der Hauptlinie um 2 Takte versetzt
double StopLoss=iSAR(NULL,Periode(),Step_PSAR,Maximum_PSAR,0);//Parameter Trailing Stop durch ParabolicSAR Parameter des aktuellen Balkens
double Previous_StopLoss=iSAR(NULL,Periode(),Step_PSAR,Maximum_PSAR,1);//StopLoss-Parameter durch ParabolicSAR-Parameter des vorherigen Balkens
double PSARCurrent=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);//Parameter ParabolicSAR des aktuellen Balkens
double PSARPrevious=iSAR(NULL,Periode(),Step_PSAR,Maximum_PSAR,1);//ParabolicSAR-Parameter des vorherigen Balkens
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion|
//+------------------------------------------------------------------+
void OnTick()
{
static datetime New_Time=TimeCurrent();// Uhrzeit des aktuellen Taktes
bool New_Bar=false; // Neuen Balken markieren
int ticket,total,cnt;
//---------------------------------------------------------------------------
{
New_Bar=false; // Kein neuer Balken
if(Zeit[0]==Neue_Zeit) // Zeiten vergleichen
{
New_Bar=true; // New_Bar wird gefangen
if(Neuer_Balken==false) // Wenn ein Balken nicht neu ist
return; // ...dann exit
}
}
total=OrdersTotal();// Ermittlung der Anzahl der Bestellungen
if(gesamt<1)
{
//---keine offenen Aufträge
if((AccountFreeMargin()/100*Percent)<MarketInfo(Symbol(),MODE_MARGINREQUIRED)*(MarketInfo(Symbol(),MODE_MINLOT))
//Prüfung der Verfügbarkeit von Mitteln zur Eröffnung des Mindestloses
{
Print("Nicht genügend Mittel. Freie Mittel = ",AccountFreeMargin());
Rückkehr;
}
//---Bedingung für die Eröffnung einer Long-Position (BUY)
if((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)
&&
PSARCurrent<iOpen(NULL,0,1))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,0,NULL,MAGICNUMBER,0,Green);
if(ticket>0)///geöffnete Position prüfen
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order open : ",OrderOpenPrice());
sonst
Print("BUY order open error : ",GetLastError());
Rückkehr;
}
}
//---Bedingung für die Eröffnung einer Short-Position (SELL)
if((MacdCurrent<0 && MacdPrevious1>=0 && MacdPrevious2>0)
&&
PSARCurrent>iOpen(NULL,0,1))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss,0,NULL,MAGICNUMBER,0,Red);
if(ticket>0)///geöffnete Position prüfen
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order open : ",OrderOpenPrice());
sonst
Print("Fehler beim Öffnen einer SELL-Order: ",GetLastError());
Rückkehr;
}
}
//--- den Block "keine offenen Aufträge" verlassen
}
//---es ist wichtig, richtig in den Markt einzusteigen, aber noch wichtiger ist es, ihn richtig zu verlassen
for(cnt=0;cnt<Gesamt;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MAGICNUMBER && // Überprüfung der magischen Nummer der Bestellung
OrderSymbol()==Symbol()) // Prüfung auf das Order-Symbol
{
//--- Long-Position eröffnet
if(Auftragsart()==OP_BUY)
{
//--- muss geschlossen werden?
if((MacdCurrent<0 && MacdPrevious1>=0 && MacdPrevious2>0)
&&
PSARCurrent>iOpen(NULL,0,1))
{
//--- Auftrag schließen und beenden
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Print("OrderClose error ",GetLastError());
Rückkehr;
}
//------------------Auftrag nach StopLoss ändern
if(StopLoss>Previous_StopLoss && StopLoss<iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Print("Fehler bei der Auftragsänderung. Fehlercode=",GetLastError());
sonst
Print("Der Stop-Loss-Preis der Order wurde erfolgreich geändert;)
Rückkehr;
}
}
sonst // short gehen
if(OrderType()==OP_SELL)
{
//--- muss geschlossen werden?
if((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)
&&
PSARCurrent<iOpen(NULL,0,1))
{
//--- Auftrag schließen und beenden
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print("OrderClose error ",GetLastError());
Rückkehr;
}
//-----------------Auftrag nach StopLoss ändern
if(StopLoss<Previous_StopLoss && StopLoss>iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Print("Fehler bei der Auftragsänderung. Fehlercode=",GetLastError());
sonst
Print("Der Stop-Loss-Preis der Order wurde erfolgreich geändert;)
Rückkehr;
}
}
}
//-------------------------------------------------------------------------------------------------------
Ja, es ist einfacher als das.
aber wie wäre es, wenn wir dies als Ausweichlösung beibehalten und Folgendes tun
prüfen Sie den Zustand und...d.h. wie wird der Eingang für die weitere Bearbeitung gesperrt?