Lo estoy pasando mal. No puedo establecer en la lógica del indicador Bolingeer Bunds regla para dibujar líneas desde el cierre del día anterior.
La función iClose("USDCHF",PERIOD_D1,0) parece ser adecuada, pero no del todo. Al recalcular el ciclo en el gráfico horario todo se rompe inmediatamente.
//+------------------------------------------------------------------+//| Клюква.mq4 |//| Алексей Корольков . |//| https://www.mql5.com/ru/users/alekkar |//+------------------------------------------------------------------+#property copyright"2020 Алексей Корольков ."#property link"https://www.mql5.com/ru/users/alekkar"#property description"Клюква"#property strict#include <MovingAverages.mqh>
#property indicator_chart_window#property indicator_buffers3#property indicator_color1 LightSeaGreen
#property indicator_color2 LightSeaGreen
#property indicator_color3 LightSeaGreen
//--- indicator parametersinputint InpBandsPeriod=20; // Bands Periodinputint InpBandsShift=0; // Bands Shiftinputdouble InpBandsDeviations=2.0; // Bands Deviationsinputstring SimbolUSD="USDIDX..";
//--- buffersdouble ExtMovingBuffer[];
double ExtUpperBuffer[];
double ExtLowerBuffer[];
double ExtStdDevBuffer[];
double Drv,DrvIn,min,max,minIn,maxIn,xx,xIn,natr,natrIn,ma1,ma2,bid1,bid2,R1,R2,R01,R02;
int tm,mn;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit(void)
{
//--- 1 additional buffer used for counting.
IndicatorBuffers(4);
IndicatorDigits(Digits);
//--- middle line
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMovingBuffer);
SetIndexShift(0,InpBandsShift);
SetIndexLabel(0,"Bands SMA");
//--- upper band
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtUpperBuffer);
SetIndexShift(1,InpBandsShift);
SetIndexLabel(1,"Bands Upper");
//--- lower band
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,ExtLowerBuffer);
SetIndexShift(2,InpBandsShift);
SetIndexLabel(2,"Bands Lower");
//--- work bufferSetIndexBuffer(3,ExtStdDevBuffer);
//--- check for input parameterif(InpBandsPeriod<=0)
{
Print("Wrong input parameter Bands Period=",InpBandsPeriod);
return(INIT_FAILED);
}
//---
SetIndexDrawBegin(0,InpBandsPeriod+InpBandsShift);
SetIndexDrawBegin(1,InpBandsPeriod+InpBandsShift);
SetIndexDrawBegin(2,InpBandsPeriod+InpBandsShift);
//--- initialization donereturn(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Bollinger Bands |//+------------------------------------------------------------------+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,pos;
//---if(rates_total<=InpBandsPeriod || InpBandsPeriod<=0)
return(0);
//--- counting from 0 to rates_totalArraySetAsSeries(ExtMovingBuffer,false);
ArraySetAsSeries(ExtUpperBuffer,false);
ArraySetAsSeries(ExtLowerBuffer,false);
ArraySetAsSeries(ExtStdDevBuffer,false);
ArraySetAsSeries(close,false);
//--- initial zeroif(prev_calculated<1)
{
for(i=0; i<InpBandsPeriod; i++)
{
ExtMovingBuffer[i]=EMPTY_VALUE;
ExtUpperBuffer[i]=EMPTY_VALUE;
ExtLowerBuffer[i]=EMPTY_VALUE;
}
}
//--- определение АТР for(i=InpBandsPeriod-1; i>=0; i--)
{
xx=High[i]-Low[i];
Drv+=xx;
if(min>xx) min=xx;
if(max<xx) max=xx;
xIn=iHigh(SimbolUSD,NULL,i)-iLow(SimbolUSD,NULL,i);
DrvIn+=xIn;
if(minIn>xIn) minIn=xIn;
if(maxIn<xIn) maxIn=xIn;
}
Drv/=InpBandsPeriod;
DrvIn/=InpBandsPeriod;
natr=((Drv-min)/(max-min))*100; //тут определяем пройденное значение атр инструментом на графике
natrIn=((DrvIn-minIn)/(maxIn-minIn))*100; //тут определяем пройденное значение атр инструментом на индексе доллара//средние АТР
ma1=iMA(NULL,0,InpBandsPeriod,0,2,1,0);
ma2=iMA(SimbolUSD,0,InpBandsPeriod,0,2,1,0);
//определяем знак АТР
bid1=MarketInfo(NULL,MODE_BID);
bid2=MarketInfo(SimbolUSD,MODE_BID);
if (bid1-ma1<0) Drv=Drv*(-1); // если цена падает значит минусif (bid2-ma2<0) DrvIn=DrvIn*(-1); // если цена падает значит минус// а теперь сама она родная //где Drv инструмент графика,а DrvIn индекс доллара//расчёт индекса волатильности для инструмента
R01 = (1-(1+Drv)/(1+max))*100;//используем для движения вверх
R02 = (1-(1-Drv)/(1+max))*100;//используем для движения вниз//расчёт индекса волатильности для доллара
R1 = (1-(1+DrvIn)/(1+maxIn))*100;//
R2 = (1-(1-DrvIn)/(1+maxIn))*100;//используем для движения вниз // далее сам расчёт//--- начальный расчетif(prev_calculated>1)
pos=prev_calculated-1;
else
pos=0;
//--- главный циклfor(i=pos; i<rates_total && !IsStopped(); i++)
{
//--- средняя линия
ExtMovingBuffer[i]=SimpleMA(i,InpBandsPeriod,close);
//--- рассчитайте и запишите со стандартным отклонением
ExtStdDevBuffer[i]=StdDev_Func(i,close,ExtMovingBuffer,InpBandsPeriod); // тут наверно смогу разместить код //--- верхняя линия указывает зону перекупленности// -- тут хотел параметр ExtMovingBuffer[i] заменить на iClose("USDCHF",PERIOD_D1,0)
ExtUpperBuffer[i]=ExtMovingBuffer[i]+(max)*(R01+R2)/2; //Print("Drv ",Drv,",DrvIn",DrvIn,", R1", R1,", R2 ", R2);//--- нижняя линия указывает зону перепроданности
ExtLowerBuffer[i]=ExtMovingBuffer[i]+(-max)*(R02+R1)/2;
//---
}
//---- OnCalculate done. Return new prev_calculated.return(rates_total);
}
//+------------------------------------------------------------------+//| Calculate Standard Deviation |//+------------------------------------------------------------------+double StdDev_Func(int position,constdouble &price[],constdouble &MAprice[],int period)
{
//--- variablesdouble StdDev_dTmp=0.0;
//--- check for positionif(position>=period)
{
//--- calcualte StdDevfor(int i=0; i<period; i++)
StdDev_dTmp+=MathPow(price[position-i]-MAprice[position],2);
StdDev_dTmp=MathSqrt(StdDev_dTmp/period);
}
//--- return calculated valuereturn(StdDev_dTmp);
}
//+------------------------------------------------------------------+
Опубликовал MetaTrader 4 сигнал Выставил продукт Советник DSvoltage использует индикатор MACD. Торговый объём зависит от результата предыдущих сделок, фиксированного лота, и размера показателя Автолота. Советник DCvoltage хеджирует размер позиции и направление в зависимости от ситуации на рынке за счёт перекрытых ордеров. В советнике...
Puedes mover el puntero por los archivos binarios y leer y escribir desde cualquier lugar. ¿Existe alguna forma de borrar, borrar, desde el punto actual hasta el final del archivo? ¿Es posible escribir una señal del final del archivo? ¿Puede reducirse? Sin sobrescribir.
¿Por qué las comillas son de 5 dígitos, pero el indicador da valores de 4 dígitos? No hay redondeo ni nada
gracias
Por qué la función ...
PositionsTotal()... ...a veces devuelve 0 cuando en realidad hay una posición abierta? MQL5
La lógica de su funcionamiento depende de ello
... aquí está la prueba
Gracias por la ayuda
Buenas tardes.
Hay una pregunta sobre los archivos binarios: ¿hay alguna manera de recortar sus colas?
Buenas tardes.
Una pregunta sobre los archivos binarios: ¿hay alguna forma de recortar sus colas?
nombre de archivo = "эта@с_хвостом.bin";
nombre de archivo = "a_et@tailless";
)))
¿O a qué cola te refieres?
nombre de archivo = "эта@с_хвостом.bin";
nombre de archivo = "a_ta@no_cola";
)))
¿O a qué cola se refiere?
Puedes mover el puntero por los archivos binarios y leer y escribir desde cualquier lugar. ¿Existe alguna forma de borrar, borrar, desde el punto actual hasta el final del archivo? ¿Es posible escribir una señal del final del archivo? ¿Puede reducirse? Sin sobrescribir.
Buenas tardes.
Existe una pregunta sobre los archivos binarios: ¿es posible recortar su cola de alguna manera?
no puedes
Busque un tema en la sección 4. Hubo una pregunta de este tipo hace una semana y alguien sugirió una solución con la llamada WinAPI (.dll)