[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 962
Stellarspace: Ajude a "reanimar" o indicador. De acordo com os dados históricos, funciona, mas não de acordo com os novos dados. Não tenho certeza do que fazer com ele.
Prefiro que você coloque a idéia em palavras.
E não é bom fazer spam. Basta fazer a pergunta em um só lugar e não em muitos
Techno: O problema não está no processador, mas no código EA, em algum lugar há gargalos, mas você não pode diagnosticá-los e corrigi-los por palavras, você precisa do código
Aqui está um pedaço de código responsável por cada carrapato.
//***********************************************************************
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()
}
//+------------------------------------------------------------------+
Desculpe pelos dois postos - não cabe em um só.
Talvez você possa ver que a velocidade de pontuação do testador está diminuindo?
Talvez você possa ver que a velocidade de pontuação do testador está diminuindo?
Bem, é seguro dizer que todas as funções de manipulação de erros e de texto (encontrar, criar) são redundantes, assim como os Alertas. Sem eles, todos trabalharão mais rapidamente. Isso é tudo sobre este pedaço de código.
Talvez você possa ver que isso diminui a velocidade de contagem no testador ?
Os gráficos estão definitivamente diminuindo a velocidade.
E não esqueça que em mql4 há um cálculo completo das condições em if(), ou seja, se você tiver vários && então todos os valores serão calculados e comparados, embora um falso seja suficiente para fazer a construção com && ser falso
if (NormalizeDouble(Bid,Digits)<=NormalizeDouble(ТЛ_ТPвниз[B],Digits) && МодифSell[B]==false && ТЛ_ТPвниз[B] != 0) // Если цена = или > туннельной линии
é possível dividi-lo em vários se()
if (МодифSell[B]==false) // Если цена = или > туннельной линии
{ if(NormalizeDouble(Bid,Digits)<=NormalizeDouble(ТЛ_ТPвниз[B],Digits) && ТЛ_ТPвниз[B] != 0)
{
...........
neste caso, após o primeiro se() não for levado em conta, não será considerada a construção inteira abaixo
Techno: de fato, este código realiza apenas 2 modificações de pedidos, tudo o resto é obviamente supérfluo
Nikolay, obrigado. Retirei os alertas e o tratamento de erros. Não consigo notar nenhuma melhoria na velocidade visual. Sim, as ordens são modificadas aqui e o número da ordem de mercado e a posição aberta são mostrados graficamente. Deixei as funções do texto conforme elas marcam no gráfico cuja ordem foi aberta (é necessário para análise posterior).
volshebnik: Nikolai, obrigado. Removi todos os alertas e tratamento de erros. Não há aumento visível na velocidade. Sim, os pedidos são modificados aqui e o número do pedido e o local da condição aberta são indicados graficamente. Deixei as funções do texto conforme elas marcam no gráfico cuja ordem foi aberta (precisamos dele para análise posterior).
Temos que encontrar outra forma de análise, as funções gráficas são muito lentas
Techno: você tem que encontrar outra maneira de analisar, as funções gráficas são muito lentas
Você poderia puxar todos os gráficos para uma função separada e chamá-la com uma condição. Embora eu pensasse que as funções gráficas e os alertas não funcionam ao otimizar, e não reduzem a velocidade dos testes.
granit77: Você poderia puxar todos os gráficos para uma função separada e chamá-la com uma condição. Embora eu pensasse que ao otimizar, as funções gráficas e os alertas não funcionam, e não reduzem a velocidade do teste.
Não estou falando de otimização, estou falando de testes simples. O teste de um mês dura 7 minutos.
Ajude a "reanimar" o indicador. De acordo com os dados históricos, funciona, mas não de acordo com os novos dados. Não tenho certeza do que fazer com ele.
Prefiro que você coloque a idéia em palavras.
E não é bom fazer spam. Basta fazer a pergunta em um só lugar e não em muitos
O problema não está no processador, mas no código EA, em algum lugar há gargalos, mas você não pode diagnosticá-los e corrigi-los por palavras, você precisa do código
Aqui está um pedaço de código responsável por cada carrapato.
Desculpe pelos dois postos - não cabe em um só.
Talvez você possa ver que a velocidade de pontuação do testador está diminuindo?
Desculpe pelos dois postos - não cabe em um só.
Talvez você possa ver que a velocidade de pontuação do testador está diminuindo?
Desculpe por duas mensagens - não cabe em uma só.
Talvez você possa ver que isso diminui a velocidade de contagem no testador ?
Os gráficos estão definitivamente diminuindo a velocidade.
E não esqueça que em mql4 há um cálculo completo das condições em if(), ou seja, se você tiver vários && então todos os valores serão calculados e comparados, embora um falso seja suficiente para fazer a construção com && ser falso
é possível dividi-lo em vários se()
neste caso, após o primeiro se() não for levado em conta, não será considerada a construção inteira abaixo
de fato, este código realiza apenas 2 modificações de pedidos, tudo o resto é obviamente supérfluo
Nikolai, obrigado. Removi todos os alertas e tratamento de erros. Não há aumento visível na velocidade. Sim, os pedidos são modificados aqui e o número do pedido e o local da condição aberta são indicados graficamente. Deixei as funções do texto conforme elas marcam no gráfico cuja ordem foi aberta (precisamos dele para análise posterior).
você tem que encontrar outra maneira de analisar, as funções gráficas são muito lentas
Você poderia puxar todos os gráficos para uma função separada e chamá-la com uma condição. Embora eu pensasse que ao otimizar, as funções gráficas e os alertas não funcionam, e não reduzem a velocidade do teste.