Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erforderliche Zeilen in gelb
Gelbe Linien erforderlich
Nun sagen Sie mir, wie man hier Gewinn macht... Oder geht es darum, ein Spiel zu entwickeln?
Hallo an alle, können Sie mir bitte helfen, einen Fehler im Code des EA zu finden, ich denke, ich habe alles durchgeschaut, es scheint alles richtig im Code geschrieben zu sein, aber das Programm handelt aus irgendeinem Grund nicht richtig! Die Idee ist folgende: Der Advisor muss nach zwei langen Kerzen der gleichen Richtung suchen (die Länge zwischen den Kerzen ist im Advisor einstellbar, d.h. zwischen den beiden Minimal- oder Maximal-Kerzen, je nach Richtung), wenn der Preis in der entgegengesetzten Richtung das Minimum oder Maximum der letzten Kerze durchbricht, sollte ein Geschäft eröffnet werden (Beispielbildsituationen auf dem der Datei beigefügten Chart). Der Berater sollte in jeder geeigneten Situation Geschäfte eröffnen, aber aus irgendeinem Grund eröffnet er nur in den Handelsfenstern zwischen den Tagen Geschäfte. Hier ist die Situation, die nicht schwierig ist, von Programmierern, bitte helfen, beheben Sie den Fehler. EA-Code siehe unten sowie in der angehängten Datei.
Hallo an alle, können Sie mir bitte helfen, einen Fehler im Code des EA zu finden, ich denke, ich habe alles durchgesehen, es scheint richtig in den Code geschrieben worden zu sein, aber das Programm handelt nicht korrekt aus irgendeinem Grund! Die Idee ist folgende: Der Advisor muss nach zwei langen Kerzen der gleichen Richtung suchen (die Länge zwischen den Kerzen ist im Advisor einstellbar, d.h. zwischen den beiden Minimum- oder Maximum-Kerzen, je nach Richtung), wenn der Preis in der Gegenrichtung das Minimum oder Maximum der letzten Kerze durchbricht, sollte ein Geschäft eröffnet werden (Beispielbildsituationen auf dem Chart im Anhang der Datei). Der Berater sollte in jeder geeigneten Situation Geschäfte eröffnen, aber aus irgendeinem Grund eröffnet er nur in den Handelsfenstern zwischen den Tagen Geschäfte. Hier ist die Situation, die nicht schwierig ist, von Programmierern, bitte helfen, beheben Sie den Fehler. Siehe den EA-Code unten und in der angehängten Datei.
Es ist besser, zuerst den Teil des EAs zu schreiben, der die gefundenen Kerzen auf dem Chart markiert, damit alles klar wird. Und die folgenden Zeilen sind in Ihrem Fall unnötig:
Und jetzt sagen Sie mir, wie man hier Gewinn machen kann... Oder brauchen Sie es, um ein Spiel zu entwickeln?
Es gibt noch keine Möglichkeit, einen Gewinn zu erzielen. Es gibt einen Algorithmus zur Berechnung von zwei wahrscheinlichen Kurszielen entlang des Trends anhand von fünf Hauptpunkten, aber er wird auf einem speziellen Server mit einem kostenpflichtigen Abonnement berechnet. Ich möchte die Ziele selbst berechnen, die Arbeit an dem Algorithmus ist noch nicht abgeschlossen.
Wie wird Ihr Programm in MQL4 aussehen?
Wenn Sie eine gute Strategie haben und bereit sind, sie zu teilen, kann ich einen EA schreiben. Ich lade Sie ein, es entweder öffentlich oder in einer privaten Nachricht zu diskutieren.
Anton, helfen Sie mir, ich habe Trailing-Stop-Funktion, um die EA hinzugefügt, ich habe es kompiliert und es zeigt zwei Fehler. - Ich habe mir den Kopf zerbrochen, ich weiß nicht, wie ich sie reparieren soll. Allerdings werden die Geschäfte nach der alten Strategie geschlossen, wenn der Kurs die obere bzw. untere Grenze des Kanals berührt hat. Ich denke, auch hier muss etwas geändert werden. - Rückruf an die DNR-Armee.
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#Eigenschaft Version "1.00"
#Eigenschaft streng
//---------------------------------------------------------
extern double Lots = 0,01;
extern int TakeProfit = 600;
extern int StopLoss = 25;
extern int Magic = 0001;
extern int Schlupf = 3;
extern int TralType = 0; // 0-SAR, 1-ATR, 2-HMA.
extern double SAR_Step = 0,02;
extern double SAR_Max = 0.2;
extern int ATR_Period = 14;
extern double ATR_K = 2.0;
extern inttern HMA_Zeitraum = 16;
extern intern HMA_Methode = 3;
extern inttern HMA_Shift = 0;
datetime LBT;
//---------------------------------------------------------
extern string TMA = "TMA-Indikatorparameter";
externer String TimeFrame = "aktueller Zeitrahmen";
extern int HalfLength = 56;
extern int Preis = "PRICE_CLOSE;
extern double ATRMultiplier = 2.0;
extern inttern ATRPeriod = 100;
extern bool Interpolate = true;
//---------------------------------------------------------
double PriceHigh, PriceLow, SL, TP;
int-Ticket;
//+------------------------------------------------------------------+
Experten-Initialisierungsfunktion //|.
//+------------------------------------------------------------------+
int OnInit()
{
if (Ziffern == 3 || Ziffern == 5)
{
TakeProfit *= 10;
StopLoss *= 10;
Schlupf *= 10;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion |
//+------------------------------------------------------------------+
void OnTick()
{
PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);
PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);
if(CountSell() == 0 && Bid >= PriceHigh)
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);
wenn (Ticket > 0)
{
SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
if (OrderSelect(ticket, SELECT_BY_TICKET))
if (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Fehler bei der Auftragsänderung!)
}
}
if (CountBuy() == 0 && Ask <= PriceLow)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);
wenn (Ticket > 0)
{
TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
if (OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Fehler beim Ändern der Kauforder!)
} else Print("Fehler beim Öffnen des Kaufauftrags");
}
//+------------------------------------------------------------------+
Experten-Initialisierungsfunktion //|.
//+------------------------------------------------------------------+
int init()
{
//--------
//--------
zurück (0);
}
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion |
//+------------------------------------------------------------------+
void OnTick()
{
PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);
PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);
if(CountSell() == 0 && Bid >= PriceHigh)
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);
wenn (Ticket > 0)
{
SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
if (OrderSelect(ticket, SELECT_BY_TICKET))
if (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Fehler beim Ändern des Verkaufsauftrags!)
} else Print("Fehler beim Öffnen des Verkaufsauftrags!)
}
if (CountBuy() == 0 && Ask <= PriceLow)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);
wenn (Ticket > 0)
{
TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
if (OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Fehler beim Ändern der Kauforder!)
} else Print("Fehler beim Öffnen des Kaufauftrags");
}
if (Ask <= PriceLow && CountSell() > 0)
{
for (int i = OrdersTotal() -1; i>0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)
if (!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black))
Print("Fehler beim Schließen der Verkaufsorder!)
}
}
}
if (Bid >= PriceHigh && CountBuy() > 0)
{
for (int i = OrdersTotal() -1; i>0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)
if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black))
Print("OrderClose Buy Fehler!)
}
}
}
}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for (int trade = OrdersTotal()-1; trade>=0; trade--)
{
if(OrderSelect(Handel, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
zählen++;
}
}
return(count);
}//+------------------------------------------------------------------+
int CountBuy()
{
int count = 0;
for (int trade = OrdersTotal()-1; trade>=0; trade--)
{
if(OrderSelect(Handel, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
zählen++;
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//+-------
//+-------
zurück (0)
}
//+------------------------------------------------------------------+
//| Expertenstartfunktion |
//+------------------------------------------------------------------+
int Start()
{
//-----
bool error = fals;
if (LBT!=Time[0]) {
if (OrdersTotal()!=0) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {
double SL = OrderStopLoss();
wenn OrderType()==0) {
switch (TralType) {
Fall 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);
Pause;
Fall 1: SL = Hoch[1] - iATR(NULL,0,ATR,Zeitraum,1)*ATR_K;
Pause;
Fall 2: SL = iCustom(NULL,0, "VininI_HMAsound&",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0);
Pause;
}
wenn (SL<OrderStopLoss())
SL = OrderStopLoss();
}
if (OrderType()==1) {
switch (TralType) {
Fall 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);
Pause;
Fall 1: SL = Low[1] + iATR(NULL,0,ATR,Period,1)*ATR_K;
Pause;
Fall 2: SL = iCustom(NULL,0, "VininI_HMAsound&",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0);
Pause;
}
wenn (SL>OrderStopLoss())
SL = OrderStopLoss();
}
wenn (SL!=OrderStopLoss()) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0))
error = true;
}
}
}
}
wenn (!Fehler)
LBT = Zeit[0];
}
zurück (0);
}
//+------------------------------------------------------------------+
Um Erfahrungen in diesem Bereich zu sammeln, werde ich 25 EAs kostenlos für Ihre interessanten Ideen und Strategien schreiben
Nur noch 19 EAs übrig
Ich habe dieTrailing-Stop-Funktion zu EA hinzugefügt und kommentiert, und sie produziert zwei Fehler. - Ich habe vielleicht einige Fehler, aber ich weiß nicht, wie ich sie beheben kann. Allerdings werden die Geschäfte nach der alten Strategie geschlossen, wenn der Preis die obere Grenze des Kanals bzw. die untere Grenze berührt hat. Ich denke, auch hier muss etwas geändert werden. - Rückruf an die DNR-Armee.
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#Eigenschaft Version "1.00"
#Eigenschaft streng
//---------------------------------------------------------
extern double Lots = 0,01;
extern int TakeProfit = 600;
extern int StopLoss = 25;
extern int Magic = 0001;
extern int Schlupf = 3;
extern int TralType = 0; // 0-SAR, 1-ATR, 2-HMA.
extern double SAR_Step = 0,02;
extern double SAR_Max = 0.2;
extern int ATR_Period = 14;
extern double ATR_K = 2.0;
extern inttern HMA_Zeitraum = 16;
extern intern HMA_Methode = 3;
extern inttern HMA_Shift = 0;
datetime LBT;
//---------------------------------------------------------
extern string TMA = "TMA-Indikatorparameter";
externer String TimeFrame = "aktueller Zeitrahmen";
extern int HalfLength = 56;
extern int Preis = "PRICE_CLOSE;
extern double ATRMultiplier = 2.0;
extern inttern ATRPeriod = 100;
extern bool Interpolate = true;
//---------------------------------------------------------
double PriceHigh, PriceLow, SL, TP;
int-Ticket;
//+------------------------------------------------------------------+
Experten-Initialisierungsfunktion //|.
//+------------------------------------------------------------------+
int OnInit()
{
if (Ziffern == 3 || Ziffern == 5)
{
TakeProfit *= 10;
StopLoss *= 10;
Schlupf *= 10;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion |
//+------------------------------------------------------------------+
void OnTick()
{
PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);
PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);
if(CountSell() == 0 && Bid >= PriceHigh)
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);
wenn (Ticket > 0)
{
SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
if (OrderSelect(ticket, SELECT_BY_TICKET))
if (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Fehler bei der Auftragsänderung!)
}
}
if (CountBuy() == 0 && Ask <= PriceLow)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);
wenn (Ticket > 0)
{
TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
if (OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Fehler beim Ändern der Kauforder!)
} else Print("Fehler beim Öffnen des Kaufauftrags");
}
//+------------------------------------------------------------------+
Experten-Initialisierungsfunktion //|.
//+------------------------------------------------------------------+
int init()
{
//--------
//--------
zurück (0);
}
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion |
//+------------------------------------------------------------------+
void OnTick()
{
PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);
PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);
if(CountSell() == 0 && Bid >= PriceHigh)
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);
wenn (Ticket > 0)
{
SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
if (OrderSelect(ticket, SELECT_BY_TICKET))
if (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Fehler beim Ändern des Verkaufsauftrags!)
} else Print("Fehler beim Öffnen des Verkaufsauftrags!)
}
if (CountBuy() == 0 && Ask <= PriceLow)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);
wenn (Ticket > 0)
{
TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
if (OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Fehler beim Ändern der Kauforder!)
} else Print("Fehler beim Öffnen des Kaufauftrags");
}
if (Ask <= PriceLow && CountSell() > 0)
{
for (int i = OrdersTotal() -1; i>0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)
if (!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black))
Print("Fehler beim Schließen der Verkaufsorder!)
}
}
}
if (Bid >= PriceHigh && CountBuy() > 0)
{
for (int i = OrdersTotal() -1; i>0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)
if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black))
Print("OrderClose Buy Fehler!)
}
}
}
}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for (int trade = OrdersTotal()-1; trade>=0; trade--)
{
if(OrderSelect(Handel, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
zählen++;
}
}
return(count);
}//+------------------------------------------------------------------+
int CountBuy()
{
int count = 0;
for (int trade = OrdersTotal()-1; trade>=0; trade--)
{
if(OrderSelect(Handel, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
zählen++;
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//+-------
//+-------
zurück (0)
}
//+------------------------------------------------------------------+
//| Expertenstartfunktion |
//+------------------------------------------------------------------+
int Start()
{
//-----
bool error = fals;
if (LBT!=Time[0]) {
if (OrdersTotal()!=0) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {
double SL = OrderStopLoss();
wenn OrderType()==0) {
switch (TralType) {
Fall 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);
Pause;
Fall 1: SL = Hoch[1] - iATR(NULL,0,ATR,Zeitraum,1)*ATR_K;
Pause;
Fall 2: SL = iCustom(NULL,0, "VininI_HMAsound&",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0);
Pause;
}
wenn (SL<OrderStopLoss())
SL = OrderStopLoss();
}
if (OrderType()==1) {
switch (TralType) {
Fall 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);
Pause;
Fall 1: SL = Low[1] + iATR(NULL,0,ATR,Period,1)*ATR_K;
Pause;
Fall 2: SL = iCustom(NULL,0, "VininI_HMAsound&",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0);
Pause;
}
wenn (SL>OrderStopLoss())
SL = OrderStopLoss();
}
wenn (SL!=OrderStopLoss()) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0))
Fehler = true;
}
}
}
}
wenn (!Fehler)
LBT = Zeit[0];
}
zurück (0);
}
//+------------------------------------------------------------------+
Ich habe dieTrailing-Stop-Funktion zum Expert Advisor hinzugefügt, und ich habe sie kompiliert und zwei Fehler erhalten. - Ich habe den Verstand verloren, weil ich nicht weiß, wie ich sie reparieren kann, um eine Eule zu bekommen. Allerdings werden die Geschäfte nach der alten Strategie geschlossen, wenn der Kurs die obere bzw. untere Grenze des Kanals berührt hat. Ich denke, auch hier muss etwas geändert werden. - Geben Sie es den Jungs von der Armee der DVR zurück.
Sie sollten nicht spammen.
Ich entschuldige mich, wenn ich etwas falsch gemacht habe. Ich verstehe immer noch nicht, wie ich gespammt habe... Ich glaube, ich habe zwei Nachrichten an zwei Kameraden gerichtet. Oder ist das nicht erlaubt? - Mein Fehler.