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
Daher ist es nicht erforderlich, ein genaues Verhältnis von Abstrichen zu Stäben festzulegen. Abstriche können nur mit Abstrichen berücksichtigt werden, und es ist besser, sie als Filter und nicht als Signale zu verwenden.
Boris, Sie haben teilweise Recht. Im Grunde sind die Einfassungen ein Zeiger. Aber auch hier gibt es einige Möglichkeiten. Einige wollen in einen Gegentrend einsteigen, andere wollen dem Trend folgen. Es gibt viele Varianten, aber sie haben bisher nicht wirklich funktioniert :(
Boris, du hast teilweise Recht. Im Grunde genommen sind die Wagen ein Zeiger. Aber auch hier gibt es eine Reihe von Möglichkeiten. Die einen wollen in einen Gegentrend einsteigen, die anderen in einen Trend... Es gibt viele Varianten, aber sie haben noch nicht wie erwartet funktioniert :(
Es geht nicht darum, traurig zu sein, und es geht auch nicht um andere. Die Quintessenz ist, dass es einen Fehler gibt und dass der Support überhaupt nicht antwortet! Die Kunden sind ihnen nicht wirklich wichtig. Ich bin sehr neugierig darauf. Der Antrag liegt seit fast einer Woche vor, und es gibt keinerlei Reaktion... Ich weiß nicht, was ich damit machen soll... Vielleicht können Sie ein Video aufnehmen und den Preis auf dem aktuellen Balken zeigen und die Tara schneidet direkt durch ihn hindurch, aber es gibt keine ausstehenden Aufträge? Ja, ich habe an diesem Moment festgehalten, aber nur, um den Grund zu verstehen. Ich werde es am Montag auf der Demo testen, aber... Aber andererseits... wenn das Testgerät völlig fehlerhaft ist, wozu soll es dann gut sein?
... Vielleicht ein Video und zeigen, wie der Preis geht und auf der aktuellen Bar, schneidet der Teer durch die mach...
Bei Mashka hatte ich das nicht.
Welche Mashka?
Ich habe ausdrücklich geschrieben, in welchen Fällen. Warum versuchen Sie, die Sache auf sich zu beziehen? Dieser Thread ist bereits 9 Seiten lang, aber er ist immer noch da.
Ich hänge den Code an. Hier ist der gleiche Code zur Ansicht:
//+-----------------------------------------------------------------------------------+ //| test_Ma.mq4 | //| hoz | //| | //+-----------------------------------------------------------------------------------+ #property copyright "hoz" #property link "" extern string ___H0 = " ___________ Параметры МА ____________ "; extern int i_TF = 0, i_fastMaPeriod = 10, i_slowMaPeriod = 21; extern string ___H1 = " _____ Параметры ордера _______"; extern int i_magic = 3333021; extern double i_thresholdFromMa = 5; // Отступ от МА extern double buyHear = 10, // Расстояние от МА до отложки на бай SellHear = 10; // Расстояние от МА до отложки на шорт // Машечки double fastMa, slowMa; double pt; datetime lastBarTime; // Время проведения последних рассчётов // Переменные рыночного окружения double g_spread, g_stopLevel, g_tickSize; // Идентификаторы положений машек #define MA_DIRECT_TO_UP 0 // Машки направлены вверх #define MA_DIRECT_TO_DOWN 1 // Машки направлены вниз #define MA_DIRECT_TO_NONE -1 // Машки во флете #define SIGNAL_BUY 0 // Сигнал на покупку #define SIGNAL_SELL 1 // Сигнал на продажу #define SIGNAL_NO -1 // Сигнала нет //+-------------------------------------------------------------------------------------+ //| Функция иницилизации | //+-------------------------------------------------------------------------------------+ int init() { GetMarketInfo(); lastBarTime = 0; if (Digits == 2 || Digits == 4) pt = Point; if (Digits == 1 || Digits == 3 || Digits == 5) pt = Point * 10; if (Digits == 6) pt = Point * 100; if (Digits == 7) pt = Point * 1000; return (0); } //+-------------------------------------------------------------------------------------+ //| Функция деиницилизации | //+-------------------------------------------------------------------------------------+ int deinit() { //---- //---- return (0); } //+-------------------------------------------------------------------------------------+ //| Сбор рыночных данных | //+-------------------------------------------------------------------------------------+ void GetMarketInfo() { g_spread = MarketInfo(Symbol(),MODE_SPREAD) * pt; g_stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL) * pt; g_tickSize = MarketInfo(Symbol(),MODE_TICKSIZE) * pt; } //+-------------------------------------------------------------------------------------+ //| Функция нормализации | //+-------------------------------------------------------------------------------------+ double ND(double A) { return (NormalizeDouble(A, Digits)); } //+-------------------------------------------------------------------------------------+ //| Открытие длинной позиции | //+-------------------------------------------------------------------------------------+ bool OpenBuy() { int ticket = -1; double OOP = fastMa + buyHear * pt; // Получаем значение цны открытия if ((ND(OOP) - Ask) >= MathMax(g_stopLevel,g_spread)) // Проверка цену открытия на стоплевел { if (ND(OOP) > Ask) // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником { Print("Bid = ", Bid); Print("Ask = ", Ask); Print("fastMa = ", fastMa); Print("Цена покупки = ", fastMa + buyHear * pt); Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt); ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0); } } if (ticket > 0) { return (true); } else Alert (GetLastError()); } //+-------------------------------------------------------------------------------------+ //| Открытие короткой позиции | //+-------------------------------------------------------------------------------------+ bool OpenSell() { int ticket = -1; double OOP = fastMa - SellHear * pt; // Получаем значение цны открытия if ((Bid - ND(OOP)) >= MathMax(g_stopLevel,g_spread)) // Проверка цену открытия на стоплевел { if (ND(OOP) < Bid) // Проверка что цена открытия ниже Bid, т.к. у нас вход отложенником { Print("Bid = ", Bid); Print("Ask = ", Ask); Print("fastMa = ", fastMa); Print("fastMa + i_thresholdFromMa * pt = ", fastMa + i_thresholdFromMa * pt); Print("Цена покупки = ", fastMa + buyHear * pt); Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt); ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0); } } if (ticket > 0) { return (true); } else Alert (GetLastError()); } //+-------------------------------------------------------------------------------------+ //| Получаем относительное положение машек | //+-------------------------------------------------------------------------------------+ int GetStateMa(double fastMa, double slowMa) { if (fastMa > slowMa) // Если условия выполнены, то.. return (MA_DIRECT_TO_UP); // ..машки направлены вниз if (fastMa < slowMa) // Если условия выполнены, то.. return (MA_DIRECT_TO_DOWN); // машки направлены вверх return (MA_DIRECT_TO_NONE); // Машки не имеют выраженного направления } //+-------------------------------------------------------------------------------------+ //| Открытие позиций | //+-------------------------------------------------------------------------------------+ bool Trade(int signal) { if (signal == SIGNAL_BUY) // Если сигнал на покупку.. if (!OpenBuy()) // ..покупаем return(false); if (signal == SIGNAL_SELL) // Если сигнал на продажу.. if (!OpenSell()) // ..продаём return(false); return (true); } //+-------------------------------------------------------------------------------------+ //| Получаем общий сигнал на открытие позиции | //+-------------------------------------------------------------------------------------+ int GetSignal() { // if (FindOrders() > 0) // Если есть открытые ордера, то.. // return (SIGNAL_NO); //..ничего не делаем if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_UP) if ( ND(MathAbs(fastMa - Ask)) <= i_thresholdFromMa * pt) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa.. return(SIGNAL_BUY); if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_DOWN) if ( ND(MathAbs(fastMa - Bid)) <= i_thresholdFromMa * pt ) // ..зазор между ценой продажи и машки, <= i_thresholdFromMa.. return(SIGNAL_SELL); return (SIGNAL_NO); } //+-------------------------------------------------------------------------------------+ //| Функция start | //+-------------------------------------------------------------------------------------+ int start() { fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_OPEN,0); slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_OPEN,0); /* Print("Bid = ", Bid); Print("Ask = ", Ask); Print("fastMa = ", fastMa); Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt); */ // Отслеживание открытия нового бара if (lastBarTime == iTime(NULL, 0, 0)) // На текущем баре все необходимые действия.. return (0); // ..уже были выполнены // Рассчёт сигнала int signal = GetSignal(); // Проведение торговых операций if (signal != SIGNAL_NO) if (!Trade(signal)) return (0); lastBarTime = iTime(NULL, 0, 0); // На текущем баре все необходимые действия.. // .. успешно выполнены return (0); }EINIGE BALKEN WERDEN GRUNDLOS IGNORIERT. Und natürlich gibt es bei ihnen keine offenen Aufträge. Der Code ist korrekt. Soweit ich sehen kann, gibt es nichts zu reparieren.
Hier sehen Sie Screenshots von Positionen, die nicht geöffnet wurden. Dort sind auch die Prüfungstermine zu sehen. Bitte helfen Sie mir, den Grund zu finden. Ich habe bereits alles in diesem Thema besprochen, aber nicht die ursprüngliche Frage.
Wenn es Ihnen nichts ausmacht, die ToR neu zu formulieren, warum müssen Sie dann eine neue Leiste kontrollieren?
Ich bringe es auf den Punkt! Es gibt noch eine Sache, an die ich nicht gedacht habe, aber ich werde Ihnen den ganzen Punkt nennen.
Die Anzahl der Aufträge sollte nicht begrenzt sein. D.h., die Aufträge können in beliebiger Menge eröffnet werden... ... es spielt keine Rolle, wie viele wir haben, aber wir brauchen nur 1 Auftrag, der in der aktuellen Leiste geöffnet wird. Das war's.
D.h., es wird ein neuer Balken eröffnet, so dass wir in diesem Balken 1 Auftrag eröffnen können, aber nicht mehr als 1 Auftrag im aktuellen Balken. Der nächste Auftrag kann nur zum nächsten Takt eröffnet werden, nicht früher.
Ist das jetzt klar?
Und hier liegen Sie falsch...
Die Wellenperioden sind unterschiedlich...i_fastMaPeriod undi_slowMaPeriod sind 10 bzw. 21!
Empfohlene Lektüre
https://www.mql5.com/ru/articles/1411
Ich tue es und es ist einfach! Ich habe nicht an eine weitere Sache gedacht, aber ich werde Ihnen die ganze Idee geben.
Die Anzahl der Aufträge sollte nicht begrenzt sein. D.h. es können Aufträge in beliebiger Menge eröffnet werden... Es spielt keine Rolle, wie viele es sind, aber es sollte nur 1 Auftrag in der aktuellen Leiste geöffnet werden. Das war's.
D.h., es wird ein neuer Balken eröffnet, so dass wir in diesem Balken 1 Auftrag eröffnen können, aber nicht mehr als 1 Auftrag im aktuellen Balken. Der nächste Auftrag kann nur zum nächsten Takt eröffnet werden, nicht früher.
Ist das jetzt klar?
Beachten Sie, dass bei jedem Takt nur eine Position geöffnet wird.
nur eine Position auf jedem Balken offen halten
Ich werde es klar und einfach machen! Ich habe noch nicht an eine weitere Sache gedacht, aber ich werde Ihnen die ganze Idee geben.
Die Anzahl der Aufträge sollte nicht begrenzt sein. D.h. es können Aufträge in beliebiger Menge eröffnet werden... Es spielt keine Rolle, wie viele es sind, aber es sollte nur 1 Auftrag in der aktuellen Leiste geöffnet werden. Das war's.
D.h., es wird ein neuer Balken eröffnet, so dass wir in diesem Balken 1 Auftrag eröffnen können, aber nicht mehr als 1 Auftrag im aktuellen Balken. Der nächste Auftrag kann erst im nächsten Takt eröffnet werden, nicht vorher.
Wir können die Order nur dann für den aktuellen Balken öffnen, wenn dieser geöffnet ist, d.h. wir sollten diese Zeile in der Funktion OpenBuy/Sell verschieben