Sim. Não há motivo para traduzir o tempo em cadeia, já que o tempo é um número de segundos. Este número é muito mais fácil e rápido de se trabalhar do que as cordas.
Você corrigiu uma coisa e estragou outra).
Na segunda parte, em vez de:
retornar:
Você tinha essa linha correta em sua tentativa anterior.
Obrigado pelas respostas! Eu tentei as duas opções.
Não vejo qual é o senão - ele ainda vai direto para dentro quando se fecha uma parada:
lil_lil:
Diga sua condição em voz alta e você verá o que está acontecendo)
if ( TimeSeconds(TimeCurrent()) - TimeSeconds(OrderCloseTime()) > TimeSeconds(30*60) )
if ( TimeCurrent() -OrderCloseTime() > 30*60 )
Na verdade, lá != condição em toda parte, ou seja, o oposto > deveria estar lá, se eu entendi corretamente o que você quer dizer. Mas todas as variantes funcionaram - ainda funcionam.
Preciso dele para desenhar os fractais com um período, com um tipo "ziguezague", para que os fractais inferiores superiores superiores inferiores se sequenciem e assim por diante.
Mas como resultado, os fractais repetidos aparecem na tabela de qualquer forma
A base é extraída do indicador fractal padrão. Tela abaixo com fractal repetido no período 5
//+------------------------------------------------------------------+//| Fractals.mq5 |//| Copyright 2009-2017, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"2009-2017, MetaQuotes Software Corp."#property link"http://www.mql5.com"//---- indicator settings#property indicator_chart_window#property indicator_buffers2#property indicator_plots2#property indicator_type1DRAW_ARROW#property indicator_type2DRAW_ARROW#property indicator_color1 Gray
#property indicator_color2 Gray
#property indicator_label1"Fractal Up"#property indicator_label2"Fractal Down"bool high_f, low_f, lastIsUpper = true, lastIsLower = true;
int lastLowerIndex, lastUpperIndex;
//---- input datainputint period = 5;
int per = period;
//---- indicator buffersdouble ExtUpperBuffer[];
double ExtLowerBuffer[];
//--- 10 pixels upper from high priceint ExtArrowShift=-10;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+voidOnInit()
{
if(per % 2 == 0) per++; //период фракталов только нечетный//---- indicator buffers mappingSetIndexBuffer(0,ExtUpperBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ExtLowerBuffer,INDICATOR_DATA);
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- sets first bar from what index will be drawnPlotIndexSetInteger(0,PLOT_ARROW,217);
PlotIndexSetInteger(1,PLOT_ARROW,218);
//---- arrow shifts when drawingPlotIndexSetInteger(0,PLOT_ARROW_SHIFT,ExtArrowShift);
PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-ExtArrowShift);
//---- sets drawing line empty value--PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- initialization done
}
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
int i,limit;
//---if(rates_total < per)
return(0);
//---if(prev_calculated < per + (per - 1) / 2)
{
limit = (per - 1) / 2;
//--- clean up arraysArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
}
else limit = rates_total - per;
for(i = limit; i < rates_total - (per + 1) / 2 && !IsStopped(); i++)
{
high_f = true; low_f = true;//с самого начала считаем что есть фрактал в i свечеfor(int g = 1; g < (per+1)/2; g++){//проверка на наличие фрактала (одновременной справа и слева от свечи с возможным фракталом)//---- Upper Fractalif(high[i-g] >= high[i] || high[i+g] > high[i]){//если одно из условий выполнено (high какой либо свечи справа или слева выше чем исследуемый), то фрактала сверху нет
ExtUpperBuffer[i] = EMPTY_VALUE;
high_f = false;
}
//---- Lower Fractalif(low[i-g] <= low[i] || low[i+g] < low[i]){ //если одно из условий выполнено, то фрактала снизу нет
ExtLowerBuffer[i] = EMPTY_VALUE;
low_f = false;
}
}
//устанавливаем верхнийif(high_f){//если фрактал все таки есть (из цикла-проверки выше)if(lastIsLower){//еси последний фрактал был нижний
ExtUpperBuffer[i] = high[i];//устанавливаем сверху
lastUpperIndex = i;//записываем индекс в буффере установленного
lastIsLower = false;//говорим что последний - не нижний
lastIsUpper = true;//а верхний
}else{
if(lastIsUpper){//если последний верхний (а мы пытаемся установить верхний)if(high[i] > ExtUpperBuffer[lastUpperIndex]){//если устанавливаем выше предыдущего
ExtUpperBuffer[lastUpperIndex] = EMPTY_VALUE;//удаляем предыдущий
ExtUpperBuffer[i] = high[i];//устанавливаем новый
lastUpperIndex = i;//записываем индекс нового
}
}
}
}
//аналогично для фрактала снизуif(low_f){
if(lastIsUpper){
ExtLowerBuffer[i] = low[i];
lastLowerIndex = i;
lastIsLower = true;
lastIsUpper = false;
}else{
if(lastIsLower){
if(low[i] < ExtLowerBuffer[lastLowerIndex]){
ExtLowerBuffer[lastLowerIndex] = EMPTY_VALUE;
ExtLowerBuffer[i] = low[i];
lastLowerIndex = i;
}
}
}
}
}
//--- OnCalculate done. Return new prev_calculated.return(rates_total);
}
//+------------------------------------------------------------------+
kotaries: Você pode aconselhar como obter o volume de posições abertas na MQL4, se SYMBOL_SESSION_INTEREST não for suportado? Obrigado!
Ciclo através de todas as posições e cálculo de seu volume total:OrderLots()
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает сумму лотов открытых позиций |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - торговая операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
double l=0;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
l+=OrderLots();
}
}
}
}
}
}
return(l);
}
Não consigo entender por que um certo valor de pré_cálculo é devolvido?
Como é calculado?
Este é o valor retornado pela OnCalculate() na última iteração. Isto está explicitamente declarado na documentação:
A relação entre o valor retornado pela OnCalculate() e o segundo parâmetro de entrada pré-calculado deve ser notada. O parâmetro pré_calculado, quando a função é chamada, contém o valorretornado pela OnCalculate() na chamadaanterior. Isto permite algoritmos econômicos para o cálculo do indicador personalizado, a fim de evitar cálculos repetidos para aquelas barras que não mudaram desde a chamada anterior desta função.
Olá!
Sim. Não há motivo para traduzir o tempo em cadeia, já que o tempo é um número de segundos. Este número é muito mais fácil e rápido de se trabalhar do que as cordas.
Você corrigiu uma coisa e estragou outra).
Na segunda parte, em vez de:
retornar:
Você tinha essa linha correta em sua tentativa anterior.
Obrigado pelas respostas! Eu tentei as duas opções.
Não vejo qual é o senão - ele ainda vai direto para dentro quando se fecha uma parada:
Diga sua condição em voz alta e você verá o que está acontecendo)
Na verdade, lá != condição em toda parte, ou seja, o oposto > deveria estar lá, se eu entendi corretamente o que você quer dizer. Mas todas as variantes funcionaram - ainda funcionam.
Ajuda a entender a lógica, encontrar o erro
Comentou o código em detalhes.
Preciso dele para desenhar os fractais com um período, com um tipo "ziguezague", para que os fractais inferiores superiores superiores inferiores se sequenciem e assim por diante.
Mas como resultado, os fractais repetidos aparecem na tabela de qualquer forma
A base é extraída do indicador fractal padrão. Tela abaixo com fractal repetido no período 5
Você pode aconselhar como obter o volume de posições abertas na MQL4, se SYMBOL_SESSION_INTEREST não for suportado? Obrigado!
Ciclo através de todas as posições e cálculo de seu volume total:OrderLots()
Não consigo entender por que um certo valor de pré_cálculo é devolvido?
Como é calculado, em primeiro lugar?
Não consigo entender por que um certo valor de pré_cálculo é devolvido?
Como é calculado, em primeiro lugar?
Não consigo entender por que um certo valor de pré_cálculo é devolvido?
Como é calculado?
Este é o valor retornado pela OnCalculate() na última iteração. Isto está explicitamente declarado na documentação:
A relação entre o valor retornado pela OnCalculate() e o segundo parâmetro de entrada pré-calculado deve ser notada. O parâmetro pré_calculado, quando a função é chamada, contém o valorretornado pela OnCalculate() na chamadaanterior. Isto permite algoritmos econômicos para o cálculo do indicador personalizado, a fim de evitar cálculos repetidos para aquelas barras que não mudaram desde a chamada anterior desta função.
A tarefa é encontrar a barra com o fechamento mínimo
for(int x=0; x<=xBars -1; x++)
{
contador++;
// Imprimir(Fechar[x],",", contador);
int h = ArrayMinimum(Fechar[x]);
if(contador > 20) break;
}
Compilador jura de Fechado