ANDREY: Bom dia a todos vocês! Estou testando este algoritmo no testador MT4 usando o mql4. Preciso da função Print() para produzir o preço de licitação em log com 5 (cinco) casas decimais. Mas imprimiria apenas 4 (quatro) casas decimais. Por favor, me diga como corrigir meu erro, se ele existir. Aqui está meu código.
Ao mesmo tempo, se eu imprimir usando Print() o preço de abertura e fechamento do pedido( por SL e TP), então Print() imprime o preço com 5(cinco) dígitos. Obrigado a todos por sua ajuda.
Google "array find repetitions" - Acho que você vai encontrar algo
enum EResult{Ok,AllocError};
template<typename T>
EResult GetRepeat(const T &arr[],T &ret[],uint count){
int size=ArraySize(arr);
if (ArrayResize(ret,size)!=size) return AllocError;
int ii=0;
for (int i=0;i<size;){
T tmp=arr[i];
uint repeatCount=1;
while(++i<size&&arr[i]==tmp) ++repeatCount;
if (repeatCount>=count) ret[ii++]=tmp;}
returnArrayResize(ret,ii)==ii?Ok:AllocError;
}
voidOnStart()
{
int arr[]={1,2,4,4,4,55,55,7,7,7,7,7,8,9,77,66,66,66};
int ret[];
if (!GetRepeat(arr,ret,3)) ArrayPrint(ret);
}
Se você puder me ajudar a entender o que está errado ao tentar ler os dados do buffer indicador.
Aqui está o código da EA:
if (IsTesting())
{
Trend = GlobalVariableGet(GV_tradesTrend);
TrendUP = iCustom(NULL,0,"Used\\# Once Trades Trend",3,0);
TrendDN = iCustom(NULL,0,"Used\\# Once Trades Trend",4,0);
if (TrendUP>0) {Trend=1; GlobalVariableSet(GV_tradesTrend,1);}
if (TrendDN>0) {Trend=-1;GlobalVariableSet(GV_tradesTrend,-1);}
if (Trend==1) {GlobalVariableSet(GV_Trend,1);}
if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
if (Trend==0) {GlobalVariableSet(GV_Trend,0);}
}
else
{
Trend = GetLastTrendChange();
if (Trend==1) {GlobalVariableSet(GV_Trend,1);}
if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
if (Trend==0) {GlobalVariableSet(GV_Trend,0);}
}
//+----------------------------------------------------------------------------+int GetLastTrendChange()
{
int trendType=0;
int y=0;
int t=500;
while (y<t)
{
if (iOpen(NULL,0,t)==y) {return(0);}
trendType=FindTrendChange(y);
if (trendType==1 || trendType==-1) {return(trendType);}
y++;
}
return(0);
}
//+----------------------------------------------------------------------------+int FindTrendChange(int index)
{
double trendUP,trendDN;
int trendType=0;
trendUP = iCustom(NULL,0,"Used\\# Once Trades Trend",3,index);
trendDN = iCustom(NULL,0,"Used\\# Once Trades Trend",4,index);
if (trendUP>0) {trendType=1;}
if (trendDN>0) {trendType=-1;}
return (trendType);
}
//+----------------------------------------------------------------------------+
Em testes reais e em testes em busca do último valor através da função funciona, mas o teste é catastroficamente lento (o teste de meio ano se estende por vários dias).
Então decidi usar o swap no teste e salvar o último valor para a variável global - o Expert Advisor deixou de ver os dados do buffer. E mesmo que os amortecedores vazios sejam 0, por alguma razão as variáveis da EA tomam valores VAZIO_VALOR e não mudam.
Mas quando coloco o cursor sobre a linha buffer na janela de dados, dois valores aparecem na ponta da ferramenta, e o primeiro valor é 0, por exemplo, Valor 5; 0,0000; 0,8855.
Eu não consigo descobrir, embora eu espreite no código indicador. A busca na Internet e na documentação não ajudou. Alguém pode me informar por que o teste é tão lento quando eu tento usar este indicador?
Bom dia a todos vocês!
Estou testando este algoritmo no testador MT4 usando o mql4. Preciso da função Print() para produzir o preço de licitação em log com 5 (cinco) casas decimais. Mas imprimiria apenas 4 (quatro) casas decimais. Por favor, me diga como corrigir meu erro, se ele existir.
Aqui está meu código.
}
Ao mesmo tempo, se eu imprimir usando Print() o preço de abertura e fechamento do pedido( por SL e TP), então Print() imprime o preço com 5(cinco) dígitos.
Obrigado a todos por sua ajuda.
DoubleToString(), não NormalizeDouble()
Eu lhe disse que não gostei da minha decisão (((
Sou preguiçoso demais para escrever novamente.
Google "array find repetitions" - Acho que você vai encontrar algo
DoubleToString(), não NormalizeDouble()
Muito obrigado por seu apoio informativo.
usar o TimeToStruct()
https://www.mql5.com/ru/docs/dateandtime/timetostruct
usar o TimeToStruct()
https://www.mql5.com/ru/docs/dateandtime/timetostruct
Sim, tenho-o no mt4
funciona em MT4
funciona em MT4
Não entendo como posso obter o valor de minuto quando aposição foi aberta a partir desta estrutura que retorna trompete...
datetime o_open = OrderOpenTime();
MqlDateTime dt_struct;
TimeToStruct( o_open, dt_struct;)
int min = dt_struct.min;
Se você puder me ajudar a entender o que está errado ao tentar ler os dados do buffer indicador.
Aqui está o código da EA:
if (IsTesting()) { Trend = GlobalVariableGet(GV_tradesTrend); TrendUP = iCustom(NULL,0,"Used\\# Once Trades Trend",3,0); TrendDN = iCustom(NULL,0,"Used\\# Once Trades Trend",4,0); if (TrendUP>0) {Trend=1; GlobalVariableSet(GV_tradesTrend,1);} if (TrendDN>0) {Trend=-1;GlobalVariableSet(GV_tradesTrend,-1);} if (Trend==1) {GlobalVariableSet(GV_Trend,1);} if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);} if (Trend==0) {GlobalVariableSet(GV_Trend,0);} } else { Trend = GetLastTrendChange(); if (Trend==1) {GlobalVariableSet(GV_Trend,1);} if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);} if (Trend==0) {GlobalVariableSet(GV_Trend,0);} }Em testes reais e em testes em busca do último valor através da função funciona, mas o teste é catastroficamente lento (o teste de meio ano se estende por vários dias).
Então decidi usar o swap no teste e salvar o último valor para a variável global - o Expert Advisor deixou de ver os dados do buffer. E mesmo que os amortecedores vazios sejam 0, por alguma razão as variáveis da EA tomam valores VAZIO_VALOR e não mudam.
Mas quando coloco o cursor sobre a linha buffer na janela de dados, dois valores aparecem na ponta da ferramenta, e o primeiro valor é 0, por exemplo, Valor 5; 0,0000; 0,8855.
Eu não consigo descobrir, embora eu espreite no código indicador. A busca na Internet e na documentação não ajudou. Alguém pode me informar por que o teste é tão lento quando eu tento usar este indicador?
Por favor, me ajude!