DanilaMactep: Und dieser Prozess sollte nach jeder Zeile geschrieben werden, in der versucht wird, eine Bestellung mit der Funktion "Bestellung senden" zu öffnen - richtig?
Nach allen Geschäften OrderSend(), OrderClose(), OrderCloseBy(), OrderModify(), OrderDelete()
Nach allen Geschäften OrderSend(), OrderClose(), OrderCloseBy(), OrderModify(), OrderDelete()
Wenn mein Expert Advisor aus dem Diagramm gelöscht wird, funktioniert er nicht mehr, es sei denn, ich füge ihn manuell wieder hinzu. Wie kann ich die automatische Funktion wiederherstellen?
DanilaMactep: Dies muss nach jeder Zeile geschrieben werden, in der versucht wird, eine Bestellung mit dem Befehl "Senden" zu öffnen - ist dies korrekt?
DanilaMactep: Wenn der EA aus dem Diagramm gelöscht wird, funktioniert er nicht, bis ich ihn manuell wieder hochlade. Wie kann ich sie automatisch zurücksetzen?
Das geht nicht automatisch, sondern nur zur Korrektur des Fehlers.
Und dieser Fall muss nach jeder Zeile geschrieben werden, in der versucht wird, eine Bestellung mit ordersend zu öffnen - richtig?
Wenn wir mit "diesem Fall" die Überprüfung des minimal und maximal zulässigen Auftragsvolumens, des Volumenschritts, der maximal zulässigen Anzahl von Geschäften+Auftrag, der ausreichenden freien Marge meinen (das sind die Hauptpunkte, bei denen der Validator am häufigsten ablehnt), dann ist es sinnvoller, eine Funktion zu schreiben und sie z.B. OrderCheck zu nennen. Prüfen Sie dann vor der Eröffnung eines neuen Geschäfts einfach das Volumen. Ungefähr so:
Lot=OrderCheck(OP_BUY,Lot);
// или
Lot=OrderCheck(OP_SELL,Lot);
Guten Tag, liebe Programmierer! Seit einem Tag kämpfe ich mit einem Problem, und ich kann es nicht lösen. Bitte helfen Sie mir, das Problem zu lösen.
Die Quintessenz:
Bei dem Instrument handelt es sich um RTS-Futures mit einerLaufzeit von M5;
Der Algorithmus muss die Parameter SL und TP in Abhängigkeit von der Zeit ändern, und, was wichtig ist, die offene Position wird nicht durch TP ( request.tp = ....) und den Gegenmarktauftrag geschlossen, wenn bestimmte Bedingungen erfüllt sind.
Es gibt drei Intervalle: 1) (stm.hour>=12 && stm.sec>=1 && stm.hour<=12 && stm.min<=03) // von 12:00:01 - 12:03:00
Im Intervall "1)" sind die Parameter SL und TP = 200 und 200
In den Intervallen "2)" und "3)", SL und TP = 100 und 100
Das Problem: Der Algorithmus fixiert den Gewinn NUR AUF DEN AKTUELLEN SWITCH, aber wir müssen die Gewinnmitnahme-Bedingung für n weitere Candlesticks (mindestens 10-15) beibehalten Chartperiode M5
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+datetime some_time=TimeCurrent();
#define EXPERT_MAGIC 1010// MagicNumber эксперта //+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnTick()
{
double Ask = SymbolInfoDouble(NULL, SYMBOL_ASK);
double Bid = SymbolInfoDouble(NULL, SYMBOL_BID);
double SL=0;
double TP=0;
datetime tm=TimeCurrent();
MqlDateTime stm;
TimeToStruct(tm,stm);
bool is_siesta=false;
if (stm.hour>=12 && stm.sec>=1 && stm.hour<=12 && stm.min<=03) // Условия SL и TP работают только в этом интервале времени
{
SL=200/_Point;
TP=200/_Point;
is_siesta=true;
}
else
{
if(((stm.hour>=16 && stm.min>=05 && stm.sec>=1) && (stm.hour<=16 && stm.min<=09)) || (stm.hour>=20 && stm.sec>=11 && stm.hour<=20 && stm.min<=04)) // Условия SL и TP работают только в этих интервалах времени
{
SL=100/_Point;
TP=100/_Point; // тейк профит закрывается кодом
is_siesta=true;
}
else
{
return;
}
}
double Lots=1;
datetime timeBar = iTime(NULL,PERIOD_CURRENT,0);// период можно поставить по своему усмотрениюdatetimestatic timeOpen = 0;
if( (is_siesta==true)&& (timeBar > timeOpen) && ((int)NormalizeDouble(MathAbs(Ask-Bid)/_Point,0)<=50)) // Открывает при условии: - Интервал времени соответствует; - не далее текущей свечи; - спред не более 50пт
{
MqlTradeRequest request= {0};
MqlTradeResult result= {0};
request.action =TRADE_ACTION_DEAL;
request.symbol =Symbol();
request.volume =Lots;
request.type =ORDER_TYPE_BUY;
request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK);
request.deviation= 5;
request.sl = NormalizeDouble(Ask-SL*_Point,_Digits);
request.magic = 1010;
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось, вывести код ошибки
timeOpen = timeBar;
}
if( (is_siesta==true) && (timeBar > timeOpen) && ((int)NormalizeDouble(MathAbs(Ask-Bid)/_Point,0)<=50)) // Открывает при условии: - Интервал времени соответствует; - не далее текущей свечи; - спред не более 50пт
{
MqlTradeRequest request= {0};
MqlTradeResult result= {0};
request.action =TRADE_ACTION_DEAL;
request.symbol =Symbol();
request.volume =Lots;
request.type =ORDER_TYPE_SELL;
request.price =SymbolInfoDouble(Symbol(),SYMBOL_BID);
request.deviation= 5;
request.sl = NormalizeDouble(Bid+SL*_Point,_Digits);
request.magic = 1010;
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось, вывести код ошибки
timeOpen = timeBar;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////Блок закрытия позиции без тейк-профита request.tp (для SELL)if((AccountInfoDouble(ACCOUNT_PROFIT)>=TP)&&((int)NormalizeDouble(MathAbs(Bid-Ask)/_Point,0)<=10)) // Закрывает встречным ордером при достижении условий: -прибыль соответствует тейк-профиту; - спред не более 10пт.
{
MqlTradeRequest request= {0};
MqlTradeResult result= {0};
int total=PositionsTotal(); // количество открытых позиций//--- перебор всех открытых позицийfor(int i=total-1; i>=0; i--)
{
//--- параметры ордераulong position_ticket=PositionGetTicket(i); // тикет позицииstring position_symbol=PositionGetString(POSITION_SYMBOL); // символint digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS); // количество знаков после запятойdouble volume=PositionGetDouble(POSITION_VOLUME); // объем позицииulong magic=PositionGetInteger(POSITION_MAGIC);
ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); // тип позицииif((type==POSITION_TYPE_SELL)&& (magic==1010)) // если позиция тип BUY и соотв. магику
{
request.action =TRADE_ACTION_DEAL;
request.symbol =Symbol();
request.volume =Lots;
request.type =ORDER_TYPE_BUY;
request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK);
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось, вывести код ошибки
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////Блок закрытия позиции без тейк-профита request.tp///////////////////////////////////////////////////////////////////////////////////////////////////////////////Блок закрытия позиции без тейк-профита request.tp (для BUY)if((AccountInfoDouble(ACCOUNT_PROFIT)>=TP)&&((int)NormalizeDouble(MathAbs(Bid-Ask)/_Point,0)<=10)) // Закрывает встречным ордером при достижении условий: -прибыль соответствует тейк-профиту; - спред не более 10пт.
{
MqlTradeRequest request= {0};
MqlTradeResult result= {0};
int total=PositionsTotal(); // количество открытых позиций//--- перебор всех открытых позицийfor(int i=total-1; i>=0; i--)
{
//--- параметры ордераulong position_ticket=PositionGetTicket(i); // тикет позицииstring position_symbol=PositionGetString(POSITION_SYMBOL); // символint digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS); // количество знаков после запятойdouble volume=PositionGetDouble(POSITION_VOLUME); // объем позицииulong magic=PositionGetInteger(POSITION_MAGIC);
ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); // тип позицииif((type==POSITION_TYPE_BUY)&& (magic==1010)) // если позиция тип BUY и соотв. магику
{
request.action =TRADE_ACTION_DEAL;
request.symbol =Symbol();
request.volume =Lots;
request.type =ORDER_TYPE_SELL;
request.price =SymbolInfoDouble(Symbol(),SYMBOL_BID);
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось, вывести код ошибки
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////Блок закрытия позиции без тейк-профита request.tp
}
Das Problem: Der Algorithmus legt den Gewinn NUR FÜR DEN AKTUELLEN WECHSEL fest, aber wir müssen die Gewinnmitnahmebedingung für n-Kurven (mindestens 10-15) beibehalten.
M5 Kartenperiode
Die SL- und TP-Aktion ist im Code zeitlich begrenzt. Getrennte SL und TP für Siesta und getrennte SL und TP für Siesta
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Und dieser Prozess sollte nach jeder Zeile geschrieben werden, in der versucht wird, eine Bestellung mit der Funktion "Bestellung senden" zu öffnen - richtig?
Nach allen Geschäften OrderSend(), OrderClose(), OrderCloseBy(), OrderModify(), OrderDelete()
Nach allen Geschäften OrderSend(), OrderClose(), OrderCloseBy(), OrderModify(), OrderDelete()
Dies muss nach jeder Zeile geschrieben werden, in der versucht wird, eine Bestellung mit dem Befehl "Senden" zu öffnen - ist dies korrekt?
Wenn Sie Fehler ausschließen, die sich auf
MODE_STOPLEVEL, MODE_TRADEALLOWED, MODE_MINLOT, MODE_LOTSTEP, MODE_MAXLOT
dann werden die Eulen nicht auf den Server eindreschen
Wenn der EA aus dem Diagramm gelöscht wird, funktioniert er nicht, bis ich ihn manuell wieder hochlade. Wie kann ich sie automatisch zurücksetzen?
Und dieser Fall muss nach jeder Zeile geschrieben werden, in der versucht wird, eine Bestellung mit ordersend zu öffnen - richtig?
Wenn wir mit "diesem Fall" die Überprüfung des minimal und maximal zulässigen Auftragsvolumens, des Volumenschritts, der maximal zulässigen Anzahl von Geschäften+Auftrag, der ausreichenden freien Marge meinen (das sind die Hauptpunkte, bei denen der Validator am häufigsten ablehnt), dann ist es sinnvoller, eine Funktion zu schreiben und sie z.B. OrderCheck zu nennen.
Prüfen Sie dann vor der Eröffnung eines neuen Geschäfts einfach das Volumen.
Ungefähr so:
Guten Tag, liebe Programmierer! Seit einem Tag kämpfe ich mit einem Problem, und ich kann es nicht lösen. Bitte helfen Sie mir, das Problem zu lösen.
Die Quintessenz:
Bei dem Instrument handelt es sich um RTS-Futures mit einerLaufzeit von M5;
Der Algorithmus muss die Parameter SL und TP in Abhängigkeit von der Zeit ändern, und, was wichtig ist, die offene Position wird nicht durch TP ( request.tp = ....) und den Gegenmarktauftrag geschlossen, wenn bestimmte Bedingungen erfüllt sind.
Es gibt drei Intervalle: 1) (stm.hour>=12 && stm.sec>=1 && stm.hour<=12 && stm.min<=03) // von 12:00:01 - 12:03:00
2) (stm.hour>=16 && stm.min>=05 && stm.sec>=1) && (stm.hour<=16 && stm.min<=09) // 16:05:01 - 16:09:00
3) (stm.Stunde>=20 && stm.sec>=11 && stm.hour<=20 && stm.min<=04) // 20:00:11 - 20:04:00
Im Intervall "1)" sind die Parameter SL und TP = 200 und 200
In den Intervallen "2)" und "3)", SL und TP = 100 und 100
Das Problem: Der Algorithmus fixiert den Gewinn NUR AUF DEN AKTUELLEN SWITCH, aber wir müssen die Gewinnmitnahme-Bedingung für n weitere Candlesticks (mindestens 10-15) beibehalten
Chartperiode M5
Alexey Belyakov:
Das Problem: Der Algorithmus legt den Gewinn NUR FÜR DEN AKTUELLEN WECHSEL fest, aber wir müssen die Gewinnmitnahmebedingung für n-Kurven (mindestens 10-15) beibehalten.
M5 Kartenperiode
Die SL- und TP-Aktion ist im Code zeitlich begrenzt. Getrennte SL und TP für Siesta und getrennte SL und TP für Siesta
Guten Tag, liebe Programmierer! Seit einem Tag kämpfe ich mit einem Problem, und ich kann es nicht lösen. Bitte helfen Sie mir, das Problem zu lösen.
Können Sie die Laufzeit und die Anzahl der Takte ändern?
Vielen Dank an MakarFX! Jetzt funktioniert es wie es soll!
Gern geschehen)