Fragen Sie! - Seite 17

 

Hallo, Programmierer!

Aaragorn und ich haben in letzter Zeit an diesem Ea gearbeitet

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = False;

extern double Lots = 0.1;

extern int Slippage = 3;

extern bool StopLossMode = False;

extern int StopLoss = 5;

extern bool TakeProfitMode = True;

extern int TakeProfit = 50;

extern bool TrailingStopMode = False;

extern int TrailingStop = 5;

extern int MaxOpenTrade = 1;

extern int Shift = 2;

extern double Slope = 2;

extern int EnterEMA = 38;

extern int ExitEMA = 1500;

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

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 |

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

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

double Buy1_2 = iClose(NULL, 0, Current + 0);

double Buy2_1 = iMA(NULL, 0, EnterEMA, 0, MODE_EMA, PRICE_CLOSE, Current + Shift);

double Buy2_2 = iClose(NULL, 0, Current + Shift);

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

double Sell1_2 = iClose(NULL, 0, Current + 0);

double Sell2_1 = iMA(NULL, 0, EnterEMA, 0, MODE_EMA, PRICE_CLOSE, Current + Shift);

double Sell2_2 = iClose(NULL, 0, Current + Shift);

double CloseBuy1_1 = iClose(NULL, 0, Current + 0);

double CloseBuy1_2 = iMA(NULL, 0, ExitEMA, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double CloseSell1_1 = iClose(NULL, 0, Current + 0);

double CloseSell1_2 = iMA(NULL, 0, ExitEMA, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

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

//| Variable End |

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

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) {

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

//| Signal Begin(Exit Buy) |

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

if (Sell1_1 < CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

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

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

}

if(TrailingStopMode && 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 {

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

//| Signal Begin(Exit Sell) |

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

if (Sell1_1 > CloseBuy1_2) Order = SIGNAL_CLOSESELL;

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

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

}

if(TrailingStopMode && 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 logics) |

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

if (Buy1_1 < Buy1_2 && Buy2_1 Buy2_1*/) Order = SIGNAL_BUY;

if (Sell1_1 > Sell1_2 && Sell2_1 > Sell2_2/* && Sell1_1 + Slope*Point < Sell2_1*/) Order = SIGNAL_SELL;

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

//| Signal End |

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

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

IsTrade = False;//---allows multiple orders to open

if(!IsTrade) {

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

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

return(0);

}

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

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

if(OrdersTotal() < MaxOpenTrade)

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

}

}

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

IsTrade = False;//---allows multiple orders to open

if(!IsTrade) {

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

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

return(0);

}

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

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

if(OrdersTotal() < MaxOpenTrade)

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

}

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

"Shift" ist die Anzahl der Perioden, die man zurückblickt, und "Slope" ist die Anzahl der Pips, um die sich der "EnterEMA" im "Shift" nach oben bewegt hat. Wir sind immer noch die Strategie zu perfektionieren, und ich habe mich gefragt, ob Sie mir mit etwas helfen könnte.

 

Dies ist, um einige Kontext zu geben, bevor ich auf den Code, den ich eine Frage zu haben...

#property copyright "Aaragorn"

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

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = False;

extern double Lots = 0.35;

extern int Slippage = 3;

extern bool StopLossMode = False;

extern int StopLoss = 5;

extern bool TakeProfitMode = True;

extern int TakeProfit = 42;

extern bool TrailingStopMode = False;

extern int TrailingStop = 10;

extern int MaxOpenTrade = 1;

extern int Shift = 3;

//extern double Slope = 2;

extern int EntLongEMA = 46;

extern int EntShortEMA = 1;

extern int ExitEMA = 52;

extern int TrendEMA = 150;

//+-----------close based on not triggering trailing stop in allotted time----------------+

extern int MonitorInMinutes = 60; // minutes after open to check state of trade

extern int ThresholdMove = 1; // if after that time we don't have +'x' pips we will exit

extern int MinsMultiplier = 90; // multiplies the MonitorInMinutes to make minutes (if 'x'=60) into hours

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

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 |

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

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

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

double Buy2_1 = iMA(NULL, 0, EntLongEMA, 0, MODE_EMA, PRICE_CLOSE, Current + Shift);

double Buy2_2 = iMA(NULL, 0, EntShortEMA, 0, MODE_EMA, PRICE_CLOSE, Current + Shift);

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

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

double Sell2_1 = iMA(NULL, 0, EntLongEMA, 0, MODE_EMA, PRICE_CLOSE, Current + Shift);

double Sell2_2 = iMA(NULL, 0, EntShortEMA, 0, MODE_EMA, PRICE_CLOSE, Current + Shift);

double CloseBuy1_1 = iMA(NULL, 0, EntShortEMA, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double CloseBuy1_2 = iMA(NULL, 0, ExitEMA, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double CloseSell1_1 = iMA(NULL, 0, EntShortEMA, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double CloseSell1_2 = iMA(NULL, 0, ExitEMA, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double C_trendsetter = iMA(NULL, 0, TrendEMA, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double S_trendsetter = iMA(NULL, 0, TrendEMA, 0, MODE_EMA, PRICE_CLOSE, Current + Shift);

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

//| 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()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Signal Begin(Exit Buy)Closing logic for long positions |

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

// if (Buy1_1 <= C_trendsetter) Order = SIGNAL_CLOSEBUY;

if (Buy1_1 <= C_trendsetter) StopLossMode = True;

if (Buy1_1 <= CloseBuy1_2) CloseOrder();

if (Buy1_1 <= CloseBuy1_2) TrailingStopMode = True;

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

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

}

//Trailing stop

if(TrailingStopMode && 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;

TrailingStopMode = False; //resets mode after each order

StopLossMode = False; //resets mode after each order

continue;

}

}

}

} else {

//Close

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

//| Signal Begin(Exit Sell)Closing logic for short positions |

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

// if (Buy1_1 >= C_trendsetter) Order = SIGNAL_CLOSEBUY;

if (Buy1_1 >= C_trendsetter) StopLossMode = True;

if (Sell1_1 >= CloseSell1_2) CloseOrder();

if (Sell1_1 >= CloseSell1_2) TrailingStopMode = True;

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

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

}

//Trailing stop

if(TrailingStopMode && 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;

TrailingStopMode = False; //resets mode after each order

StopLossMode = False; //resets mode after each order

continue;

}

}

}

}

}

}[/PHP]

I am working on the exit logics... This is the buy.closing...

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

//| Signal Begin(Exit Buy)Closing logic for long positions |

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

if (Buy1_1 <= C_trendsetter) Order = SIGNAL_CLOSEBUY;

// if (Buy1_1 <= C_trendsetter) StopLossMode = True;

if (Buy1_1 <= CloseBuy1_2) CloseOrder();

if (Buy1_1 <= CloseBuy1_2) TrailingStopMode = True;

When I turn on the close buy condition it does in fact close the trade.

see attached.

[PHP]//+------------------------------------------------------------------+

//| Signal Begin(Exit Buy)Closing logic for long positions |

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

// if (Buy1_1 <= C_trendsetter) Order = SIGNAL_CLOSEBUY;

if (Buy1_1 <= C_trendsetter) StopLossMode = True;

if (Buy1_1 <= CloseBuy1_2) CloseOrder();

if (Buy1_1 <= CloseBuy1_2) TrailingStopMode = True;

wenn der Stop-Loss ausgelöst hat, sollte es kurz danach geschlossen haben, aber nicht, noch die Trailing-Stop offensichtlich ausgelöst, siehe beigefügt.

Dateien:
 

Immer noch nicht tun, was ich sagen, es zu tun...

Es tat den Abschluss auf den ersten Handel ... aber nicht den zweiten Handel ... siehe beigefügt.

 

if (Buy1_1 + StopLoss*Point <= C_trendsetter) Order = SIGNAL_CLOSEBUY;

dies scheint zu funktionieren.

habe den Fehler gefunden...

dies sollte sein

if (Buy1_1 + StopLoss*Point <= C_trendsetter) Order = SIGNAL_CLOSESELL;

für die Shorts...

Ich kopiere und füge so viel ein, dass ich den Überblick über das Auftragssignal verloren habe... oje.

 

if (Buy1_1 + StopLoss*Point <= C_trendsetter) Order = SIGNAL_CLOSEBUY;

sollte sein

if (Buy1_1 + StopLoss*Point <= C_trendsetter) Order = SIGNAL_CLOSESELL;

 

Fragen zur Farbe

Wie stelle ich sicher, dass die Linien des gleitenden Durchschnitts die Farbe haben, die ich beim Öffnen des Strategie-Tester-Charts angegeben habe?

Wie kann ich erreichen, dass die Pfeile größer angezeigt werden, wenn ich das Strategy-Tester-Diagramm öffne?

 

Glauben Sie, dass es möglich ist, Hüllkurven mit gleitendem Durchschnitt zu haben, die sich in einer geraden Linie in die Zukunft projizieren?

 
kidhudi:
Glauben Sie, dass es möglich ist, gleitende Durchschnittshüllkurven zu haben, die sich in einer geraden Linie in die Zukunft projizieren?

gleitende Durchschnitte werden durch den Durchschnitt der vergangenen "x" Perioden bestimmt,

Wenn Sie beispielsweise den gleitenden Durchschnitt auf den Schlusskurs anwenden, schließt eine Periode bei 1,3417, und die nächste liegt 5 Pips höher, und die nächste 5 höher, usw. Ein gleitender Durchschnitt würde diese Werte "mitteln", um einen aktuellen Wert zu erhalten.

Da sich der Kurs ständig ändert, sehen nur die gleitenden Durchschnitte, die mehr als 100 Pips oder so zurückblicken, die meiste Zeit annähernd gerade aus.

Um Ihre Frage zu beantworten: Wenn das möglich ist, lassen Sie es mich bitte wissen! (lol)

 

Hallo, ich arbeite an einem EA, mit dem ich versuche, einen Preis Cross zu tun.

Wie kann ich wissen, ob es gekreuzt hat?

Wenn ich if Ask>iCustom() wähle, dann werden jedes Mal, wenn der Kurs darüber liegt, Orders eingegeben.

wenn ich if ask=iCustom() mache, dann verpasst er Käufe, weil er das pro Minute macht

Bei Dealbook würde ich if ask[-1] =iCustom verwenden, aber ich kann es hier nicht herausfinden, da Ask und Bid keine Historie haben.

 

zusätzliche Diagramme

Hallo,

dies ist wahrscheinlich irrelevant für diesen Thread, aber ich wollte wissen, wie ich zusätzliche Charts für Metatrader 4 hinzufügen kann...wie Silber, Audnzd, Nzdusd, Platanium etc. Jemand hatte mir einmal diesen Anhang zum Kopieren und Einfügen in den Metatrader-Ordner gegeben, um diese Charts zu erhalten, aber es scheint, dass ich ihn verloren habe, also kann mir hier bitte jemand helfen.

thnx

kev

Grund der Beschwerde: