[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 832
Das ist das Gleiche. Eine Position wird geschlossen - ein schwebender Auftrag wird gesetzt, usw. Es gibt eine Funktion, die den letzten Wert zurückgibt (z. B. OrderCloseTime()). Bei jedem Tick erhalte ich den Zeitwert der zuletzt geschlossenen Position (z. B. Position 1). Wenn ich die nächste Position (Position 2) mit einem neuen Tick schließe, erhalte ich die Zeit zum Schließen dieser Position (Position 2). Der Wert von OrderCloseTime() hat sich gegenüber dem vorherigen Wert geändert. Und so weiter. Es ist mir egal, wie oder wie sehr sich die Variable verändert hat. Für mich ist allein die Tatsache wichtig, dass sich die Variable geändert hat. Es ist wie eine logische Operation: Wenn die OrderCloseTime() der letzten geschlossenen Position größer ist als die OrderCloseTime() der vorletzten Position, dann sollten wir BLA-BLA-BLA machen. Außerdem - wenn der OrderClosePrice() der letzten geschlossenen Position nicht gleich dem OrderClosePrice() der vorletzten Position ist, dann machen Sie einen BLA-BLA-BLA. Oder ist ein solcher Vergleich vielleicht gar nicht möglich?
Hier ist die Frage. Angenommen, unser EA zeigt ein Kaufsignal an, wenn der Indikator (z. B. der CCI) ein bestimmtes Niveau (die rote Linie) von unten nach oben überschreitet, und ein Verkaufssignal, wenn er nach unten geht. Wie kann man erreichen, dass der Auftrag nur einmal während der Bildung des Balkens A geöffnet wird? Angenommen, der Indikator kreuzt das Niveau (die rote Linie) während der Bildung von Balken A mehrmals nach unten und oben. Wie ich bereits erwähnt habe, sollten wir dafür sorgen, dass der Auftrag nur einmal geöffnet wird.
Was ich brauche, ist ein Verkaufssignal, das in Takt D (Situation 2 auf dem Diagramm) empfangen wird, um den in Takt A eröffneten Auftrag nicht zu schließen und in keiner Weise beeinflusst zu werden.
D.h., die Aufträge werden nach ihrer Eröffnung nicht vom Expert Advisor kontrolliert.
Forrim: Hier ist die Frage. Nehmen wir an, dass das Kaufsignal im EA generiert wird, wenn der Indikator (z.B. habe ich CCI genommen) ein bestimmtes Niveau (rote Linie) von unten nach oben kreuzt, während das Verkaufssignal generiert wird, wenn es von oben nach unten geht. Wie kann man erreichen, dass der Auftrag nur einmal während der Bildung des Balkens A geöffnet wird? Angenommen, der Indikator kreuzt das Niveau (die rote Linie) während der Bildung von Balken A mehrmals nach unten und oben. Wie ich bereits erwähnt habe, sollten wir dafür sorgen, dass ein Auftrag nur einmal eröffnet wird.
Dies setzt voraus, dass bei einem Verkaufssignal in Takt D (Situation 2 auf dem Diagramm) der in Takt A eröffnete Auftrag nicht geschlossen und in keiner Weise beeinflusst wird.
Das heißt, die Aufträge werden nicht vom EA kontrolliert, nachdem sie geöffnet wurden.
Vielen Dank im Voraus.
In der Tat springt der CCI so stark, dass wir ihn besser überprüfen sollten, nachdem die Bar geschlossen und eine neue eröffnet wurde.
Wenn wir prüfen wollen, ob die Eröffnungszeit einer Kerze unterschiedlich ist (wenn ja, wird die Order eröffnet) oder gleich ist (=> keine Order wird eröffnet), dann sollten wir bei jedem Übergang die Eröffnungszeit in der globalen Variable speichern.
Forrim: Hier ist die Frage. Angenommen, unser EA zeigt ein Kaufsignal an, wenn der Indikator (z. B. der CCI) ein bestimmtes Niveau (die rote Linie) von unten nach oben überschreitet, und ein Verkaufssignal, wenn er nach unten geht. Wie kann man erreichen, dass der Auftrag nur einmal während der Bildung des Balkens A geöffnet wird? Angenommen, der Indikator kreuzt das Niveau (die rote Linie) während der Bildung von Balken A mehrmals nach unten und oben. Wie ich bereits erwähnt habe, sollten wir dafür sorgen, dass der Auftrag nur einmal geöffnet wird.
Was wir brauchen, ist, dass das Verkaufssignal in Takt D (Situation 2 im Diagramm) empfangen wird, um den in Takt A eröffneten Auftrag nicht zu schließen und in keiner Weise beeinflusst zu werden.
D.h., die Aufträge werden nach ihrer Eröffnung nicht vom Expert Advisor kontrolliert.
Ich danke Ihnen im Voraus.
Wenn eine Position dieser Art bereits geöffnet ist, öffnen Sie keine weitere.
//--------------------------------------------------------------- 1 --// Численные значения для М15externdouble StopLoss =20; // SL для открываемого ордераexterndouble TakeProfit =20; // ТР для открываемого ордераexterndouble Step_Sar=0.02; // Шаг Sarexterndouble Maximum_Sar=0.2; // Максимум Sarexterndouble Lot=0.01; // Жестко заданное колич. лотовbool Work=true; // Эксперт будет работать.//--------------------------------------------------------------- 2 --int start()
{
int
Total, // Количество ордеров в окне
Ticket; // Номер ордераdouble
Sar_1 , // Значен. Sar текущее
Sar_0 , // Значение Sar предыдущей свечки
Price, // Цена ордера
SL, // SL ордера
TP; // TP ордераbool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell//--------------------------------------------------------------- 3 -- // Учёт ордеров
Total=0; // Количество ордеровfor(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:if (OrderSymbol()!=Symbol())continue; // Не наш фин. инструмif (OrderType()>1) // Попался отложенный
{
Alert("Обнаружен отложенный ордер. Эксперт не работает.");
return; // Выход из start()
}
Total++; // Счётчик рыночн. ордif (Total>1) // Не более одного орд
{
Alert("Несколько рыночных ордеров. Эксперт не работает.");
return; // Выход из start()
}
Price =OrderOpenPrice(); // Цена выбранн. орд.
SL =OrderStopLoss(); // SL выбранного орд.
TP =OrderTakeProfit(); // TP выбранного орд.
Lot =OrderLots(); // Количество лотов
}
}
//--------------------------------------------------------------- 6 --// Торговые критерии
Sar_1=iSAR(NULL, 0, 0.02, 0.2, 1); // Sar_1
Sar_0=iSAR(NULL, 0, 0.02, 0.2, 0); // Sar_0if (Sar_0 > Price && Sar_1 < Price) // если Sar меняет положение
{
Opn_B=true; // Критерий откр. Buy
}
if (Sar_0 < Price && Sar_1 > Price) // если Sar меняет положение
{
Opn_S=true; // Критерий откр. Sell
}
//--------------------------------------------------------------- 7 --
{
if (Opn_B==true)
{ // критерий откр. Buy
RefreshRates(); // Обновление данных
SL=(20+Ask-Bid)*Bid; // Вычисление SL откр.
TP=20*Bid; // Вычисление TP откр.Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,SL,TP);//Открытие Buy
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокreturn; // Выход из start()if (Opn_S==true) // критерий откр. Sell
{ // критерий откр. Sell
RefreshRates(); // Обновление данных
SL=(20+Ask-Bid)*Ask; // Вычисление SL откр.
TP=20*Ask; // Вычисление TP откр.Alert("Попытка открыть Sell. Ожидание ответа..");
Ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,0,SL,TP);//Открытие Selreturn; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокreturn; // Выход из start()
}
//--------------------------------------------------------------- 9 --return; // Выход из start()
}
//-------------------------------------------------------------- 10 --int Fun_Error(int Error) // Ф-ия обработ ошибок
{
switch(Error)
{ // Преодолимые ошибки case4: Alert("Торговый сервер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решениеreturn(1); // Выход из функцииcase135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеreturn(1); // Выход из функцииcase136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тикаSleep(1); // Задержка в циклеreturn(1); // Выход из функцииcase137:Alert("Брокер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решениеreturn(1); // Выход из функцииcase146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решениеreturn(1); // Выход из функции// Критические ошибкиcase2: Alert("Общая ошибка.");
return(0); // Выход из функцииcase5: Alert("Старая версия терминала.");
Work=false; // Больше не работатьreturn(0); // Выход из функцииcase64: Alert("Счет заблокирован.");
Work=false; // Больше не работатьreturn(0); // Выход из функцииcase133:Alert("Торговля запрещена.");
return(0); // Выход из функцииcase134:Alert("Недостаточно денег для совершения операции.");
return(0); // Выход из функцииdefault: Alert("Возникла ошибка ",Error); // Другие варианты return(0); // Выход из функции
}
}
//-------------------------------------------------------------- 11 --
Elementarer EA, sollte eine Position eröffnen, wenn sich der Parabolic SAR Indikator relativ zum Preisdiagramm ändert, funktioniert auf M15, SL und TP sind immer konstant für die eröffnete Position.
Der EA vergleicht die Indikatorpositionen der aktuellen und der vorherigen Kerze.
Es gibt keine Fehler oder Bugs während der Kompilierung, im Test in der Registerkarte "Ergebnisse" "Diagramm" "Bericht" ist leer, im Protokoll ist dies: "Bild".
Ich bin für den zweiten Tag codieren, ich habe noch nie codiert vor, ich las meine mql Bücher und suchte das Internet für mein Problem. Ich stecke in einer Sackgasse, bitte helfen Sie mir, wenn Sie können.
Was wird sich beim nächsten Mal ändern?
Was ich brauche, ist ein Verkaufssignal, das in Takt D (Situation 2 auf dem Diagramm) empfangen wird, um den in Takt A eröffneten Auftrag nicht zu schließen und in keiner Weise beeinflusst zu werden.
D.h., die Aufträge werden nach ihrer Eröffnung nicht vom Expert Advisor kontrolliert.
Ich danke Ihnen im Voraus.
Bitte helfen Sie mir, einen Teil des Sequent Demarque Codes an den EA https://www.mql5.com/ru/code/7372 anzuhängen.
funktioniert nicht auf diese Weise:
num=0:
for(i=Balken; i>=0; i--)
{
if ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4) && num!=0 )) {
num++;
wenn ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4))
kaufen.......
wenn (num==9)
schließen........
1. Zählen Sie die Anzahl der Aufträge der ersten Art
2. Zählen Sie die Anzahl der Aufträge vom Typ 2
3. Vergleichen Sie die Ergebnisse
Lieber Vinin. Herzlichen Dank!
Hier ist die Frage. Nehmen wir an, dass das Kaufsignal im EA generiert wird, wenn der Indikator (z.B. habe ich CCI genommen) ein bestimmtes Niveau (rote Linie) von unten nach oben kreuzt, während das Verkaufssignal generiert wird, wenn es von oben nach unten geht. Wie kann man erreichen, dass der Auftrag nur einmal während der Bildung des Balkens A geöffnet wird? Angenommen, der Indikator kreuzt das Niveau (die rote Linie) während der Bildung von Balken A mehrmals nach unten und oben. Wie ich bereits erwähnt habe, sollten wir dafür sorgen, dass ein Auftrag nur einmal eröffnet wird.
Dies setzt voraus, dass bei einem Verkaufssignal in Takt D (Situation 2 auf dem Diagramm) der in Takt A eröffnete Auftrag nicht geschlossen und in keiner Weise beeinflusst wird.
Das heißt, die Aufträge werden nicht vom EA kontrolliert, nachdem sie geöffnet wurden.
Vielen Dank im Voraus.
In der Tat springt der CCI so stark, dass wir ihn besser überprüfen sollten, nachdem die Bar geschlossen und eine neue eröffnet wurde.
Wenn wir prüfen wollen, ob die Eröffnungszeit einer Kerze unterschiedlich ist (wenn ja, wird die Order eröffnet) oder gleich ist (=> keine Order wird eröffnet), dann sollten wir bei jedem Übergang die Eröffnungszeit in der globalen Variable speichern.
Hier ist die Frage. Angenommen, unser EA zeigt ein Kaufsignal an, wenn der Indikator (z. B. der CCI) ein bestimmtes Niveau (die rote Linie) von unten nach oben überschreitet, und ein Verkaufssignal, wenn er nach unten geht. Wie kann man erreichen, dass der Auftrag nur einmal während der Bildung des Balkens A geöffnet wird? Angenommen, der Indikator kreuzt das Niveau (die rote Linie) während der Bildung von Balken A mehrmals nach unten und oben. Wie ich bereits erwähnt habe, sollten wir dafür sorgen, dass der Auftrag nur einmal geöffnet wird.
Was wir brauchen, ist, dass das Verkaufssignal in Takt D (Situation 2 im Diagramm) empfangen wird, um den in Takt A eröffneten Auftrag nicht zu schließen und in keiner Weise beeinflusst zu werden.
D.h., die Aufträge werden nach ihrer Eröffnung nicht vom Expert Advisor kontrolliert.
Ich danke Ihnen im Voraus.
Elementarer EA, sollte eine Position eröffnen, wenn sich der Parabolic SAR Indikator relativ zum Preisdiagramm ändert, funktioniert auf M15, SL und TP sind immer konstant für die eröffnete Position.
Der EA vergleicht die Indikatorpositionen der aktuellen und der vorherigen Kerze.
Es gibt keine Fehler oder Bugs während der Kompilierung, im Test in der Registerkarte "Ergebnisse" "Diagramm" "Bericht" ist leer, im Protokoll ist dies: "Bild".
Ich bin für den zweiten Tag codieren, ich habe noch nie codiert vor, ich las meine mql Bücher und suchte das Internet für mein Problem. Ich stecke in einer Sackgasse, bitte helfen Sie mir, wenn Sie können.
T.H.C. Versuchen Sie dies
T.H.C. Versuchen Sie dies.
Vielen Dank, ich hatte nicht mit einer so schnellen Antwort und einer solchen Änderung des Codes gerechnet.
Bitte empfehlen Sie andere Programmierbücher als Basic Mql
Vielen Dank, ich habe nicht erwartet, eine solche Geschwindigkeit und Änderungen in den Code.
Bitte empfehlen Sie weitere Bücher über Programmierung, außer Basic Mql.