Bom dia a todos! Uma pergunta sobre mql4, mais especificamente sobre a função ArraySort() Aqui está meu código
double LoY[31][31];
int P1;
voidOnTick()
{
if (TimeCurrent()==1262568096)
{
for(int r=0; r<31;r++)
{
LoY[r][0]=1.6104;
LoY[r][1]=r;
P1=1;
}
}
if (TimeCurrent()>1262568095)
{
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
for( r=0; r<31;r++)
Print("-------------------------------------LoY[r][1]--------------=", LoY[r][1]," r ", r," LoY[r][0] ", DoubleToString( LoY[r][0],5));
}
if (Bid-LoY[0][0]>=0.0030)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+300*Point,Ask-100*Point,"300",0);
LoY[0][0]=Bid;
}
}
Quando LoY[0][0] tem o valor Bid( 1,6134) após a ordem ter sido aberta, a função ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND) ordenou o array em ordem ascendente pela primeira dimensão e moveu o elemento do array com o maior valor para o topo do array. Assim, LoY[0][0] junto com seu valor se torna LoY[30][0] na matriz ordenada em ordem ascendente. Isto é lógico e, portanto, estou de acordo com ele.
O que, em minha opinião, não é lógico ou aceitável para mim? Por que o ArraySort() LoY[15][0] colocou 0 sob o índice, apesar de seu valor (1,61040) ser igual aos valores de todos os outros itens do array, exceto o trigésimo. O mesmo não é claro, porque o ArraySort()LoY[30][0] colocou o índice 15, apesar de seu valor (1,61040) ser igual aos valores de todos os outros elementos do array, exceto o trigésimo.
Uma pergunta: como fazer um elemento com índice 0 ser LoY[1][0] neste tick , um elemento com índice 15 serLoY[15][0] e um elemento com índice 29 ser LoY[30][0] . Em outras palavras, como fazer uma função para não ordenar mais elementos com o mesmo valor? Não é lógico e sem sentido.
Для работы с графикой в MQL5 создана специальная библиотека Graphic.mqh. В статье описан пример ее практического применения и поясняется сама суть сортировок. По каждой сортировке существует как минимум отдельная статья, а по ряду из них уже опубликованы целые исследования, поэтому здесь описывается лишь общая идея.
Muito obrigado pelo conselho. Você poderia me dizer se existem outras opções de ordenação em mql4? Em caso afirmativo, onde podem ser encontrados no diretório?
MakarFX: Muito estranho, em todos os novos gráficos abertos coloca uma marca, apenas um gráfico é ignorado (
Leia cuidadosamente a documentação e o código de exemplo. Seu laço não está organizado corretamente.
//--- переменные для идентификаторов графиковlong currChart,prevChart=ChartFirst();
int i=0,limit=100;
Print("ChartFirst = ",ChartSymbol(prevChart)," ID = ",prevChart);
while(i<limit)// у нас наверняка не больше 100 открытых графиков
{
currChart=ChartNext(prevChart); // на основании предыдущего получим новый графикif(currChart<0) break; // достигли конца списка графиковPrint(i,ChartSymbol(currChart)," ID =",currChart);
prevChart=currChart;// запомним идентификатор текущего графика для ChartNext()
i++;// не забудем увеличить счетчик
}
Não me diga isso por e enquanto os laços funcionam da mesma maneira. Esse não é o problema, mas sim as linhas destacadas.
Uma pergunta sobre mql4, mais especificamente sobre a função ArraySort()
Aqui está meu código
Quando LoY[0][0] tem o valor Bid( 1,6134) após a ordem ter sido aberta, a função ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND) ordenou o array em ordem ascendente pela primeira dimensão e moveu o elemento do array com o maior valor para o topo do array. Assim, LoY[0][0] junto com seu valor se torna LoY[30][0] na matriz ordenada em ordem ascendente. Isto é lógico e, portanto, estou de acordo com ele.
O que, em minha opinião, não é lógico ou aceitável para mim? Por que o ArraySort() LoY[15][0] colocou 0 sob o índice, apesar de seu valor (1,61040) ser igual aos valores de todos os outros itens do array, exceto o trigésimo. O mesmo não é claro, porque o ArraySort()LoY[30][0] colocou o índice 15, apesar de seu valor (1,61040) ser igual aos valores de todos os outros elementos do array, exceto o trigésimo.
Uma pergunta: como fazer um elemento com índice 0 ser LoY[1][0] neste tick , um elemento com índice 15 serLoY[15][0] e um elemento com índice 29 ser LoY[30][0]
. Em outras palavras, como fazer uma função para não ordenar mais elementos com o mesmo valor? Não é lógico e sem sentido.
Obrigado por sua ajuda.
Este é provavelmente o algoritmo de classificação. Há algumas permutações dos elementos da matriz.
Tente outras opções de ordenação.
Este é provavelmente o algoritmo de classificação. Há algumas permutações dos elementos da matriz.
Tente outras opções de ordenação.
Muito obrigado pelo conselho. Você poderia me dizer se existem outras opções de ordenação em mql4? Em caso afirmativo, onde podem ser encontrados no diretório?
experimente:
embora a função seja para uma matriz unidimensional, mas pode ser redesenhada
experimente:
É verdade que a função é para uma matriz unidimensional, mas ela pode ser retrabalhada.
Muito obrigado.
Uma palavra de conselho, por favor,
O código procura por gráficos abertos e cria uma etiqueta com o nome do símbolo, mas se dois gráficos tiverem o mesmo símbolo,
O que estou fazendo de errado?
Uma palavra de conselho, por favor,
O código procura por gráficos abertos e cria uma etiqueta com o nome do símbolo, mas se dois gráficos tiverem o mesmo símbolo,
O que estou fazendo de errado?
Os IDs dos gráficos (ChartID()) do mesmo símbolo são diferentes. Utilize-os.
Os identificadores ChartID() do mesmo símbolo são diferentes. Utilize-os.
ChartFirst()+iou seja, passar por todos os gráficos abertos
Ou eu o entendi mal? Há alguma forma de deixar claro, sob a forma de código?
Muito estranho, em todos os novos gráficos abertos coloca uma marca, apenas um gráfico é ignorado (
Leia cuidadosamente a documentação e o código de exemplo. Seu laço não está organizado corretamente.
Não me diga isso por e enquanto os laços funcionam da mesma maneira. Esse não é o problema, mas sim as linhas destacadas.