Hilfe bei der Codierung - Seite 157

 
mladen:
Christoff

Auf diese Weise sollte die Variable Decimals OK sein.

Prüfen Sie auf jeden Fall, welchen Fehlercode Sie im Falle eines erfolglosen (teilweisen) Orderschlusses erhalten

Mladen,

vielen Dank für den Hinweis.

Das Problem ist, dass es keine Fehlermeldung gibt. Wenn es nicht funktioniert, scheint es, als ob die Funktion PartialTP gar nicht aufgerufen wurde. In anderen Fällen - normalerweise bei den ersten Aufträgen nach dem Neustart des EA - funktioniert es gut.

Ich dachte, dass vielleicht eine der Variablen nicht auf den Wert Null zurückgesetzt wird, oder etwas in der Art, aber ich kann den Fehler immer noch nicht finden.

 
chrisstoff:
Mladen,

Vielen Dank für den Hinweis.

Das Problem ist, dass es keine Fehlermeldung gibt. Wenn es nicht funktioniert, scheint es, als ob die Funktion PartialTP gar nicht aufgerufen wurde. Zu anderen Zeiten - normalerweise bei den ersten Aufträgen nach dem Neustart des EA - funktioniert es gut.

Ich dachte, dass vielleicht eine der Variablen nicht auf den Wert Null zurückgeht, oder so etwas in der Art, aber ich kann den Fehler immer noch nicht finden.

chrisstoff

Sorry, aber mit einem partiellen Code kann ich nicht weiterhelfen

Was du beschreibst, bedeutet, dass der Code debuggt werden muss - und das geht nur, indem man ihn unter Verwendung von Kontrollpunkten ausführt.

 
mladen:
chrisstoff

Sorry, aber mit einem unvollständigen Code kann ich nicht mehr helfen

Was du beschreibst, bedeutet, dass es notwendig ist, den Code zu debuggen - und das kann nur geschehen, indem man ihn unter Verwendung von Kontrollpunkten ausführt

Vielen Dank, Mladen.

Es ist beruhigend, dass Sie keine Probleme in dem Code gesehen haben.

Ich denke, dass alle relevanten Teile des Codes gepostet wurden, also muss ich den Fehler woanders finden.

 
mladen:
hock87

Bitte lesen Sie den Beitrag über Ihrem Beitrag, um eine Lösung für dieses Problem zu finden

Der vollständige Code dafür ist der folgende:

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

Malden,

Wie k odiere ich, wenn ich Lots in Höhe eines Prozentsatzes meines Kontostands eröffnen möchte ?

Beispiel:

Mein Kontostand beträgt $500,

ich möchte eine Losgröße von 5% eröffnen, dann werden automatisch die $0,25 Lose gezählt und eröffnet, TP=10 SL=20.

Wie kann ich das codieren?

Danke!

 
hock87:
Malden,

Wie kodiere ich eine Losgröße, die einem bestimmten Prozentsatz meines Kontostands entspricht?

Beispiel:

Mein Kontostand beträgt $500,

ich möchte eine Losgröße von 5% eröffnen, dann werden automatisch die $0,25 Lose gezählt und eröffnet, TP=10 SL=20.

Wie kann ich das codieren?

Danke.

Sie können eine Funktion wie diese für das verwenden:

double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

PS: stopLoss muss bereits in Pips/Points an die Funktion übergeben werden (nicht in Integer-Werten)

 
mladen:
Sie können eine Funktion wie diese dafür verwenden:
double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

PS: stopLoss muss der Funktion bereits in Pips/Points übergeben werden (nicht in Integerwerten)

Danke, Mladen.

Aber ich schaffe es nicht, den Code mit dem Code für die Kaufbestellung zu verbinden.

Es erscheinen viele Fehler und Warnungen.

Wie kann ich ihn zusammensetzen?

Danke!

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
 
hock87:
Danke, Mladen.

Aber ich schaffe es nicht, den Code für den Kaufauftrag zusammenzusetzen.

Es erscheinen viele Fehler und Warnungen.

Wie kann ich ihn zusammensetzen?

Danke!

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}

Versuchen Sie es so (ich habe es jetzt getestet und es funktioniert):

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int init() { return(0); }

int deinit() { return(0); }

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point*MathPow(10,Digits%2));

prof=(Ask+profsize*Point*MathPow(10,Digits%2));

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
Dateien:
_test_1.mq4  1 kb
test_1.gif  78 kb
 

liebe mladen und mr. tools pls,

ist es möglich, ein ea zu erstellen, das Signale basierend auf bestimmten Bedingungen gibt, wie die Signale von 3 oder 4 Indikatoren, die vordefinierte Bedingungen erfüllen.

z.B.

ich möchte, dass das ea ein Kaufsignal hwen:

ema 8 über ema 21

qqe über 0

nicht lag ma ist grün

und Kerze ist über der ichimoku Wolke

der EA soll keine Trades eröffnen, sondern nur das Signal geben, wenn die angegebenen Bedingungen erfüllt sind

 

Vielen Dank, Mladen.

Ich habe es versucht.

aber es öffnet immer noch die Lose mit $0.1

Ich möchteLosgrößen zu einem Prozentsatz meines Kontostandes öffnen.

EX:Kontostand haben $500.

Öffnen Sie eine Losgröße mit 5%, dann zählt es automatisch und öffnet die $0.25 Lose, TP=10 SL=20.

LotGrößeSlot1 = Kontostand() * (RisikoSlot1 / 100)

LosGrößeSlot1 = $500*(5%/100)

LosGrößeSlot1 = $ 0,25

Dann werden automatisch 0,25 $ Lots eröffnet und TP=10 SL=20.

Wie kann man das erstellen?

Danke!

 
hock87:
Vielen Dank, Mladen.

Ich habe es versucht.

aber es öffnet immer noch die Lots mit $0.1

Ich möchteLosgrößenzueinem Prozentsatz meines Kontostandesöffnen.

EX:Kontostand haben $500.

Öffnen Sie eine Losgröße mit 5%, dann zählt es automatisch und öffnet die $0.25 Lots, TP=10 SL=20.

LotSizeSlot1 = Kontostand() * (RiskSlot1 / 100)

LosGrößeSlot1 = $500*(5%/100)

LosGrößeSlot1 = $ 0,25

Dann werden automatisch $ 0,25 Lots geöffnet und TP=10 SL=20.

Wie kann man das erstellen?

Danke.

Wie in dem beigefügten Beispiel

Dateien:
_test_2.mq4  2 kb