Wie programmiert man? - Seite 283

 

Mathmatische Erwartung Hilfe bitte

Hallo

ich scheine mich ein wenig verrannt zu haben.

Ich versuche, eine Erwartungsformel in meinem EA zu verwenden. Ich habe die Formel 1-avgwin/avgloss*system accuracy+1 und das funktioniert gut, aber ich würde gerne wissen, wie ich die Differenz zwischen der Order und dem StopLoss berechnen und anzeigen kann, z.B.

OP_SELLSTOP 1.63406

StopVerlust 1,63603

1.63406 - 1.63603 = -0.00197 Ich denke, dies muss eine positive Zahl sein.

Eine Erwartung von 1,45

Um also den TakeProfit zu berechnen, -0,00197 * 1,45 = -0,00285

TP bei OP_SELLSTOP 1,63406 - 1,63121 setzen

und andersherum für die Long-Position

Das ist alles Teil dieses Threads https://www.mql5.com/en/forum/178980 und wenn Sie einen Blick auf die Excel-Tabelle werfen, werden Sie sehen, dass ich fast am Ziel bin.

Jede Hilfe wäre großartig.

Danke Beno

 
Beno:
Hallo

Ich scheine mich bis zu einem gewissen Grad verrannt zu haben.

Ich versuche, eine Erwartungsformel in meinem EA zu verwenden. Ich habe die Formel 1-avgwin/avgloss*system accuracy+1 und das funktioniert gut, aber ich würde gerne wissen, wie ich die Differenz zwischen der Order und dem StopLoss berechnen und anzeigen kann, z.B.

OP_SELLSTOP 1.63406

StopVerlust 1,63603

1.63406 - 1.63603 = -0.00197 Ich denke, dies muss eine positive Zahl sein.

Eine Erwartung von 1,45

Um also den TakeProfit zu berechnen, -0,00197 * 1,45 = -0,00285

TP bei OP_SELLSTOP 1,63406 - 1,63121 setzen

und andersherum für die Long-Position

Das ist alles Teil dieses Threads https://www.mql5.com/en/forum/178980 und wenn Sie einen Blick auf die Excel-Tabelle werfen, werden Sie sehen, dass ich fast am Ziel bin.

Jede Hilfe wäre großartig.

Prost Beno

Der einfachste Weg ist, nicht darüber nachzudenken und zu verwenden:

double MathAbs(double value)

MathAbs - MQL4 Dokumentation

Mit freundlichen Grüßen

 

Hallo CRN

Danke für die Antwort, das ist was ich versucht habe

double PipSL = MathAbs (OrderOpenPrice() - StopLoss); Print (MathAbs (OrderOpenPrice() - StopLoss));

Ich denke, es ist richtig, aber es wird nur PipSL 15769.68328362 gedruckt

1 2011.01.04 00:00 Verkaufen Stop 1 0,01 1,54279 0,00000 0,00000 0,00 10000,00

2 2011.01.07 08:20 Verkaufen 1 0,01 1,54279 0,00000 0,00000 0,00 10000,00

3 2011.01.07 08:20 Ändern 1 0,01 1,54279 1,57712 0,00000 0,00 10000,00

4 2011.01.11 23:40 Schließen bei Stop 1 0,01 1,56045 1,57712 0,00000 -17,66 9982,34

und ich benötige die tatsächliche Differenz zwischen dem Verkauf und dem SL

 

Kann mir bitte jemand helfen?

Hallo und ein frohes Weihnachtsfest für alle.

Erstens bin ich Neuling in diesem forum.I bekam Problem mit mit Ea und kann jemand fix's es für mich? Das Problem ist, wie man diese EA für den realen Handel zu setzen und die EA nur graue Farbe auf meinem Live-Handel.

Hier der Anhang :

spielershedge_library.mqh

spielershedge_pipstar.mq4

spielershedge_ea_v2.8.1.ex4

spielershedge_divergenz_v5.1.ex4

-Obwohl es war alt ea, aber ich denke, vielleicht können wir teilen und nehmen Sie etwas, das für alle von uns profitieren.

-Ich habe gerade dies von Hedge trading spieler system abgeleitet von futures spread trading - Seite 193 @ Forex Factory ( SpielersHedge PipStar.mq4 ) und den Rest von Hedge trading spieler system abgeleitet von futures spread trading - Seite 87 @ Forex Factory

-Entschuldigung für mein schlechtes Englisch.

P/S : Ich bin sehr dankbar für Lektionen, Anleitungen, Kommentare und Kritik von Ihnen allen für meine Verbesserung. Ich glaube, je mehr wir unser Wissen geben, desto mehr gewinnen wir das Wissen.

 
Beno:
Hallo CRN

Danke für die Antwort das ist, was ich versucht habe

double PipSL = MathAbs (OrderOpenPrice() - StopLoss); Print (MathAbs (OrderOpenPrice() - StopLoss));

Ich denke, es ist richtig, aber es wird nur PipsL 15769.68328362 gedruckt

1 2011.01.04 00:00 Verkaufen Stop 1 0,01 1,54279 0,00000 0,00000 0,00 10000,00

2 2011.01.07 08:20 Verkaufen 1 0,01 1,54279 0,00000 0,00000 0,00 10000,00

3 2011.01.07 08:20 Ändern 1 0,01 1,54279 1,57712 0,00000 0,00 10000,00

4 2011.01.11 23:40 Schließen bei Stop 1 0,01 1,56045 1,57712 0,00000 -17,66 9982,34

und ich benötige die tatsächliche Differenz zwischen dem Verkauf und dem SL

Wenn Sie tatsächlich iClose(0,0,0)-OrderStopLoss() verwenden müssen.

aber wählen Sie zuerst die richtige Reihenfolge durch OrderSelect;

Mit freundlichen Grüßen

 

Zeitfilter mit CloseAll Hilfe bitte

Guten Tag

Ich habe einen Zeitfilter, der auf dem EA arbeitet, aber ich habe versucht, ein CloseAll daran zu befestigen, so dass, wenn die Zeit gleich der Close-Zeit dann CloseAll offene Positionen

extern string timefilter="Time Filter";

extern int gmtshift=1; // gmt offset of the broker

extern bool generalfilter=false; // enable time filter

extern int starthour=7; // start hour to trade after this hour

extern int startminutes=0; // minutes of the start hour

extern int endhour=21; // stop to trade after this hour

extern int endminutes=0; // minutes of the start hour

extern bool tradesunday=true; // trade on sunday

extern bool fridayfilter=false; // enable special time filter on friday

extern int fridayhour=21; // stop to trade after this hour

extern int fridayminutes=0; // minutes of the friday hour[/CODE]

[CODE]void start() {

if(generalfilter){

nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24;

if(nstarthour<10)istarthour="0"+nstarthour;

if(nstarthour>9)istarthour=nstarthour;

if(startminutes<10)istartminutes="0"+startminutes;

if(startminutes>9)istartminutes=startminutes;

tstart=StrToTime(istarthour+":"+istartminutes);

nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24;

if(endhour<10)iendhour="0"+nendhour;

if(endhour>9)iendhour=nendhour;

if(endminutes<10)iendminutes="0"+endminutes;

if(endminutes>9)iendminutes=endminutes;

tend=StrToTime(iendhour+":"+iendminutes);

}

if(fridayfilter){

nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24;

if(nfridayhour<10)ifridayhour="0"+nfridayhour;

if(nfridayhour>9)ifridayhour=nfridayhour;

if(fridayminutes<10)ifridayminutes="0"+fridayminutes;

if(fridayminutes>9)ifridayminutes=fridayminutes;

tfriday=StrToTime(ifridayhour+":"+ifridayminutes);

}

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

if (TimeCurrent() >= tend) {

for (int i=OrdersTotal()-1; i>=0; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==TradeSymbol) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), Bid, slippage, Yellow);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), Ask, slippage, Orange);

}

}

}

}

}
 

Bitte helfen Sie mir

extern int BuyStopTakeProfit=10;

extern int BuyStopSL=1000;

wie man codiert

wenn BuyStopTakeProfit den TakeProfit erreicht, alle schwebenden Aufträge löschen

bitte kann jemand helfen

 

Hilfe!!!! Bitte!!!! iCustom Funktion

Hilfe!

Ich habe alles versucht, um meinen C_EA_rev6.mq4 dazu zu bringen, den beliebigen Puffer aus dem benutzerdefinierten Indikator VSATEXTSIGNALS.mq4 aufzurufen. Ich habe die iCustom-Funktion verwendet, aber sie gibt immer 2147483647 zurück, was meines Wissens ein Fehlercode ist. Der benutzerdefinierte Indikator platziert Textsignale auf dem Diagramm, die auf Volumen-Spread-Analysetechniken basieren. Der benutzerdefinierte Indikator läuft einwandfrei, wenn ich ihn an ein Diagramm anhänge. Ich habe unzählige Stunden mit diesem Problem verbracht und jede mir bekannte Kombination ausprobiert. Für jede Hilfe wäre ich Ihnen sehr dankbar. Außerdem habe ich eine Frage: Können Sie die iCustom-Funktion für einen benutzerdefinierten Indikator verwenden, der ein Skript oder eine .dll-Datei aufruft?

Siehe Anhänge für den Code des Indikators und des EA.

Vielen Dank!

cmfxtrader

Dateien:
 
cmfxtrader:
Hilfe,

Ich habe alles versucht, um meinen C_EA_rev6.mq4 dazu zu bringen, den beliebigen Puffer aus dem benutzerdefinierten Indikator VSATEXTSIGNALS.mq4 aufzurufen. Ich habe die iCustom-Funktion verwendet, aber sie gibt immer 2147483647 zurück, was meines Wissens ein Fehlercode ist. Der benutzerdefinierte Indikator platziert Textsignale auf dem Diagramm, die auf Volumen-Spread-Analysetechniken basieren. Der benutzerdefinierte Indikator läuft einwandfrei, wenn ich ihn an ein Diagramm anhänge. Ich habe unzählige Stunden mit diesem Problem verbracht und jede mir bekannte Kombination ausprobiert. Für jede Hilfe wäre ich Ihnen sehr dankbar. Außerdem habe ich eine Frage: Können Sie die iCustom-Funktion für einen benutzerdefinierten Indikator verwenden, der ein Skript oder eine .dll-Datei aufruft?

Siehe Anhänge für den Code des Indikators und des EA.

Vielen Dank!

cmfxtrader

Hallo!

Die Sache ist die, dass während Sie versuchen, Puffer vom Indikator zu lesen, dieser Textnachrichten ausgibt, die keine Puffer sind. Deshalb erhalten Sie 2147483647 Wert, der EMPTY_VALUE nicht ein Fehler ist.

Wie auch immer, ich vermute, Sie möchten die Signale dieses Indikators automatisieren. Dafür gibt es eine einfache Lösung. Der Indikator ist so deklariert, dass er 7 Puffer hat (#property indicator_buffers 7), aber er benutzt nur 5. Indikatoren können maximal 8 Puffer benutzen. Das bedeutet, dass Sie einen weiteren zusätzlichen Puffer nur für Ihre Berechnungen deklarieren und ihn mit identifizierten Meldungen füllen können. Die Meldungsnummern finden Sie in der Funktion TextOutput. Fügen Sie einfach Nummern zu Ihrem Puffer hinzu, je nachdem, welche Meldung angezeigt wird. Wenn der Text zum Beispiel lautet: "UPTHRUST / Weakness_", dann fügen Sie 1 zu Ihrem Puffer hinzu, wenn die Nachricht PSEUDO UPTHRUST / Weakness_ lautet, dann fügen Sie 4 hinzu und so weiter. Der Index des Puffers ist derselbe wie der Wert der Variable "i".

Zu Ihrer zweiten Frage: Sie können die Funktion iCustom immer für einen Indikator (nicht für ein Skript) verwenden und die Werte lesen, wenn sie die im Indikator deklarierten Puffer füllen. Wenn es sich zum Beispiel um einen Indikator handelt, der Linien zeichnet, dann können Sie die Werte der Linien lesen - denn um etwas zu zeichnen (außer Beschriftungen), muss der Indikator Puffer füllen. Wenn der Indikator grafische Objekte erstellt (wie der, den Sie angehängt haben), dann müssen Sie: a) Werte aus grafischen Objekten lesen oder b) den Indikator neu codieren (wie ich oben vorgeschlagen habe). Es spielt keine Rolle, ob der Indikator eine DLL verwendet oder nicht - er muss nur den Puffer richtig füllen, um seine Werte aus der iCustom-Funktion zu lesen.

 
Beno:
Guten Tag

Ich habe einen Zeitfilter, der auf dem EA arbeitet, aber ich habe versucht, ein closeall zu ihm zu befestigen, so dass, wenn die Zeit gleich die schließen Zeit dann closeall offene Positionen

extern string timefilter="Time Filter";

extern int gmtshift=1; // gmt offset of the broker

extern bool generalfilter=false; // enable time filter

extern int starthour=7; // start hour to trade after this hour

extern int startminutes=0; // minutes of the start hour

extern int endhour=21; // stop to trade after this hour

extern int endminutes=0; // minutes of the start hour

extern bool tradesunday=true; // trade on sunday

extern bool fridayfilter=false; // enable special time filter on friday

extern int fridayhour=21; // stop to trade after this hour

extern int fridayminutes=0; // minutes of the friday hour[/CODE]

[CODE]void start() {

if(generalfilter){

nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24;

if(nstarthour<10)istarthour="0"+nstarthour;

if(nstarthour>9)istarthour=nstarthour;

if(startminutes<10)istartminutes="0"+startminutes;

if(startminutes>9)istartminutes=startminutes;

tstart=StrToTime(istarthour+":"+istartminutes);

nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24;

if(endhour<10)iendhour="0"+nendhour;

if(endhour>9)iendhour=nendhour;

if(endminutes<10)iendminutes="0"+endminutes;

if(endminutes>9)iendminutes=endminutes;

tend=StrToTime(iendhour+":"+iendminutes);

}

if(fridayfilter){

nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24;

if(nfridayhour<10)ifridayhour="0"+nfridayhour;

if(nfridayhour>9)ifridayhour=nfridayhour;

if(fridayminutes<10)ifridayminutes="0"+fridayminutes;

if(fridayminutes>9)ifridayminutes=fridayminutes;

tfriday=StrToTime(ifridayhour+":"+ifridayminutes);

}

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

if (TimeCurrent() >= tend) {

for (int i=OrdersTotal()-1; i>=0; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==TradeSymbol) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), Bid, slippage, Yellow);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), Ask, slippage, Orange);

}

}

}

}

}

Versuchen Sie, diesen Teil zu überprüfen:

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (Handelssonntag==falsch && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

der andere Teil des Codes könnte einfacher sein, aber er sollte funktionieren.

Wenn Sie das Skript jedoch vor dem Schließen aller Teile verlassen, wird es nicht funktionieren, und es scheint, dass das Skript dies tut.

Schauen Sie sich zum Beispiel diesen Teil an:

(fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday) return(0);

Auf Englisch heißt das: wenn es Freitag ist, und der Freitagsfilter eingeschaltet ist, und die TimeMark übergeben wurde (z.B. Endzeit ist 18.00 und es ist 18.01) dann return(0).

Es sollte heißen: wenn es Freitag ist, und der Freitagsfilter EIN ist, und die Zeitmarke CLOSE ALL übergeben wurde und (z.B. Endzeit ist 18.00 und es ist 18.01) dann return(0).