Anstatt Fernsehsendungen als Zweitfunktion zu sehen, sollten Sie sich überlegen, das Buch zu lesen und zu verstehen. ;-)
Was Sie zu erreichen versuchen, ist einfach und wird in vielen Strategien verwendet, aber Ihr Code - und Ihre Geschichten - sind verwirrend und teilweise falsch - zumindest der Code.... nicht sicher über die Geschichten.
//Pseudo codeif(NewBar) ResetSignals(); //Set all SignalxExecuted to falseif(SignalBuy1&&!SignalBuy1Executed&&OpenOrders()==1){
//do open buy position
SignalBuy1Executed=true; //Set Signal to exectued to prevent a reuse in the same bar
}
if(SignalBuy2&&!SignalBuy2Executed&&OpenOrders()==2){
//do open buy position
SignalBuy2Executed=true; //Set Signal to exectued to prevent a reuse in the same bar
}
SignalBuy1=CheckForOpenBull42(); //Check for Signal1 condition is true
SignalBuy2=CheckForOpenBull62(); //Check for Signal2 condition is true
if(OpenOrders()>0)CheckForClose(); //Check any order needs to be closed
//and so on.....
Warum versuchen Sie nicht, vorerst nur ein Signal zu implementieren und sich auf den Code für die benötigten Funktionen zu konzentrieren? Wenn Sie einen guten Code für ein Signal haben, ist es wahrscheinlich einfach, die anderen Signale zu implementieren, und viele Funktionen sind dann bereits vorhanden.
Später könnten Sie Arrays und andere Funktionen verwenden, um den Code zu vereinfachen, aber die Vereinfachung Ihres obigen Codes sollte im Moment nicht Ihr größtes Problem sein.
KroninJa!Sie verstehen mich:),viele der Strategienin einemEA. Ich muss150Strategienschreibenundsiemüssenzur gleichen Zeitauf dem gleichen Graphenlaufen undalle Strategienauf einmalausführen. Wenn ich 150 EA gleichzeitig laufen lasse, wirdmeinPCexplodieren-denke ich.
Danachist essinnlos, weil Sienur eineStrategie EAund vielebereits innerhalbhabenkönnen.
NatürlichkanndieStrategienicht miteinander interferieren, und wenn man laufen die zweite kann auch laufen, und ich kann laufen strategie 1, und 3 und 5. und strategie (1,3,5) laufen im gleichen Moment haben.
Ich werde keineweiterenGeschichtenmehrschreiben:)
MeinCode istfalsch -es ist bekannt, ich habe versucht, diebeiden Strategienin einem einzigenEA zu setzen, der Codefunktioniertgut, aber dieGesamtheitist nichtgut funktionieren
IhrCode ist sehrinteressant,ich werdeihnstudieren, bittegeben Sie miretwas Zeit
HalloFreunde,nach einer langenArbeitin Code unddurchInformationenvonKroninCode iststrukturiert undfunktioniert. Codepräsentiertzwei Strategienin einem einzigenEA
1.für eine kleineKerzeKaufSzenarioist mit einemblauen Pfeilmarkiert,sindzwei Optionen fürBUY 2. für diedurchschnittlicheKerzeKaufSzenarioKerzeist miteinem roten Pfeilmarkiert,sinddrei Optionen für BUY
Ich habe eineSituation zu, wo 1Punkt=1 Pipist bequem(das Problemzu lösen, istfür später) Nichtverwenden Optionen, wenn (NewBar)ResetSignals(), weil ich denke,sie sind nichtdie Ursache desFehlers
Wenn Sieeine FunktionPART 2 in start()blaulöschen, wird eine Strategie funktionieren, undes funktioniert gut Wenn Sie denCodePART1undPART2mitzweiStart-Strategien,aber sie werdenüberlappen. das ist Fehler
Könnten Sie einen Blick darauf werfen, Kronin?
//+------------------------------------------------------------------+//+------------------------------------------------------------------+#define MAGICMA 20050610//+------------------------------------------------------------------+//| Check NEW BAR WORK AT BARS M15 |//+------------------------------------------------------------------+/*
bool New_Bar = false;
bool Fun_New_Bar()
{
static datetime New_Time=0;
New_Bar=false;
if(New_Time!=Time[0])
{
New_Time=Time[0];
New_Bar=true;
}
}
*///+------------------------------------------------------------------+//| Calculate open positions HOW MEANY OF THIS |//+------------------------------------------------------------------+int OpenOrders(string symbol)
{
int buys=0,sells=0;
//----for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
}
}
//---- return orders volumereturn(buys);
}
//+------------------------------------------------------------------+//| Calculate candle These is condidion |//+------------------------------------------------------------------+// scenario 1 / EA 1 / startegy 1 / bluebool BULL4()
{
if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
return(true);
}
// scenario 2 / EA 2 / startegy 2 / redbool BULL6()
{
if(Close[1]-Open[1]>=6*Point && Close[1]-Open[1]<=7*Point)
return(true);
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+// Check for open for scenario 1 / EA 1 / startegy 1 bool OpenBULL41()
{
int res;
if(Bid==Close[1]+3*Point)
{
res=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue);
return (true);
}
return (false);
}
//----------------------------------- bool OpenBULL42()
{
int res;
if(Ask>OrderOpenPrice()+4*Point)
{
res=OrderSend(Symbol(),OP_BUY,0.42,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue);
return;
}
}
// Check for open for scenario 2 / EA 2 / startegy 2void OpenBULL61()
{
int res;
if(Bid==Close[1]+4*Point)
{
res=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Red);
return;
}
}
//----------------------------------- void OpenBULL62()
{
int res;
if(Ask>OrderOpenPrice()+2*Point)
{
res=OrderSend(Symbol(),OP_BUY,0.62,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Red);
return;
}
}
//----------------------------------- void OpenBULL63()
{
int res;
if(Ask>OrderOpenPrice()+2*Point)
{
res=OrderSend(Symbol(),OP_BUY,0.63,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Red);
return;
}
}
//+------------------------------------------------------------------+//| Check for close order conditions |//+------------------------------------------------------------------+void CheckForClose()
{
RefreshRates();
if(OrderOpenPrice()+4*Point< Ask)
for (int i = OrdersTotal()-1; i >= 0;i--) // I Have do -1 in "OrdersTotal()-1"
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol())
{
bool ticket = true;
if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);
}
}
}
/*
void CheckForClose2()
{
RefreshRates();
if(OrderOpenPrice()+6*Point< Ask)
for (int i = OrdersTotal(); i >= 0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol())
{
bool ticket = true;
if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);
}
}
}
*///+------------------------------------------------------------------+//| Start function |//+------------------------------------------------------------------+void start()
{
//------------------ PART1 bool SignalBULL41Executed=false;
if(BULL4() && !SignalBULL41Executed && OpenOrders(Symbol())==0)
{
OpenBULL41();//do open buy position
SignalBULL41Executed=true;
}
bool SignalBULL42Executed=false;
if(!SignalBULL42Executed && OpenOrders(Symbol())==1)
{
OpenBULL42();//do open buy position
SignalBULL42Executed=true;
}
if(OpenOrders(Symbol())>0)CheckForClose();
//------------------ PART 2bool SignalBULL61Executed=false;
if(BULL6() && !SignalBULL61Executed && OpenOrders(Symbol())==0)
{
OpenBULL61();//do open buy position
SignalBULL61Executed=true;
}
bool SignalBULL62Executed=false;
if(!SignalBULL62Executed && OpenOrders(Symbol())==1)
{
OpenBULL62();//do open buy position
SignalBULL62Executed=true;
}
bool SignalBULL63Executed=false;
if(!SignalBULL63Executed && OpenOrders(Symbol())==2)
{
OpenBULL63();//do open buy position
SignalBULL63Executed=true;
}
// if(SignalBULL61Executed && OpenOrders(Symbol())>0)CheckForClose2();
}
//+------------------------------------------------------------------+
Verwenden Sienicht dieOptionenif (NewBar)ResetSignals(), weil ich denke, dasssie nichtdie Ursache desFehlerssind.
Die Art und Weise, wie die Funktion Fun_NewBar() kodiert ist, lässt das nicht zu ... Sie müssen es so machen, dass sie vom Typ bool ist und einen bool-Wert zurückgibt ...
bool Fun_New_Bar()
{
staticdatetime New_Time=0;
if(New_Time!=Time[0])
{
New_Time=Time[0];
return(true); // <---- we have a new bar so the function returns true
}
return(false);
}
Ja, du hast Recht, gibtboolund es gibtint (bereits festgelegt)Ich sehe nicht vor. Dankeschön Aberdiese Funktionbenutzeichnicht, es ist wie einText
Ich glaube nicht, dassdiesaufFunktionenzutrifft, diemich vonzweisich überschneidendenStrategientrennen.Ich seheden Zusammenhangnicht.Oder vielleicht liege ich falsch?
//Pseudo codeif(NewBar) ResetSignals(); //Set all SignalxExecuted to falseif(SignalBuy1&&!SignalBuy1Executed&&OpenOrders()==1){
//do open buy position
SignalBuy1Executed=true; //Set Signal to exectued to prevent a reuse in the same bar
}
Schön zu sehen, dass Sie einige Fortschritte gemacht haben, aber es ist noch ein langer Weg :-)
Sie müssen beheben, was RaptorUK oben angegeben hat. Das Zurücksetzen der Signale ist wichtig, sonst stoppt der EA recht bald mit dem Eröffnen neuer Trades. Ihre Implementierung ist falsch. Wenn Sie das SignalExecuted bei jedem Tick zurücksetzen, hat es keinen Sinn. Es werden vielleicht nicht mehr Trades eröffnet, weil Sie auch die OpenOrders filtern. Da Ihre Strategie aber mehrere offene Orders zulässt, kann ich mir vorstellen, dass Sie auch einen Algorithmus zum Schließen von Orders haben wollen, so dass das SignalExecuted-Flag bei einem neuen Bar zurückgesetzt werden muss (mit Ihrer Implementierung ist es nutzlos und Sie brauchen es nicht).
Wenn ich Sie richtig verstehe, werden Sie BULL4 nicht ausführen, wenn BULL6 auch wahr ist. Oder anders ausgedrückt, die blaue Strategie nur, wenn die rote Strategie nicht gültig ist, oder die kleine Kerze nur, wenn die mittlere Kerze nicht gültig ist.
if(BULL4()&&!BULL6(){ // <--- only strategy BULL4 is valid, we are looking at a 'small' bar.if(!SignalBULL41Executed && OpenOrders(Symbol())==0){
OpenBULL41();//do open buy position
SignalBULL41Executed=true;
}
if(!SignalBULL42Executed && OpenOrders(Symbol())==1){
OpenBULL42();//do open buy position
SignalBULL42Executed=true;
}
// Check for open for scenario 1 / EA 1 / startegy 1 bool OpenBULL41()
{
int res;
if(Bid==Close[1]+3*Point) // <--- equal makes no sense here and you should not compare doubles for equality.
Read (again): https://www.mql5.com/en/forum/136997
{
res=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue); // <--- what is your plan with res? You are aware, it does include the ticket
number or -1, aren't you?
return (true); // <--- Even if OrderSend() fails you return true.
}
return (false);
}
//----------------------------------- bool OpenBULL42()
{
int res;
if(Ask>OrderOpenPrice()+4*Point) // <--- OrderOpenPrice() from a somewhere selected order may or may not work here
(may because only one order is open), but it is not nice coded.
{
res=OrderSend(Symbol(),OP_BUY,0.42,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue);
return;
}
}
Die CheckForClose() Funktion hat so ziemlich die gleichen Probleme und zusätzlich keinen Filter für die magische Zahl. Auch hier könnte OrderOpenPrice(), ausgewählt aus einer Order in der Buy Count, dazu führen, dass die falsche Order geschlossen wird (ich bin mir nicht sicher, ob es tatsächlich funktioniert). Bitte lesen Sie auch noch einmal, was Raptor auf der ersten Seite dieses Threads geschrieben hat.
Aus Ihren Beiträgen und den Kommentaren im Code schließe ich, dass Sie wissen wollen, welcher Auftrag zu welcher Strategie gehört. Um das zu erreichen, können Sie eine zweite magische Zahl für die zweite Strategie definieren. Dann ist es einfacher, Aufträge entsprechend der Strategie zu schließen, die sie geöffnet haben.
Aus Ihren Beiträgen und den Kommentaren im Code schließe ich, dass Sie wissen wollen, welcher Auftrag zu welcher Strategie gehört. Um das zu erreichen, können Sie eine zweite magische Zahl für die zweite Strategie definieren. Dann ist es einfacher, Aufträge entsprechend der Strategie zu schließen, die sie geöffnet haben
Wäre es nicht einfacher, 2 verschiedene Strategien in 2 separaten EAs laufen zu lassen, jede auf ihrem eigenen Chart?
RaptorUK: Wäre es nicht einfacher, 2 verschiedene Strategien in 2 separaten EAs laufen zu lassen, jede auf ihrem eigenen Chart?
Ja, für 2, 3, 4, 5... einverstanden. Aber nach den Geschichten und diese:"Ich habezu schreiben150Politiken undsiemüssenzur gleichen Zeitauf dem gleichen Graphenlaufen, undführen Siealle Strategienauf einmal. Wenn ich 150 EA gleichzeitig laufen lasse, wirdmeinPCexplodieren-denke ich." Ich denke, er plant, viele Strategien mehr in einem EA laufen zu lassen....
Für diejenigen , die meine EA immer noch nicht verstehen, schreibe eine Geschichte: D hehehe
Das Ereignis ist Kerzen - bietet verschiedene Optionen für den Kauf und Verkauf oder Schließen.
Anstatt Fernsehsendungen als Zweitfunktion zu sehen, sollten Sie sich überlegen, das Buch zu lesen und zu verstehen. ;-)
Was Sie zu erreichen versuchen, ist einfach und wird in vielen Strategien verwendet, aber Ihr Code - und Ihre Geschichten - sind verwirrend und teilweise falsch - zumindest der Code.... nicht sicher über die Geschichten.
Warum versuchen Sie nicht, vorerst nur ein Signal zu implementieren und sich auf den Code für die benötigten Funktionen zu konzentrieren? Wenn Sie einen guten Code für ein Signal haben, ist es wahrscheinlich einfach, die anderen Signale zu implementieren, und viele Funktionen sind dann bereits vorhanden.
Später könnten Sie Arrays und andere Funktionen verwenden, um den Code zu vereinfachen, aber die Vereinfachung Ihres obigen Codes sollte im Moment nicht Ihr größtes Problem sein.
Kronin Ja! Sie verstehen mich :), viele der Strategien in einem EA.
Ich muss 150 Strategien schreiben und sie müssen zur gleichen Zeit auf dem gleichen Graphen laufen und alle Strategien auf einmal ausführen . Wenn ich 150 EA gleichzeitig laufen lasse , wird mein PC explodieren - denke ich.
Danach ist es sinnlos , weil Sie nur eine Strategie EA und viele bereits innerhalb haben können .
Natürlich kann die Strategie nicht miteinander interferieren, und wenn man laufen die zweite kann auch laufen, und ich kann laufen strategie 1, und 3 und 5. und strategie (1,3,5) laufen im gleichen Moment haben.
Ich werde keine weiteren Geschichten mehr schreiben :)
Mein Code ist falsch - es ist bekannt, ich habe versucht , die beiden Strategien in einem einzigen EA zu setzen, der Code funktioniert gut , aber die Gesamtheit ist nicht gut funktionieren
IhrCode ist sehr interessant, ich werde ihn studieren, bitte geben Sie mir etwas Zeit
Hallo Freunde, nach einer langen Arbeit in Code und durch Informationen von Kronin Code ist strukturiert und funktioniert.
Code präsentiert zwei Strategien in einem einzigen EA
1.für eine kleine Kerze Kauf Szenario ist mit einem blauen Pfeil markiert , sind zwei Optionen für BUY
2. für die durchschnittliche Kerze Kauf Szenario Kerze ist mit einem roten Pfeil markiert , sind drei Optionen für BUY
Ich habe eine Situation zu , wo 1 Punkt = 1 Pip ist bequem ( das Problemzu lösen, ist für später)
Nicht verwenden Optionen , wenn (NewBar) ResetSignals () , weil ich denke, sie sind nicht die Ursache des Fehlers
Wenn Sie eine Funktion PART 2 in start() blaulöschen, wird eine Strategie funktionieren, und es funktioniert gut
Wenn Sie den Code PART1 und PART2 mit zwei Start-Strategien, aber sie werden überlappen. das ist Fehler
Könnten Sie einen Blick darauf werfen, Kronin?
Verwenden Sienicht dieOptionen if (NewBar) ResetSignals () , weil ich denke, dass sie nicht die Ursache des Fehlers sind.
Die Art und Weise, wie die Funktion Fun_NewBar() kodiert ist, lässt das nicht zu ... Sie müssen es so machen, dass sie vom Typ bool ist und einen bool-Wert zurückgibt ...
Ja , du hast Recht, gibt bool und es gibt int (bereits festgelegt) Ich sehe nicht vor. Dankeschön
Aber diese Funktion benutze ich nicht, es ist wie ein Text
Ich glaube nicht, dass dies auf Funktionen zutrifft , die mich vonzwei sich überschneidenden Strategien trennen . Ich sehe den Zusammenhang nicht . Oder vielleicht liege ich falsch?
Schön zu sehen, dass Sie einige Fortschritte gemacht haben, aber es ist noch ein langer Weg :-)
Sie müssen beheben, was RaptorUK oben angegeben hat. Das Zurücksetzen der Signale ist wichtig, sonst stoppt der EA recht bald mit dem Eröffnen neuer Trades.
Ihre Implementierung ist falsch. Wenn Sie das SignalExecuted bei jedem Tick zurücksetzen, hat es keinen Sinn. Es werden vielleicht nicht mehr Trades eröffnet, weil Sie auch die OpenOrders filtern. Da Ihre Strategie aber mehrere offene Orders zulässt, kann ich mir vorstellen, dass Sie auch einen Algorithmus zum Schließen von Orders haben wollen, so dass das SignalExecuted-Flag bei einem neuen Bar zurückgesetzt werden muss (mit Ihrer Implementierung ist es nutzlos und Sie brauchen es nicht).
Wenn ich Sie richtig verstehe, werden Sie BULL4 nicht ausführen, wenn BULL6 auch wahr ist. Oder anders ausgedrückt, die blaue Strategie nur, wenn die rote Strategie nicht gültig ist, oder die kleine Kerze nur, wenn die mittlere Kerze nicht gültig ist.
Nächste Schritte:
Die CheckForClose() Funktion hat so ziemlich die gleichen Probleme und zusätzlich keinen Filter für die magische Zahl. Auch hier könnte OrderOpenPrice(), ausgewählt aus einer Order in der Buy Count, dazu führen, dass die falsche Order geschlossen wird (ich bin mir nicht sicher, ob es tatsächlich funktioniert).
Bitte lesen Sie auch noch einmal, was Raptor auf der ersten Seite dieses Threads geschrieben hat.
Aus Ihren Beiträgen und den Kommentaren im Code schließe ich, dass Sie wissen wollen, welcher Auftrag zu welcher Strategie gehört. Um das zu erreichen, können Sie eine zweite magische Zahl für die zweite Strategie definieren. Dann ist es einfacher, Aufträge entsprechend der Strategie zu schließen, die sie geöffnet haben.
Nächste Schritte:
Aus Ihren Beiträgen und den Kommentaren im Code schließe ich, dass Sie wissen wollen, welcher Auftrag zu welcher Strategie gehört. Um das zu erreichen, können Sie eine zweite magische Zahl für die zweite Strategie definieren. Dann ist es einfacher, Aufträge entsprechend der Strategie zu schließen, die sie geöffnet haben
Wäre es nicht einfacher, 2 verschiedene Strategien in 2 separaten EAs laufen zu lassen, jede auf ihrem eigenen Chart?
Ja, für 2, 3, 4, 5... einverstanden. Aber nach den Geschichten und diese:"Ich habe zu schreiben 150 Politiken und sie müssen zur gleichen Zeit auf dem gleichen Graphen laufen, und führen Sie alle Strategien auf einmal. Wenn ich 150 EA gleichzeitig laufen lasse , wird mein PC explodieren - denke ich."
Ich denke, er plant, viele Strategien mehr in einem EA laufen zu lassen....