Simplificado, o CopyOpen é desnecessário para a OnCalculate, mas então ele vê apenas a história a partir da janela do terminal?
Array mas é criado com tamanho zero em cada carrapato e não muda seu tamanho em nenhum outro lugar. Portanto, qualquer acesso a ele causará a ultrapassagem da matriz.
Para resolver o problema, devemos redimensioná-lo para o tamanho, que conterá leituras de todas as barras do histórico, ou ligá-lo ao buffer indicador (declarado como uma variável global do programa). Se eu entender corretamente, estes valores devem ser exibidos usando o indicador.
Simplificado, CopyOpen I understand is supfluous for OnCalculate, but so it sees the history from the terminal window?
Exemplo:
//+------------------------------------------------------------------+//| Test.mq5 |//| Copyright 2018, MetaQuotes Software Corp. |//| https://mql5.com/ru/users/artmedia70 |//+------------------------------------------------------------------+#property copyright"Copyright 2018, MetaQuotes Software Corp."#property link"https://mql5.com/ru/users/artmedia70"#property version"1.00"#property indicator_separate_window#property indicator_buffers1#property indicator_plots1//--- plot OC#property indicator_label1"Open/Close"#property indicator_type1DRAW_LINE#property indicator_color1clrRed#property indicator_style1STYLE_SOLID#property indicator_width11//--- indicator buffersdouble BufferOC[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- Задаём массив BufferOC как буфер индикатораSetIndexBuffer(0,BufferOC,INDICATOR_DATA);
//--- Устанавливаем ему направление индексации как у таймсерииArraySetAsSeries(BufferOC,true);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Проверка на минимальное колиество баров для расчётаif(rates_total<1) return0;
//--- Установка массивов буферов как таймсерийArraySetAsSeries(open,true);
ArraySetAsSeries(close,true);
//--- Проверка и расчёт количества просчитываемых баровint limit=rates_total-prev_calculated;
if(limit>1) // если это первый запуск, или изменение истории, или открытие нового бара
{
limit=rates_total-1; // установим начало цикла на начало исторических данныхArrayInitialize(BufferOC,EMPTY_VALUE); // инициализируем массив
}
//--- Расчёт индикатораfor(int i=limit; i>=0 && !IsStopped(); i--)
{
if(close[i]==0) continue;
BufferOC[i]=open[i]/close[i];
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
A matriz de massa é criada com tamanho zero em cada carrapato e não muda seu tamanho em nenhum outro lugar. Portanto, qualquer referência a ela causará a saída da matriz.
Para resolver o problema, você deve redimensioná-lo para o tamanho que conterá as leituras de todas as barras do histórico, ou ligá-lo ao buffer indicador (declarado como uma variável global do programa). Se eu entendi corretamente, são estes valores que devem ser exibidos usando o indicador.
Meu erro, mas[] realmente deveria ser uma matriz global, mas o tampão indicador também não é adequado, ele será antes uma matriz multidimensional intermediária. Qual é a melhor maneira de determinar o tamanho ideal da matriz para M5, não através de um buffer indicador?
Minha imprecisão, mas[] é realmente uma matriz global, mas um tampão indicador também não é adequado, ao contrário, seria uma matriz multidimensional intermediária. Qual é a melhor maneira de determinar o tamanho ideal da matriz para M5, não através de um buffer indicador?
Eu não entendo o que quero dizer com multidimensional. Estamos falando de uma matriz unidimensional. Além disso, na MQL4, a dimensão máxima de uma matriz é 4.
Para fazer a matriz do mesmo tamanho que as séries cronológicas, devemos redimensioná-la de acordo com o número de barras disponíveis no gráfico para o símbolo e período necessários:
double fArray[];
int nBarsCnt = iBars(<символ>, <таймфрейм>);
if (ArrayResize(fArray, nBarsCnt) != nBarsCnt)
{
// Не удалось изменить размер массиваreturn;
}
ArraySetAsSeries(fArray, true);
Minha imprecisão, mas[] é realmente uma matriz global, mas o tampão indicador também não é adequado, ao invés disso, seria uma matriz multidimensional intermediária. Qual é a melhor maneira de determinar o tamanho ideal da matriz para M5, não através de um buffer indicador?
Por que você não quer usar arrays como amortecedores indicadores? Eles são monitorados pelo subsistema, o que facilita seu trabalho.
E a matriz intermediária de indicadores é fácil de fazer:
como fazer isso corretamente?
Como você faz isso?
Simplificado assim, CopyOpen I understand is supfluous for OnCalculate, but so it sees the history from the terminal window?
Simplificado, o CopyOpen é desnecessário para a OnCalculate, mas então ele vê apenas a história a partir da janela do terminal?
Array mas é criado com tamanho zero em cada carrapato e não muda seu tamanho em nenhum outro lugar. Portanto, qualquer acesso a ele causará a ultrapassagem da matriz.
Para resolver o problema, devemos redimensioná-lo para o tamanho, que conterá leituras de todas as barras do histórico, ou ligá-lo ao buffer indicador (declarado como uma variável global do programa). Se eu entender corretamente, estes valores devem ser exibidos usando o indicador.
Simplificado, CopyOpen I understand is supfluous for OnCalculate, but so it sees the history from the terminal window?
Exemplo:
A matriz de massa é criada com tamanho zero em cada carrapato e não muda seu tamanho em nenhum outro lugar. Portanto, qualquer referência a ela causará a saída da matriz.
Para resolver o problema, você deve redimensioná-lo para o tamanho que conterá as leituras de todas as barras do histórico, ou ligá-lo ao buffer indicador (declarado como uma variável global do programa). Se eu entendi corretamente, são estes valores que devem ser exibidos usando o indicador.
Meu erro, mas[] realmente deveria ser uma matriz global, mas o tampão indicador também não é adequado, ele será antes uma matriz multidimensional intermediária. Qual é a melhor maneira de determinar o tamanho ideal da matriz para M5, não através de um buffer indicador?
Minha imprecisão, mas[] é realmente uma matriz global, mas um tampão indicador também não é adequado, ao contrário, seria uma matriz multidimensional intermediária. Qual é a melhor maneira de determinar o tamanho ideal da matriz para M5, não através de um buffer indicador?
Eu não entendo o que quero dizer com multidimensional. Estamos falando de uma matriz unidimensional. Além disso, na MQL4, a dimensão máxima de uma matriz é 4.
Para fazer a matriz do mesmo tamanho que as séries cronológicas, devemos redimensioná-la de acordo com o número de barras disponíveis no gráfico para o símbolo e período necessários:
Minha imprecisão, mas[] é realmente uma matriz global, mas o tampão indicador também não é adequado, ao invés disso, seria uma matriz multidimensional intermediária. Qual é a melhor maneira de determinar o tamanho ideal da matriz para M5, não através de um buffer indicador?
Por que você não quer usar arrays como amortecedores indicadores? Eles são monitorados pelo subsistema, o que facilita seu trabalho.
E a matriz intermediária de indicadores é fácil de fazer:
Olá.
Os volumes na plataforma são volumes de carrapatos, haverá volumes reais?
Olá.
Na plataforma, os volumes estão correndo, haverá algum volume real?
Não vai. Use o MT5, alguns corretores fornecem volumes reais lá.
Boa tarde!
Por favor, ajude com o seguinte problema:
1) Após algumas condições serem cumpridas, uma ordem pendente é aberta:
{ price=High[1]+OrderPoint*Point; stoploss=Low[1]-Point; takeprofit=price+price-stoploss; OrderSend(Symbol(),OP_BUYSTOP,1,price,3,stoploss,takeprofit); }Por favor, diga-me o que acrescentar e onde apagar uma ordem pendente, se o preço já tiver passado, pare a perda (desta ordem pendente).
Desculpe pela pergunta estúpida, eu me perdi nos fóruns enquanto procurava uma resposta.
Obrigado de antemão!