Wie programmiert man? - Seite 145

 

Hallo Roger09,

nochmals vielen Dank für deine Hilfe. Mein Ziel ist es, ein Skript zu verwenden, um meinen Stop-Loss auf Break-Even plus x Pips in einem Kaufhandel oder Break-Even minus x Pips in einem Verkaufshandel zu verschieben. Ich setze eine Tastenkombination für das Skript, damit ich schnell einen Gewinn einfahren kann, wenn sich der Handel zu meinen Gunsten entwickelt. Ich weiß, dass einige ES'a diese Funktion haben, aber ich ziehe es vor, ein Skript zu verwenden, damit ich es manuell machen kann.

 

Progrmming un stop buy und stop sell

Hallo,

Ich benutze einen EA mit CCI.

Mein Programm setzen einen Kauf, wenn der vorangegangene bar ist über CCI>100, aber ich will kaufen 5 Pips höher der letzten bar.

Ich möchte das gleiche mit dem Stop-Sell-Order (5 Pips unter dem letzten niedrig)

Hier mein EA, können Sie mir helfen

Danke

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

//| Diese MQL wird von Expert Advisor Builder generiert.

//| Expert Advisor Builder für MetaTrader 4 |

//| |

/+------------------- DIESE KOPFZEILE NICHT ENTFERNEN --------------------+

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder"

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = False;

extern double Lots = 1.0;

extern int Slippage = 30;

extern bool UseStopLoss = True;

extern int StopLoss = 200;

extern bool UseTakeProfit = True;

extern int TakeProfit = 600;

extern bool UseTrailingStop = True;

extern int TrailingStop = 250;

int BarCount;

int Aktuell;

bool TickCheck = False;

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

//| Experten-Initialisierungsfunktion |

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

int init() {

BarCount = Bars;

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

return(0);

}

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

//| Experten-Deinitialisierungsfunktion |

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

int deinit() {

return(0);

}

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

//| Experten-Startfunktion |

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

int start() {

int Auftrag = SIGNAL_NONE;

int Gesamt, Ticket;

double StopLossLevel, TakeProfitLevel;

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

Total = OrdersTotal();

Auftrag = SIGNAL_NONE;

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

//| Variable Begin |

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

double Var1 = iCCI(NULL, 0, 20, PRICE_CLOSE, Current + 0);

double Var2 = iCCI(NULL, 0, 20, PRICE_CLOSE, Current + 1);

double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Buy2_1 = Var1 ;

double Buy2_2 = 100;

double Buy3_1 = Var2 ;

double Buy3_2 = 100;

double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Sell2_1 = Var1 ;

double Sell2_2 = - 100;

double Sell3_1 = Var2 ;

double Sell3_2 = - 100;

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

//| Variable Ende |

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

//Position prüfen

bool IsTrade = False;

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

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

IsTrade = True;

if(OrderType() == OP_BUY) {

//Schließen

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

//| Signal Begin(Exit Buy) |

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

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

//| Signal Ende(Beenden Kaufen) |

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

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;

fortfahren;

}

//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;

fortfahren;

}

}

}

} sonst {

//Schließen

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

//| Signal Begin(Exit Sell) |

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

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

//| 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;

weiter;

}

//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;

fortfahren;

}

}

}

}

}

}

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

//| Signal Begin(Entry) |

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

if (Buy1_1 > Buy1_2 && Buy2_1 > Buy2_2 && Buy3_1 <= Buy3_2) Order = SIGNAL_BUY;

if (Sell1_1 < Sell1_2 && Sell2_1 Sell3_2) Order = SIGNAL_SELL;

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

//| Signal Ende |

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

//Kaufen

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

if(!IsTrade) {

//Prüfen der freien Marge

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

Print("Wir haben kein Geld. Freie Marge = ", AccountFreeMargin());

return(0);

}

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

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; sonst 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("Fehler beim Öffnen der BUY-Order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Verkaufen

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

if(!IsTrade) {

//Prüfen der freien Marge

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

Print("Wir haben kein Geld. Freie Marge = ", AccountFreeMargin());

return(0);

}

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

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; sonst 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("Fehler beim Öffnen der SELL-Order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

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

 
tk748:
Hallo Roger09, nochmals vielen Dank für deine Hilfe. Mein Ziel ist es, ein Skript zu verwenden, um meinen Stop-Loss auf Break-Even plus x Pips in einem Kaufhandel oder Break-Even minus x Pips in einem Verkaufshandel zu verschieben. Ich setze eine Tastenkombination für das Skript, damit ich schnell einen Gewinn einfahren kann, wenn sich der Handel zu meinen Gunsten entwickelt. Ich weiß, dass einige ES'a diese Funktion haben, aber ich ziehe es vor, ein Skript zu verwenden, damit ich es manuell machen kann.

Wenn Sie Ihren Stopp nur einmal setzen müssen, verwenden Sie diesen EA-Code

extern int pips=10;//

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

//| Skript Programmstartfunktion |

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

int start()

{

//----

int ot = AufträgeSumme();

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

{

int o = OrderSelect(i, SELECT_BY_POS);

if (OrderSymbol() == Symbol()&&OrderType() <2)

{

double sl = 0;

if (OrderType() == OP_BUY&& OrderStopLoss() =pips*Point)

sl = OrderOpenPrice() +pips*Point;

if (OrderType() == OP_SELL && (OrderStopLoss() > OrderOpenPrice()||OrderStopLoss()==0)

&&OrderOpenPrice()-Ask>=pips*Point)

sl = OrderOpenPrice() -pips*Point;

if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0))

Print("Fehler_Modifizieren - ",GetLastError());

}

}

//----

return(0);

}

 
cgassfr67:
Hallo,

Ich benutze einen EA mit CCI.

Mein Programm setzen einen Kauf, wenn der vorangegangene bar ist über CCI>100, aber ich will kaufen 5 Pips höher der letzten bar.

Ich möchte das gleiche mit dem Stop verkaufen ordre (5 Pips unter dem letzten niedrig)

Hier mein EA, können Sie mir helfen

Danke

Ersetzen Sie

double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Buy2_1 = Var1 ;

double Buy2_2 = 100;

double Buy3_1 = Var2 ;

double Buy3_2 = 100;

double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Sell2_1 = Var1 ;

double Sell2_2 = - 100;

double Sell3_1 = Var2 ;

double Sell3_2 = - 100;[/CODE]

To

[CODE]

double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Buy2_1 = Var1 ;

double Buy2_2 = 105;

double Buy3_1 = Var2 ;

double Buy3_2 = 105;

double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Sell2_1 = Var1 ;

double Sell2_2 = - 105;

double Sell3_1 = Var2 ;

double Sell3_2 = - 105;
 
Roger09:
Ersetzen Sie
double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Buy2_1 = Var1 ;

double Buy2_2 = 100;

double Buy3_1 = Var2 ;

double Buy3_2 = 100;

double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Sell2_1 = Var1 ;

double Sell2_2 = - 100;

double Sell3_1 = Var2 ;

double Sell3_2 = - 100;[/CODE]

To

[CODE]

double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Buy2_1 = Var1 ;

double Buy2_2 = 105;

double Buy3_1 = Var2 ;

double Buy3_2 = 105;

double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Sell2_1 = Var1 ;

double Sell2_2 = - 105;

double Sell3_1 = Var2 ;

double Sell3_2 = - 105;

Ja, aber mit diesem Code, würde ich bei der Eröffnung der nächsten Bar eingeben, und ich würde sicher sein, dass die nächste Bar steigen wird, so dass ein Muss mit 5 Pips über dem letzten hoch kaufen

 

Handel zur vollen Stunde

Hallo- Im suchen, um meine EA auf der Grundlage der Zeit des Tages aufrufen. vielleicht 5am und 5pm, oder alle 30 Minuten, etc.

wie kann ich das tun?

Vielen Dank für jede Hilfe.

Kevin

 

Vielleicht hilft Ihnen das:

if((TimeHour(TimeLocal( ) )!=5&&TimeMinute(TimeLocal( ) )!=0)||(TimeHour(TimeLocal( ) )!=17

&&TimeMinute(TimeLocal( ) )!=0))return();

Setzen Sie es an den Anfang von start().

 

Könnte sich das bitte jemand ansehen und mir sagen, warum es nicht funktioniert.

Ich möchte es als Kommentar verwenden.

double AvgWin()

{

double CountTrades = 0;

double CountPips = 0;

for(int Ticket=0;Ticket<OrdersHistoryTotal();Ticket++)

{

OrderSelect(Ticket,SELECT_BY_TICKET,MODE_HISTORY);

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

{

//------>>>>

if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() >= 0)

CountPips++;

}

if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() >= 0)

CountPips++;

}

}

}

if(CountPips < 0)

return(MathRound(CountPips/CountTrades)*10);

sonst

Print("Real Time AvgWin nicht verfügbar");

return(mAvgWin);

}

 

Ersetzen Sie zunächst

SELECT_BY_TICKET zu SELECT_BY_POS

Zweitens, CountPips ist immer größer als 0.

 
Roger09:
Erstens: Ersetzen

SELECT_BY_TICKET zu SELECT_BY_POS

Zweitens, CountPips immer größer als 0.

Ist dies in Ordnung

int AvgWin()

{

int CountTrades = 0;

int CountPips = 0;

for(int Ticket=0;Ticket<OrdersHistoryTotal();Ticket++)

{

OrderSelect(Ticket,SELECT_BY_POS,MODE_HISTORY);

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

{

//------>>>>

if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() >= 0)

CountPips++;

}

if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() >= 0)

CountPips++;

}

}

}

if(CountPips > 0)

return(MathRound(CountPips/CountTrades)*10);

sonst

Print("Real Time AvgWin nicht verfügbar");

return(mAvgWin);

}

Grund der Beschwerde: