[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 962
Techno: Il problema non è nel processore, ma nel codice EA, da qualche parte ci sono dei colli di bottiglia, ma non si può diagnosticare e risolvere a parole, è necessario il codice
Qui c'è un pezzo di codice responsabile di ogni tick.
//***********************************************************************
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()
}
//+------------------------------------------------------------------+
Scusa per i due post - non ci sta in uno solo.
Forse puoi vedere che la velocità di punteggio del tester sta rallentando?
Forse puoi vedere che la velocità di punteggio del tester sta rallentando?
Beh, si può dire che tutta la gestione degli errori e le funzioni di testo (trovare, creare) sono ridondanti, così come gli avvisi. Senza di loro tutto funzionerà più velocemente. Questo è tutto su questo pezzo di codice.
Scusa per i due messaggi - non ci sta in uno solo.
Forse puoi vedere che rallenta la velocità di conteggio nel tester?
La grafica sta decisamente rallentando.
E non dimenticate che in mql4 c'è un calcolo completo delle condizioni in if(), cioè se avete diversi && allora tutti i valori saranno calcolati e confrontati, anche se un falso è sufficiente per rendere falsa la costruzione con &&
if (NormalizeDouble(Bid,Digits)<=NormalizeDouble(ТЛ_ТPвниз[B],Digits) && МодифSell[B]==false && ТЛ_ТPвниз[B] != 0) // Если цена = или > туннельной линии
è possibile dividerlo in diversi if()
if (МодифSell[B]==false) // Если цена = или > туннельной линии
{ if(NormalizeDouble(Bid,Digits)<=NormalizeDouble(ТЛ_ТPвниз[B],Digits) && ТЛ_ТPвниз[B] != 0)
{
...........
in questo caso, dopo che il primo if() non è preso in considerazione, l'intero costrutto sottostante non sarà considerato
Techno: infatti questo codice esegue solo 2 modifiche di ordine, tutto il resto è ovviamente superfluo...
Nikolay, grazie. Ho rimosso gli avvisi e la gestione degli errori. Non posso notare alcun miglioramento della velocità visiva. Sì, gli ordini vengono modificati qui e il numero dell'ordine di mercato e la posizione aperta sono mostrati graficamente. Ho lasciato le funzioni di testo perché segnano sul grafico quale ordine è stato aperto (è necessario per ulteriori analisi).
volshebnik: Nikolai, grazie. Ho rimosso tutti gli avvisi e la gestione degli errori. Non c'è un aumento visibile della velocità. Sì, gli ordini vengono modificati qui e il numero dell'ordine e il luogo della condizione aperta sono indicati graficamente. Ho lasciato le funzioni di testo perché segnano sul grafico quale ordine è stato aperto (ne abbiamo bisogno per ulteriori analisi).
Dobbiamo trovare un altro modo di analisi, le funzioni grafiche sono molto lente
Techno: dovete trovare un altro modo per analizzare, le funzioni grafiche sono molto lente
Potreste tirare tutti i grafici in una funzione separata e chiamarla con una condizione. Anche se ho pensato che le funzioni grafiche e gli avvisi non funzionano quando si ottimizza, e non riducono la velocità dei test.
granit77: Potreste tirare tutti i grafici in una funzione separata e chiamarla con una condizione. Anche se ho pensato che le funzioni grafiche e gli avvisi non funzionano quando si ottimizza, e non riducono la velocità dei test.
Non sto parlando di ottimizzazione, ma di semplici test. Un test mensile dura 7 minuti.
Aiuta a "rianimare" l'indicatore. Secondo i dati storici funziona, ma non secondo quelli nuovi. Non sono sicuro di cosa farne.
Preferirei che tu mettessi l'idea in parole.
E non è bene spammare. È sufficiente porre la domanda in un luogo e non in molti
Il problema non è nel processore, ma nel codice EA, da qualche parte ci sono dei colli di bottiglia, ma non si può diagnosticare e risolvere a parole, è necessario il codice
Qui c'è un pezzo di codice responsabile di ogni tick.
Scusa per i due post - non ci sta in uno solo.
Forse puoi vedere che la velocità di punteggio del tester sta rallentando?
Scusa per i due post - non ci sta in uno solo.
Forse puoi vedere che la velocità di punteggio del tester sta rallentando?
Scusa per i due messaggi - non ci sta in uno solo.
Forse puoi vedere che rallenta la velocità di conteggio nel tester?
La grafica sta decisamente rallentando.
E non dimenticate che in mql4 c'è un calcolo completo delle condizioni in if(), cioè se avete diversi && allora tutti i valori saranno calcolati e confrontati, anche se un falso è sufficiente per rendere falsa la costruzione con &&
è possibile dividerlo in diversi if()
in questo caso, dopo che il primo if() non è preso in considerazione, l'intero costrutto sottostante non sarà considerato
infatti questo codice esegue solo 2 modifiche di ordine, tutto il resto è ovviamente superfluo...
Nikolai, grazie. Ho rimosso tutti gli avvisi e la gestione degli errori. Non c'è un aumento visibile della velocità. Sì, gli ordini vengono modificati qui e il numero dell'ordine e il luogo della condizione aperta sono indicati graficamente. Ho lasciato le funzioni di testo perché segnano sul grafico quale ordine è stato aperto (ne abbiamo bisogno per ulteriori analisi).
dovete trovare un altro modo per analizzare, le funzioni grafiche sono molto lente
Potreste tirare tutti i grafici in una funzione separata e chiamarla con una condizione. Anche se ho pensato che le funzioni grafiche e gli avvisi non funzionano quando si ottimizza, e non riducono la velocità dei test.