Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 99

 

Dratuti. Wie macht man eine solche Tafel?

 
Andrey Sokolov:

Dratuti. Wie macht man eine solche Tafel?

Nehmen Sie das Beispiel von kodobase und machen Sie es nach, es gibt viele Berater mit Tafeln für jeden Geschmack. Es beginnt mit dem Hintergrund
 
Andrey Sokolov:

Dratuti. Wie macht man eine solche Tafel?

Mit grafischen Objekten.
 
 
Andrey Sokolov:
Vitaly Muzichenko,Artyom Trishkin, vielen Dank.
Nzt
 
trader781:

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.
Ich habe Probleme mit der Logik.

Das ist ganz einfach:

  1. einen Auftrag eröffnen
  2. den Auftrag bearbeiten
  3. den Auftrag abschließen
  4. Überprüfen Sie den Zustand und...
    • wenn true, dann ExpertRemove()
  5. Nochmals
 
Artyom Trishkin:
Wir haben Probleme mit der Logik.

Alles ist einfach:

  1. einen Auftrag eröffnen
  2. den Auftrag bearbeiten
  3. den Auftrag abschließen
  4. prüfen Sie den Zustand und...
    • wenn true, dann ExpertRemove()
  5. und wiederholen Sie es
Irgendetwas scheint falsch zu sein, wenn es stimmt - man muss einen Kohlkopf schneiden, nicht in die Büsche gehen)
 
Vitaly Muzichenko:
Irgendetwas scheint nicht zu stimmen, wenn es stimmt - du solltest Kohl hacken, nicht in den Büschen)
Falsch. Falsch. Ich weiß nicht, wie der Test aussieht... Scheiße, da ist noch eine gewisse Logik drin.
Oder wollen Sie einfach nur plaudern?
 

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;
}
}
}

//-------------------------------------------------------------------------------------------------------

 
trader781:

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...
  • wenn true, dann hängt der Bot mit minimaler Aktivität, vorzugsweise überhaupt nicht

d.h. wie wird der Eingang für die weitere Bearbeitung gesperrt?

return(0); aber das ist nicht wünschenswert - es wird nichts anderes verarbeiten.