Wie programmiert man? - Seite 111

 
MrPip:
Seien Sie vorsichtig bei der Verwendung von OrderComment() zur Identifizierung von Trades. Manchmal fügt der Broker Zeichen zum Kommentar hinzu.

Am besten ist es, Folgendes zu verwenden

if (StringFind(OrderComment(), UserComment, 0) > 0)

{

// Bestellung identifiziert durch UserComment in OrderComment gefunden

}

anstelle von

if (Bestellkommentar() == Benutzerkommentar)

{

// Auftrag könnte durch UserComment identifiziert werden

// wenn OrderComment nicht vom Broker geändert wurde

}

Robert

Genau ... Und auch, manchmal der ursprüngliche Kommentar in der EA codiert ist zu lang und wird von der Plattform troncated werden (nicht sicher, ob der Rest des Kommentars ist in der "Speicher", aber es ist nicht in Kommentar-Spalte angezeigt).

FerruFx

 

brauche Hilfe bei meinem EA

Hallo,

ich arbeite an einem EA, der gleichzeitig Long- und Short-Positionen eröffnet, und ich stehe vor diesem Problem... wenn beide Arten von Positionen offen sind, sagen wir, die erste ist Short und die zweite ist Long... wird der EA die Long-Position nicht schließen, wenn die Short-Position noch offen ist, er wird warten, bis die Short-Position geschlossen ist, und dann die Long-Position schließen, wenn die Bedingungen erfüllt sind, und umgekehrt. Hier ist der Teil des EA, wo er die offenen Positionen schließen sollte:

//---- Offene Positionen schließen

for(int cnt=0; cnt<gesamte; cnt++)

{

OrderSelect(cnt, SELECT_BY_POS);

{

//-- Long schließen

if(OrderSymbol() == Symbol() && OrderType()==OP_BUY && rsi1>75 && rsi<75)

{

OrderClose(OrderTicket(),OrderLots(),Bid,5,Green);

LotL=Lot;

}

//-- Short schließen

if(OrderSymbol() == Symbol() && OrderType()==OP_SELL && rsi125)

{

OrderClose(OrderTicket(),OrderLots(),Ask,5,Red);

LotS=Lot;

}

}

}

*wobei rsi1 der vorherige rsi und rsi der aktuelle Stand ist

*LotL & LotS ist ein Multiplikator des ursprünglichen Lots, ich habe es so eingestellt, dass maximal 3 Positionen pro Seite geöffnet werden, so dass beim Schließen einer Art von offenen Positionen, LotL & LotS auf die ursprüngliche Größe zurückgesetzt werden

der EA funktioniert wie beabsichtigt, wenn er Positionen eröffnet, aber das Problem ist mit dem Schließen von offenen Positionen, ich denke, dass der EA im Loop-Teil nicht alle offenen Positionen liest, sondern nur die erste... jede Hilfe, um dies zu beheben, wird wirklich geschätzt!

Prost!

pete

 

Ich versuche, die Funktion "Pips to activate Trailing stop" hinzuzufügen. Was ich geändert habe, ist in rot. Was muss noch hinzugefügt werden?

extern string Remark1 = "== Main Settings ==";

extern int MagicNumber = 54321;

extern bool SignalMail = False;

extern bool EachTickMode = true;

extern double Lots = 4;

extern int Slippage = 2;

extern bool UseStopLoss = false;

extern int StopLoss = 100;

extern bool UseTakeProfit = false;

extern int TakeProfit = 15;

extern bool UseTrailingStop = true;

extern int TrailingStop = 45;

extern double Pips_Activate_TS = 5;

extern bool MoveStopOnce = False;

extern int MoveStopWhenPrice = 50;

extern int MoveStopTo = 1;

extern int MaxConcurrentTrades = 2;

//Version 2.01

int BarCount;

int Current;

bool TickCheck = False;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init() {

BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit() {

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

int Order = SIGNAL_NONE;

int Total, Ticket;

double StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;

Total = OrdersTotal();

Order = SIGNAL_NONE;

//+------------------------------------------------------------------+

//| Variable Begin |

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| Variable End |

//+------------------------------------------------------------------+

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

//+------------------------------------------------------------------+

//| Signal Begin(Exit Buy) |

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| Signal End(Exit Buy) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(Bid - OrderOpenPrice() >= Point * MoveStopWhenPrice) {

if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) {

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

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

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

//+------------------------------------------------------------------+

//| Signal End(Exit Sell) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(OrderOpenPrice() - Ask >= Point * MoveStopWhenPrice) {

if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) {

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

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

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

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

//+------------------------------------------------------------------+

//| Signal Begin(Entry) |

//+------------------------------------------------------------------+

if(Open[0] > Open[0+1] &&

Open[0+1] >= Open[0+2] &&

Open[0+2]>= Open[0+3] &&

Open[0+3] >= Open[0+4] &&

Open[0+4] >= Open[0+5] &&

Open[0+5] >= Open[0+6]) Order = SIGNAL_SELL;

if(Open[0] < Open[0+1] &&

Open[0+1] <= Open[0+2] &&

Open[0+2]<= Open[0+3] &&

Open[0+3] <= Open[0+4] &&

Open[0+4] <= Open[0+5] &&

Open[0+5] <= Open[0+6]) Order = SIGNAL_BUY;

//+------------------------------------------------------------------+

//| Signal End |

//+------------------------------------------------------------------+

//Buy

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(DecideToOpenTrade(OP_BUY) && TradeSlotsAvailable()) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Sell

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(DecideToOpenTrade(OP_SELL) && TradeSlotsAvailable()) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("SELL order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Error opening SELL order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

 
 
mifiglo:
Hallo liebe Trader,

Ich habe dieses kleine Problem, einen Expert Advisor aus einem benutzerdefinierten Indikator zu entwickeln. Ich habe die Funktion "iCustom" ausprobiert, aber mein Indikator gibt immer denselben Wert zurück.

Er gibt so etwas wie 21473 zurück..., ungefähr so

Ich möchte, dass der EA in der Lage ist, zu erkennen, wann die Kauf- und Verkaufspfeile generiert werden, und dass er die entsprechende Handelsaktion durchführt (d. h. kaufen, wenn der Indikator nach oben zeigt, und verkaufen, wenn er nach unten zeigt).

Hier ist der Code des Indikators Ich würde es so sehr schätzen, wenn jemand mit einer Lösung so schnell wie möglich kommen kann.

Bitte posten Sie auch die Codezeilen mit Ihrer iCustom() Funktion

FerruFx

 

Tut mir leid, das ist alles, was ich habe...

 
 

Rsi Ea

Dies ist mein erster EA. Es verwendet 2 rsi's Kreuzung in 3 Zeitrahmen. Ich habe ein Problem mit der ea unter Trades gegen die Kreuze. Kaufen, wenn es eigentlich verkaufen soll, verkaufen, wenn es kaufen soll. Könnte sich bitte jemand den Code ansehen und mir sagen, wo ich einen Fehler gemacht habe. Ich habe nicht in der Lage gewesen, um etwas falsch zu sehen.

Ich habe die ea und ein Bild des Problems beigefügt.

Dateien:
 

Brauche Hilfe für EA-Code!

Hallo zusammen,

Wie Sie wissen, ist der Devisenmarkt 24 Stunden, ich bin nicht bequem, über Nacht zu handeln, ohne vor dem PC zu sitzen. Also denke ich, der beste Weg ist Programm, um den Handel zu schützen, wenn der Preis bewegt sich in meine bevorzugte Richtung. Wenn ich z.B. insgesamt 5 Lots eröffnet habe und der Gewinn über 50 Pips liegt, wird der Stop-Loss automatisch auf Break-Even verschoben. Wenn der Gewinn über 100 Pips liegt, verschiebt es den Stop-Loss auf 30 Pips. Wenn der Gewinn über 200 Pips liegt, verschiebt es den Stop-Loss auf 50 Pips. usw.

Ich habe versucht, mich selbst zu programmieren. Aber es funktioniert nicht, wenn ich es in mein Diagramm ziehen und setzen Sie es Handel live. Könnte mir jemand helfen, einen Blick auf meinen Code zu werfen und ihn zu korrigieren? Vielen Dank!

#property copyright "x li"

#property link ""

#property show_confirm

//---- Eingabeparameter

extern int ziel1 =50;

extern int ziel2 =100;

extern int ziel3 =150;

extern int ziel4 =200;

extern int ziel5 =300;

extern int protect1 =0;

extern int protect2 =5;

extern int protect3 =50;

extern int protect4 =100;

//+-----------------------------------------------------------------------------+

//| Skript "stoploss verschieben auf protect(50->0;100->5;150->50;200->50;300->100)" |

//+-----------------------------------------------------------------------------+

int start()

{

bool Ergebnis;

double stop_loss,point,EntryPrice,profit;

int cmd,total,error,i;

//----

total=OrdersTotal();

Punkt=MarketInfo(Symbol(),MODE_POINT);

//----

for(i=0; i<total; i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

cmd=OrderType();

EntryPrice=OrderOpenPrice();

//---- Kaufaufträge werden berücksichtigt

if(cmd==OP_BUY)

{

profit=Bid-EntryPrice;

if(Gewinn>Ziel1*Punkt && Gewinn<Ziel2*Punkt)

{

stop_loss=Einstiegspreis+Schutz1*Punkt;

result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(Gewinn>Ziel2*Punkt && Gewinn<Ziel3*Punkt)

{

stop_loss=Einstiegskurs+Schutz2*Punkt;

result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(Gewinn>Ziel3*Punkt && Gewinn<Ziel4*Punkt)

{

stop_loss=Einstiegskurs+Schutz3*Punkt;

result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(Gewinn>Ziel4*Punkt && Gewinn<Ziel5*Punkt)

{

stop_loss=Einstiegskurs+Schutz3*Punkt;

result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(Gewinn>Ziel5*Punkt)

{

stop_loss=Einstiegskurs+Schutz4*Punkt;

Ergebnis=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

}

//---- Verkaufsaufträge werden berücksichtigt

if(cmd==OP_SELL)

{

Gewinn=Einstiegskurs-Ask;

if(profit>target1*point && profit<target2*point)

{

stop_loss=EntryPrice-protect1*point;

result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(Gewinn>Ziel2*Punkt && Gewinn<Ziel3*Punkt)

{

stop_loss=Einstiegspreis-protect2*Punkt;

result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(Gewinn>Ziel3*Punkt && Gewinn<Ziel4*Punkt)

{

stop_loss=Einstiegspreis-protect3*Punkt;

result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(Gewinn>Ziel4*Punkt && Gewinn<Ziel5*Punkt)

{

stop_loss=Einstiegspreis-protect3*Punkt;

result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(Gewinn>Ziel5*Punkt)

{

stop_loss=Einstiegskurs-Schutz4*Punkt;

Ergebnis=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

}

}

else { Print( "Fehler bei Orderauswahl ", GetLastError()); break; }

}

//----

return(0);

}

//+------------------------------------------------------------------+

 

Rsi Ea

Ich verstehe nicht, warum Sie dieselbe Variable zum Eröffnen und Schließen von Geschäften verwenden, aber es kann funktionieren.

Das könnte das Problem sein:

"Order" ist eine globale Variable. Am Ende jedes Durchlaufs der Start-Funktion wird sie auf den zuletzt zugewiesenen Wert gesetzt, und dieser Wert wird für den Beginn des nächsten Durchlaufs verwendet. Wenn Sie sie lokal machen (innerhalb von Start verschieben), kann das Problem behoben werden. Andernfalls müssen Sie ihn nach der letzten Verwendung zurücksetzen.

Gute Jagd,

Big Be

Grund der Beschwerde: