[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 962
Stellarspace: Helfen Sie mit, den Indikator "wiederzubeleben". Nach den historischen Daten funktioniert es, aber nicht nach den neuen Daten. Ich bin mir nicht sicher, was ich damit anfangen soll.
Mir wäre es lieber, Sie würden die Idee in Worte fassen.
Und es ist nicht gut, zu spammen. Es reicht aus, eine Frage an einer Stelle zu stellen und nicht an vielen
Techno: Das Problem liegt nicht im Prozessor, sondern im EA-Code, irgendwo gibt es Engpässe, aber man kann sie nicht mit Worten diagnostizieren und beheben, man braucht Code
Hier ist ein Teil des Codes, der für jedes Ticken verantwortlich ist.
//***********************************************************************
BarTime=Time[0];
}else// На каждый тик
{
Количество = OrdersTotal(); // Количество ордеров на данный момент for(i=Количество-1; i>=0;i--) // Цикл перебора ордер
{
if (OrderSelect(i,SELECT_BY_POS)==true) // Если есть следующий
{
Tip=OrderType(); // Определения типа ордераAlert("Tip ордера=",Tip,", количество по счёту = ",i);
//-------------------------------------------------------------------- switch(Tip) // Переключатель на типы ордеров
{
case0: Alert("Ордер BUY",", i = ",i); // Если ордер BUY
A=OrderMagicNumber();
Alert("ТЛ_ТP вверх =",ТЛ_ТPвверх[A],", Bid = ",Bid,", МодифBuy = ",МодифBuy[A],", A = ",A);
string Номер_ордера = OrderTicket(); // Имя для создания надписи ордера на терминалеstring текст = Номер_ордера + Пусто + С1; // Прибавление к надписи С1Alert("Номер_ордера вверх = ",Номер_ордера); // СообщениеObjectFind(Номер_ордера);
ObjectCreate(Номер_ордера,OBJ_TEXT,0,Время1 Син_вверх[A],O1C[A]); // Создание надписи номера ордера
ObjectSetText(Номер_ордера,текст,13,"Arial",вверх);// Задание свойств надписиdouble Выше = O1C[A]+4*Point; // Координата стрелки вверхstring Значок = Время1 Син_вверх[A]+1; // Имя для создания рисунка стрелкиObjectFind(Значок);
ObjectCreate(Значок,OBJ_ARROW,0,Время1 Син_вверх[A],Выше);// Создание обьекта стрелки
ObjectSet(Значок,OBJPROP_ARROWCODE,241); // Создание стрелки
ObjectSet(Значок,OBJPROP_COLOR,вверх); // Создание цвета стрелкиAlert ("Значок = ",ObjectSet(Значок,OBJPROP_ARROWCODE,241));
Error=GetLastError(); // Назначение имени функции проверки ошибокswitch(Error) // Указатель ошибки
{
case4200 : Alert("Объект уже существует");
break; // Выход из switchdefault: Alert("Другая ошибка ",Error); //Другие варианты
}
if (NormalizeDouble(Bid,Digits)>=NormalizeDouble(ТЛ_ТPвверх[A],Digits) && МодифBuy[A]==false && ТЛ_ТPвверх[A] != 0) // Если цена = или > туннельной линии
{
МодифBuy[A]=OrderModify(OrderTicket(),NormalizeDouble(OrderOpenPrice(),Digits),OrderOpenPrice()+1*Point,OrderTakeProfit(),0);//МодифиAlert("МодифBuy=",МодифBuy);
if (МодифBuy[A]==true) // Получилось :)
{
Alert ("Ордер ",OrderTicket()," модифицирован:)");
break; // Из цикла модифи.
}
//--------------------------------------------------- 7 --
Error=GetLastError(); // Не получилось :(switch(Error) // Преодолимые ошибки
{
case130:Alert("Неправильные стопы");
break;
// Критические ошибкиcase2 : Alert("Общая ошибка.");
break; // Выход из switchcase133:Alert("Торговля запрещена");
break; // Выход из switchdefault: Alert("Возникла ошибка ",Error);//Др. ошибки
}
break; // Из цикла модифи.
}
break; // Выход из switchcase1: Alert("Ордер Sell , i = ",i); // Если ордер Sell
B=OrderMagicNumber();
Номер_ордера = OrderTicket(); // Имя для создания надписи ордера на терминале
текст = Номер_ордера + Пусто + С1; // Прибавление к надписи С1Alert("Номер_ордера вниз = ",Номер_ордера); // СообщениеObjectFind(Номер_ордера);
ObjectCreate(Номер_ордера,OBJ_TEXT,0,Время1 Син_вниз[B],O1C[B]); // Создание надписи номера ордера
ObjectSetText(Номер_ордера,текст,13,"Arial",вниз); // Задание свойств надписиdouble Ниже = O1C[B]-4*Point; // Координата стрелки вверх
Значок = Время1 Син_вниз[B]+1; // Имя для создания рисунка стрелкиObjectFind(Значок);
ObjectCreate(Значок,OBJ_ARROW,0,Время1 Син_вниз[B],Ниже); // Создание обьекта стрелки
ObjectSet(Значок,OBJPROP_ARROWCODE,242); // Создание стрелки
ObjectSet(Значок,OBJPROP_COLOR,вниз); // Создание цвета стрелкиAlert ("Значок = ",ObjectSet(Значок,OBJPROP_ARROWCODE,242));
Error=GetLastError(); // Назначение имени функции проверки ошибокswitch(Error) // Указатель ошибки
{
case4200 : Alert("Объект уже существует");
break; // Выход из switchdefault: Alert("Другая ошибка ",Error); //Другие варианты
}
Alert("ТЛ_ТP вниз =",ТЛ_ТPвниз[B],", Bid = ",Bid,", МодифSell = ",МодифSell[B], ", B = ",B);
if (NormalizeDouble(Bid,Digits)<=NormalizeDouble(ТЛ_ТPвниз[B],Digits) && МодифSell[B]==false && ТЛ_ТPвниз[B] != 0) // Если цена = или > туннельной линии
{
МодифSell[B]=OrderModify(OrderTicket(),NormalizeDouble(OrderOpenPrice(),Digits),OrderOpenPrice()-1*Point,OrderTakeProfit(),0);//МодифиAlert("МодифSell=",МодифSell[B]);
if (МодифSell[B]==true) // Получилось :)
{
Alert ("Ордер ",OrderTicket()," модифицирован:)");
break; // Из цикла модифи.
}
//--------------------------------------------------- 7 --
Error=GetLastError(); // Не получилось :(switch(Error) // Преодолимые ошибки
{
case130:Alert("Неправильные стопы");
break;
// Критические ошибкиcase2 : Alert("Общая ошибка.");
break; // Выход из switchcase133:Alert("Торговля запрещена");
break; // Выход из switchdefault: Alert("Возникла ошибка ",Error); //Др. ошибки
}
break; // Из цикла модифи.
}
break; // Выход из switchdefault: Alert("Другие ордера",", i = ",i);
}
}
} //Конец перебора орд.
} // Конец условия есть новая свеча или нет Alert("ТЛ_ТP вниз[",B,"] = ",ТЛ_ТPвниз[B],", ТЛ_ТP вверх[",A,"] = ",ТЛ_ТPвверх[A]);
return(0); // Выход из start()
}
//+------------------------------------------------------------------+
Entschuldigung für die zwei Beiträge - kann nicht in einen passen.
Vielleicht können Sie sehen, dass die Geschwindigkeit des Testers langsamer wird?
Entschuldigung für die zwei Beiträge - kann nicht in einen passen.
Vielleicht können Sie sehen, dass die Geschwindigkeit des Testers langsamer wird?
Nun, es ist sicher zu sagen, dass alle Fehlerbehandlungs- und Textfunktionen (Suchen, Erstellen) sowie die Warnmeldungen unnötig sind. Ohne sie wird alles schneller gehen. Das ist alles über diesen Teil des Codes.
Entschuldigung für zwei Nachrichten - es passt nicht in eine.
Vielleicht können Sie sehen, dass es die Zählgeschwindigkeit im Testgerät verlangsamt?
Die Grafik wird definitiv langsamer.
Und vergessen Sie nicht, dass es in mql4 eine vollständige Berechnung der Bedingungen in if() gibt, d.h. wenn Sie mehrere && haben, werden alle Werte berechnet und verglichen, obwohl ein false ausreicht, damit die Konstruktion mit && falsch ist
if (NormalizeDouble(Bid,Digits)<=NormalizeDouble(ТЛ_ТPвниз[B],Digits) && МодифSell[B]==false && ТЛ_ТPвниз[B] != 0) // Если цена = или > туннельной линии
ist es möglich, sie in mehrere if() aufzuteilen
if (МодифSell[B]==false) // Если цена = или > туннельной линии
{ if(NormalizeDouble(Bid,Digits)<=NormalizeDouble(ТЛ_ТPвниз[B],Digits) && ТЛ_ТPвниз[B] != 0)
{
...........
in diesem Fall wird nach dem ersten if() das gesamte folgende Konstrukt nicht mehr berücksichtigt
Techno: Tatsächlich führt dieser Code nur 2 Auftragsänderungen durch, alles andere ist offensichtlich überflüssig...
Nikolay, ich danke dir. Ich habe Warnungen und Fehlerbehandlung entfernt. Ich kann keinen sichtbaren Geschwindigkeitsgewinn feststellen. Ja, die Aufträge werden hier geändert, und die Nummer des Marktauftrags und der Ort, an dem er geöffnet wurde, werden grafisch dargestellt. Ich habe die Textfunktionen belassen, da sie auf dem Diagramm markieren, welcher Auftrag geöffnet wurde (dies ist für die weitere Analyse notwendig).
volshebnik: Nikolai, ich danke dir. Ich habe alle Warnungen und Fehlerbehandlungen entfernt. Es gibt keine sichtbare Erhöhung der Geschwindigkeit. Ja, die Aufträge werden hier geändert und die Auftragsnummer und der Ort der offenen Bedingung werden grafisch angezeigt. Ich habe die Textfunktionen belassen, da sie auf dem Diagramm markieren, welcher Auftrag geöffnet wurde (wir brauchen sie für die weitere Analyse).
Wir müssen einen anderen Weg der Analyse finden, grafische Funktionen sind sehr langsam
Techno: Sie müssen einen anderen Weg zur Analyse finden, grafische Funktionen sind sehr langsam.
Sie könnten alle Grafiken in eine separate Funktion ziehen und diese mit einer Bedingung aufrufen. Allerdings dachte ich, dass grafische Funktionen und Warnmeldungen bei der Optimierung nicht funktionieren und die Prüfgeschwindigkeit nicht verringern.
granit77: Sie könnten alle Grafiken in eine separate Funktion ziehen und diese mit einer Bedingung aufrufen. Allerdings dachte ich, dass grafische Funktionen und Warnmeldungen bei der Optimierung nicht funktionieren und die Prüfgeschwindigkeit nicht verringern.
Ich spreche nicht von Optimierung, ich spreche von einfachen Tests. Ein Monatstest dauert 7 Minuten.
Helfen Sie mit, den Indikator "wiederzubeleben". Nach den historischen Daten funktioniert es, aber nicht nach den neuen Daten. Ich bin mir nicht sicher, was ich damit anfangen soll.
Mir wäre es lieber, Sie würden die Idee in Worte fassen.
Und es ist nicht gut, zu spammen. Es reicht aus, eine Frage an einer Stelle zu stellen und nicht an vielen
Das Problem liegt nicht im Prozessor, sondern im EA-Code, irgendwo gibt es Engpässe, aber man kann sie nicht mit Worten diagnostizieren und beheben, man braucht Code
Hier ist ein Teil des Codes, der für jedes Ticken verantwortlich ist.
Entschuldigung für die zwei Beiträge - kann nicht in einen passen.
Vielleicht können Sie sehen, dass die Geschwindigkeit des Testers langsamer wird?
Entschuldigung für die zwei Beiträge - kann nicht in einen passen.
Vielleicht können Sie sehen, dass die Geschwindigkeit des Testers langsamer wird?
Entschuldigung für zwei Nachrichten - es passt nicht in eine.
Vielleicht können Sie sehen, dass es die Zählgeschwindigkeit im Testgerät verlangsamt?
Die Grafik wird definitiv langsamer.
Und vergessen Sie nicht, dass es in mql4 eine vollständige Berechnung der Bedingungen in if() gibt, d.h. wenn Sie mehrere && haben, werden alle Werte berechnet und verglichen, obwohl ein false ausreicht, damit die Konstruktion mit && falsch ist
ist es möglich, sie in mehrere if() aufzuteilen
in diesem Fall wird nach dem ersten if() das gesamte folgende Konstrukt nicht mehr berücksichtigt
Tatsächlich führt dieser Code nur 2 Auftragsänderungen durch, alles andere ist offensichtlich überflüssig...
Nikolai, ich danke dir. Ich habe alle Warnungen und Fehlerbehandlungen entfernt. Es gibt keine sichtbare Erhöhung der Geschwindigkeit. Ja, die Aufträge werden hier geändert und die Auftragsnummer und der Ort der offenen Bedingung werden grafisch angezeigt. Ich habe die Textfunktionen belassen, da sie auf dem Diagramm markieren, welcher Auftrag geöffnet wurde (wir brauchen sie für die weitere Analyse).
Sie müssen einen anderen Weg zur Analyse finden, grafische Funktionen sind sehr langsam.
Sie könnten alle Grafiken in eine separate Funktion ziehen und diese mit einer Bedingung aufrufen. Allerdings dachte ich, dass grafische Funktionen und Warnmeldungen bei der Optimierung nicht funktionieren und die Prüfgeschwindigkeit nicht verringern.