Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 101
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
Das ist nicht klar. Wenn es notwendig ist, den EA zu stoppen, dann wird die vorgeschlagene Variante damit fertig, wenn es nicht notwendig ist, ihn zu stoppen, dann lassen Sie ihn handeln und schränken Sie ihn nicht in irgendeiner Weise ein. Wenn wir nach dem Stop auf Abruf handeln wollen, genügt es, die Zeit zu ändern, Disabled wird wahr und das Programm wird weiter arbeiten
Okay, danke.
Sie möchten wahrscheinlich die Möglichkeit haben, in den Eingabeparametern anzugeben, ob Sie nach Börsenschluss handeln oder nicht?
Wenn ja, dann bitte sehr:
// OnTick
if(OneTrade && !Disabled) return;
Ich habe die Flagge nicht vermasselt.
Sie möchten wahrscheinlich die Möglichkeit haben, in den Eingabeparametern anzugeben: "Handel nach Börsenschluss oder kein Handel nach Börsenschluss"?
Wenn ja, dann bitte sehr:
// OnTick
if(OneTrade && !Disabled) return;
Ich scheine mit der Flagge nichts falsch gemacht zu haben.
Ich danke Ihnen!
Die Frage ist: Wie korrekt ist dieser Eintrag, der am Anfang des Programms steht, während im gesamten Programm viele Time[0] und Time[1] verwendet werden, die nicht jedes Mal aufgerufen werden müssen, sondern in eine Variable geschrieben werden. Es scheint keine Fehler außerhalb des Arrays zu geben, aber alles ist oberflächlich definiert:
//------------
void OnTimer()
ArraySetAsSeries(TM, true);
if(CopyTime(_Symbol, PERIOD_CURRENT, 0, 2, TM)==-1) return;
TIME0 = TM[0];
TIME1 = TM[1];
Danke!
Darf ich Sie bitten, es ein wenig anzupassen?
Setzen Sie eine vertikale Linie beim aktuellen Kurs
oder einen Link zu einem EA, in dem dies verfügbar ist
Ich möchte verstehen, wie man die Parameter des Bots verteilt, damit er funktioniert
Darf ich Sie bitten, es ein wenig anzupassen?
Setzen Sie eine vertikale Linie beim aktuellen Kurs
oder einen Link zu einem EA, in dem dies verfügbar ist
Ich möchte verstehen, wie man die Parameter des Bots verteilt, damit er funktioniert
Zuerst müssen Sie die Kursanzeige um 90 Grad drehen.
Beitrag 998.
Es ist mir egal, ob es horizontal oder vertikal ist, es ist nur so, dass das, was ich dort gemacht habe, im Moment nicht funktioniert.
Beitrag 998.
Es ist mir egal, ob es horizontal oder vertikal ist, es ist nur so, dass das, was ich dort gemacht habe, jetzt nicht mehr funktioniert.
// Функцию - за пределы остальных функций программы
//+------------------------------------------------------------------+
//| Трейлинг по значению + перенос стопа на уровень безубытка |
//+------------------------------------------------------------------+
void TrailingByLevel(string symbol_name, // Имя символа
int magic_number, // Magic ордера
double level_of_trail, // Уровень, на который ставим стоп (например МА или Parabolic SAR)
int trailing_start, // Профит в пунктах для старта трала
int trailing_step, // Шаг трала в пунктах
int trailing_stop, // Отступ стоплосс от уровня МА или SAR в пунктах
int profit_for_breakeven=15, // Профит в пунктах для переноса стопа в безубыток
int breakeven_level=5, // Уровень безубытка в пунктах
bool use_trail=true, // Флаг использования трала
bool use_breakeven=false // Флаг использования безубытка
)
{
int lv=StopLevel(symbol_name)+1; // Получаем значение Stop Level по символу + 1 пункт (из отдельной функции)
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderMagicNumber()!=magic_number) continue; //Если Магик не наш - идем к следующему ордеру
if(OrderSymbol()!=symbol_name) continue; //Если Символ не наш - идем к следующему ордеру
//--- покупки
if(OrderType()==OP_BUY) {
int digits=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS);
double point=(SymbolInfoDouble(symbol_name,SYMBOL_POINT));
double pb=SymbolInfoDouble(symbol_name,SYMBOL_BID);
double profit=pb-OrderOpenPrice(); // Профит позиции в цене (без комиссий и свопов)
//--- безубыток
if(use_breakeven) {
//--- если профит в цене больше заданного
if(profit>=profit_for_breakeven*point) {
int err=ERR_NO_ERROR;
double sl=NormalizeDouble(OrderOpenPrice()+breakeven_level*point,digits);
if(pb-lv*point>sl && OrderStopLoss()<sl) {
// Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
// OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
// ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
//ModifyOrder(-1,sl,-1,err);
}
if(err==ERR_MARKET_CLOSED) return;
}
}
//--- трал
if(use_trail) {
//--- если профит в пунктах больше заданного, или изначально задан меньше ноля
if(profit>=trailing_start*point || trailing_start==EMPTY) {
int err=ERR_NO_ERROR;
double sl=NormalizeDouble(level_of_trail-trailing_stop*point,digits); // вычисляем новый уровень стоплосс по значению, переданному в функцию
//--- Если новое значение СЛ не ближе Stop Level и если новое положение СЛ больше старого+шаг СЛ, то модифицируем стоп позиции
if(pb-lv*point>sl && OrderStopLoss()+trailing_step*point<sl) {
// Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
// OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
// ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
//ModifyOrder(-1,sl,-1,err);
}
if(err==ERR_MARKET_CLOSED) return;
}
}
}
//--- Продажи
if(OrderType()==OP_SELL) {
int digits=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS);
double point=(SymbolInfoDouble(symbol_name,SYMBOL_POINT));
double pa=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
double profit=OrderOpenPrice()-pa; // Профит позиции в цене (без комиссий и свопов)
//--- безубыток
if(use_breakeven) {
//--- если профит в цене больше заданного
if(profit>=profit_for_breakeven*point) {
int err=ERR_NO_ERROR;
double sl=NormalizeDouble(OrderOpenPrice()-breakeven_level*point,digits);
if(pa+lv*point<sl && (OrderStopLoss()>sl || OrderStopLoss()==0)) {
// Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
// OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
// ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
//ModifyOrder(-1,sl,-1,err);
}
if(err==ERR_MARKET_CLOSED) break;
}
}
//--- трал
if(use_trail) {
//--- если профит в пунктах больше заданного, или изначально задан меньше ноля
if(profit>=trailing_start*point || trailing_start==EMPTY) {
int err=ERR_NO_ERROR;
double sl=NormalizeDouble(level_of_trail+trailing_stop*point,digits); // вычисляем новый уровень стоплосс по значению, переданному в функцию
//--- Если новое значение СЛ не ближе Stop Level и если новое положение СЛ больше старого+шаг СЛ, то модифицируем стоп позиции
if(pa+lv*point<sl && (OrderStopLoss()-trailing_step*point>sl || OrderStopLoss()==0)) {
// Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
// OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
// ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
//ModifyOrder(-1,sl,-1,err);
}
if(err==ERR_MARKET_CLOSED) break;
}
}
}
}
}
}
//+------------------------------------------------------------------+
int StopLevel(string symbol_name) {
int sp=(int)SymbolInfoInteger(symbol_name,SYMBOL_SPREAD);
int lv=(int)SymbolInfoInteger(symbol_name,SYMBOL_TRADE_STOPS_LEVEL);
return((lv==0)?sp*2:lv);
}
//+------------------------------------------------------------------+
Ich habe festgestellt, dass die Leute oft nach einer Schleppnetz- oder Break-even-Funktion fragen. Ich habe eine Blueprint-Funktion erstellt, mit der ein Stop auf ein bestimmtes Break-Even-Niveau verschoben und eine Stop-Position um den Wert eines Indikators nachgezogen werden kann, der seine Linien auf dem Preisdiagramm zeichnet (z. B. MA oder Parabolic), die der Funktion übergeben werden.
Generell gilt: Fragen Sie, wenn Sie etwas brauchen. Oder richtig