[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 962
Stellarspace: Aidez à "relancer" l'indicateur. Selon les données historiques, cela fonctionne, mais pas selon les nouvelles données. Je ne suis pas sûr de ce qu'il faut en faire.
Je préférerais que vous mettiez l'idée en mots.
Et ce n'est pas bon de spammer. Il suffit de poser une question à un endroit et pas à plusieurs.
Techno: Le problème n'est pas dans le processeur, mais dans le code EA, quelque part il y a des goulots d'étranglement, mais vous ne pouvez pas les diagnostiquer et les réparer par des mots, vous avez besoin du code .
Voici un morceau de code responsable de chaque tique.
//***********************************************************************
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()
}
//+------------------------------------------------------------------+
Désolé pour les deux posts - impossible de tenir en un seul.
Peut-être pouvez-vous voir que la vitesse de notation du testeur ralentit ?
Désolé pour les deux posts - impossible de tenir en un seul.
Peut-être pouvez-vous voir que la vitesse de notation du testeur ralentit ?
On peut dire que toutes les fonctions de gestion des erreurs et de texte (recherche, création) sont redondantes, de même que les alertes. Sans eux, tout fonctionnera plus vite. C'est tout pour ce bout de code.
Désolé pour les deux messages - ça ne tient pas en un seul.
Peut-être pouvez-vous constater que cela ralentit la vitesse de comptage dans le testeur ?
Les graphiques sont définitivement en train de ralentir.
Et n'oubliez pas que dans mql4 il y a un calcul complet des conditions dans if(), c'est-à-dire que si vous avez plusieurs && alors toutes les valeurs seront calculées et comparées, bien qu'un seul faux soit suffisant pour que la construction avec && soit fausse.
if (NormalizeDouble(Bid,Digits)<=NormalizeDouble(ТЛ_ТPвниз[B],Digits) && МодифSell[B]==false && ТЛ_ТPвниз[B] != 0) // Если цена = или > туннельной линии
il est possible de le diviser en plusieurs if()
if (МодифSell[B]==false) // Если цена = или > туннельной линии
{ if(NormalizeDouble(Bid,Digits)<=NormalizeDouble(ТЛ_ТPвниз[B],Digits) && ТЛ_ТPвниз[B] != 0)
{
...........
dans ce cas, après que le premier if() ne soit pas pris en compte, toute la construction ci-dessous ne sera pas considérée
Techno: en fait ce code n'effectue que 2 modifications d'ordre, tout le reste est évidemment superflu...
Nikolay, merci. J'ai supprimé les alertes et la gestion des erreurs. Je ne constate aucune amélioration visuelle de la vitesse. Oui, les ordres sont modifiés ici et le numéro de l'ordre de marché et le lieu de sa condition d'ouverture sont indiqués graphiquement. J'ai laissé les fonctions de texte car elles marquent sur le graphique quel ordre a été ouvert (c'est nécessaire pour une analyse ultérieure).
volshebnik: Nikolaï, merci. J'ai supprimé toutes les alertes et la gestion des erreurs. Il n'y a pas d'augmentation visible de la vitesse. Oui, les ordres sont modifiés ici et le numéro de l'ordre et le lieu de la condition ouverte sont indiqués graphiquement. J'ai laissé les fonctions de texte car elles indiquent sur le graphique quel ordre a été ouvert (nous en avons besoin pour une analyse ultérieure).
Nous devons trouver un autre moyen d'analyse, les fonctions graphiques sont très lentes.
Techno: vous devez trouver un autre moyen d'analyse, les fonctions graphiques sont très lentes.
Vous pourriez rassembler tous les graphiques dans une fonction distincte et l'appeler avec une condition. Bien que je pensais que les fonctions graphiques et les alertes ne fonctionnent pas lors de l'optimisation, et ne réduisent pas la vitesse de test.
granit77: Vous pourriez rassembler tous les graphiques dans une fonction distincte et l'appeler avec une condition. Bien que je pensais que les fonctions graphiques et les alertes ne fonctionnent pas lors de l'optimisation, et ne réduisent pas la vitesse des tests.
Je ne parle pas d'optimisation, je parle de simples tests. Un test mensuel dure 7 minutes.
Aidez à "relancer" l'indicateur. Selon les données historiques, cela fonctionne, mais pas selon les nouvelles données. Je ne suis pas sûr de ce qu'il faut en faire.
Je préférerais que vous mettiez l'idée en mots.
Et ce n'est pas bon de spammer. Il suffit de poser une question à un endroit et pas à plusieurs.
Le problème n'est pas dans le processeur, mais dans le code EA, quelque part il y a des goulots d'étranglement, mais vous ne pouvez pas les diagnostiquer et les réparer par des mots, vous avez besoin du code
.
Voici un morceau de code responsable de chaque tique.
Désolé pour les deux posts - impossible de tenir en un seul.
Peut-être pouvez-vous voir que la vitesse de notation du testeur ralentit ?
Désolé pour les deux posts - impossible de tenir en un seul.
Peut-être pouvez-vous voir que la vitesse de notation du testeur ralentit ?
Désolé pour les deux messages - ça ne tient pas en un seul.
Peut-être pouvez-vous constater que cela ralentit la vitesse de comptage dans le testeur ?
Les graphiques sont définitivement en train de ralentir.
Et n'oubliez pas que dans mql4 il y a un calcul complet des conditions dans if(), c'est-à-dire que si vous avez plusieurs && alors toutes les valeurs seront calculées et comparées, bien qu'un seul faux soit suffisant pour que la construction avec && soit fausse.
il est possible de le diviser en plusieurs if()
dans ce cas, après que le premier if() ne soit pas pris en compte, toute la construction ci-dessous ne sera pas considérée
en fait ce code n'effectue que 2 modifications d'ordre, tout le reste est évidemment superflu...
Nikolaï, merci. J'ai supprimé toutes les alertes et la gestion des erreurs. Il n'y a pas d'augmentation visible de la vitesse. Oui, les ordres sont modifiés ici et le numéro de l'ordre et le lieu de la condition ouverte sont indiqués graphiquement. J'ai laissé les fonctions de texte car elles indiquent sur le graphique quel ordre a été ouvert (nous en avons besoin pour une analyse ultérieure).
vous devez trouver un autre moyen d'analyse, les fonctions graphiques sont très lentes.
Vous pourriez rassembler tous les graphiques dans une fonction distincte et l'appeler avec une condition. Bien que je pensais que les fonctions graphiques et les alertes ne fonctionnent pas lors de l'optimisation, et ne réduisent pas la vitesse des tests.