Fragen Sie! - Seite 31

 
if (FirstRun==1) {

FirstRun=0;

prevtime=Time[0];

}

if ((prevtime == Time[0]) && (CurTime()-prevtime)>MaxTradeTime) {

NewBar=0;

}

else {

prevtime

Ich habe es gefunden! Werde dies in Zukunft tun - Wir lernen mit der Hilfe von anderen, die mehr Wissen und Weisheit haben als wir in Bereichen, die wir nicht verstehen! Ich danke Ihnen sehr!

Dave <<<
 

for (int cnt1=OrdersTotal()-1;cnt1>=0;cnt1--)

OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);

if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

if(OrderOpenPrice()-Ask>=TrailingStop*Point)

{

if(OrderStopLoss()>Ask+Point*15||OrderStopLoss()==0)

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Point),Bid-(20*Point),Cyan); //Modify stop loss and take profit

}

return(0);

}

if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

if(Bid-OrderOpenPrice()>=TrailingStop*Point)

{

if(OrderStopLoss()<Bid-Point*15 ||OrderStopLoss()==0)

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Point),Ask+(20*Point),Cyan); //Modify stop loss and take profit

}

return(0);

}

return(0);

}

}

Mit dem richtigen Format jetzt, würde einer von Ihnen sehr großzügig Programmierer helfen mir dieses SL und TP Problem oben zu lösen. Zurück zu meiner ursprünglichen Anfrage. Mein Schlafprogramm deaktiviert den EA zu verschiedenen Zeiten. Der EA erstellt offene Trades vor dem Schlafmodus mit 40 - 50 Pip Stop Loss und Take Profit von 100. Kurz bevor der EA in den Schlafmodus versetzt wird, möchte ich, dass der Stop Loss für jedes offene Ticket auf 15 Pips und der Take Profit auf 25 Pips geändert wird. Der Stop-Loss soll kein Trailing-Stop sein, sondern ein harter Stop unter (Kauf) oder über (Verkauf) seinem aktuellen Handelskurs (ebenso der Take-Profit). Leihen Sie mir Ihr Fachwissen und machen Sie mir den Tag versüßt!!

 

Für Nachlaufstopps verwenden Sie die folgende Funktion. Ich denke, sie ist so geschrieben, dass man sie leicht verstehen kann. Manchmal schreiben Programmierfreaks Code, der zwar um den Bruchteil einer Millisekunde effizient ist, aber das Lesen und Debuggen verdammt schwierig macht.

void TrailingAlls(int start,int stop)

{

int profit;

double stoptrade;

double stopcal;

if(stop==0)

return;

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))

continue;

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)

{

if(OrderType()==OP_BUY)

{

profit=NormalizeDouble((Bid-OrderOpenPrice())/Point,0);

if(profit<start)

continue;

stoptrade=OrderStopLoss();

stopcal=Bid-(stop*Point);

if(stoptrade==0||(stoptrade!=0&&stopcal>stoptrade))

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Blue);

}//Long

if(OrderType()==OP_SELL)

{

profit=NormalizeDouble((OrderOpenPrice()-Ask)/Point,0);

if(profit<start)

continue;

stoptrade=OrderStopLoss();

stopcal=Ask+(stop*Point);

if(stoptrade==0||(stoptrade!=0&&stopcal<stoptrade))

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Red);

}//Shrt

}

}//for

}

Rufen Sie ihn in Ihrem Start mit folgendem auf:

TrailingAlls(TrailStartPips,TrailStopPips);

 

Maji, in meinem Code (der falsch ist). Ich möchte keine Trailing-Stops. Ich möchte nur, dass die offenen Tickets so geändert werden, dass jeder offene Kauf und Verkauf einen harten Stop Loss von 15 Pips und einen harten Take Profit von 25 Pips vom aktuellen Währungskurs hat.

Ich brauche eine Suche, um zu sehen, was offen ist, das sich auf das Währungssymbol bezieht, und dann den Stop Loss und Take Profit für jeden offenen Handel zu ändern. Das ist alles, was ich brauche.

Gestern Abend gerieten wir in eine Diskussion über Trailing-Stops - ein Missverständnis zwischen mir und Phoenix.

Bitte helfen Sie mir, diese nicht allzu schwierige Funktion auszuführen - für Sie also!

Dave <<<
 

Dave,

Ich denke, die Zutaten für diese Änderung sind in der Routine enthalten, die ich Ihnen gegeben habe.

Andernfalls müssen Sie Ihren Code posten oder mir eine E-Mail schicken, und ich werde sehen, was ich tun kann. Manchmal ist es sehr schwierig, den Code anderer zu lesen, so dass es eine zeitraubende Aufgabe sein kann. In diesem Fall werde ich meine Hände hochwerfen.

Viel Glück!

 

Beitrag #309 ist mein Code, wie es steht, in PHP.

Ich muss nur die offenen Trades auf einen harten Stop Loss von 15 und einen harten Take Profit von 25 ändern. Sollte nicht zu viel für einen Profi wie Sie, um diese Codierung zu ändern.

Dave <<
 

Dave,

Wie ich schon sagte, ist es sehr zeitaufwendig, diese Art von Bearbeitungen vorzunehmen. Ich spiele in meiner Mittagspause ein wenig herum und hier ist ein Versuch. Wenn es nicht funktioniert, sind Sie auf sich allein gestellt. Es ist nicht getestet, also...

Rufen Sie dies in Ihrem Hauptprogramm auf, kurz bevor Sie das Programm in den Ruhezustand versetzen.

Viel Glück!

void ChangeStop(int takeprofit,int stop)

{

double profit;

double stopcal;

if(stop==0)

return;

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))

continue;

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)

{

if(OrderType()==OP_BUY)

{

profit=Ask+(takeprofit*point);

stopcal=Bid-(stop*Point);

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,profit,0,Blue);

}//Long

if(OrderType()==OP_SELL)

{

profit=Bid-(takeprofit*point);

stopcal=Ask+(stop*Point);

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,profit,0,Red);

}//Shrt

}

}//for

}

 

Wo findet die Änderung in diesem Fall statt? Der ursprüngliche Stop-Loss lag bei 40 und der Take-Profit bei 100. Im Rahmen des Sleep-Modus wird der Stop-Loss für alle bestehenden offenen Aufträge auf 15 und der Take-Profit für alle bestehenden offenen Aufträge auf 25 geändert.

Offene Auftragstickets: Vor dem Ruhemodus.

Vor dem Ruhemodus: Stop Loss - 40 Vor dem Ruhemodus: Take Profit - 100 Nach dem Ruhemodus: Stop Loss Modifikation - 15 Nach dem Ruhemodus: Take Profit Modifikation - 25

Ich initialisiere keine Auftragseinstellungen, sondern ändere bestehende Aufträge, die bereits platziert und noch aktiv sind.

Trotzdem vielen Dank für Ihre Hilfe! Warum scheint etwas so Einfaches so schwierig zu sein?

Dave <<
 

Dave,

Das ist nicht schwierig. Sie müssen MQ ein wenig mehr studieren. Sehen Sie sich den von mir bereitgestellten Code an. Die Parameter, Stop und Takeprofit sollten die Zahlen sein, die Sie verwenden wollen.

Es ist alles da, Sie müssen nur herausfinden, wie Sie es verwenden können.

 

Ich werfe die Flinte ins Korn. Ich bekomme Fehler. Ich werde das benutzen, was Phoenix zur Verfügung stellt, weil es bis zu einem gewissen Punkt funktioniert, mit dem ich leben kann. Wenn es in den Vereinigten Staaten eine Schule für diese Sprache gäbe, die sie lernen könnte, würde das mein Leben sicher einfacher machen. Leider gibt es aber keine.

Danke für den Beitrag, sowohl Maji als auch Phoenix!

Dave <<<