Bir sersemliğim var. Bir önceki günün kapanışından Bollinger Bantları göstergesinin mantığına doğru çizgi çizme kuralını koyamıyorum.
iClose işlevi ("USDCHF",PERIOD_D1,0) ilk bakışta uyuyor gibi görünüyor, ancak gerçekte değil. Döngüyü saatlik grafikte yeniden hesaplarken her şey hemen bozuluyor.
//+------------------------------------------------------------------+//| Клюква.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 хеджирует размер позиции и направление в зависимости от ситуации на рынке за счёт перекрытых ордеров. В советнике...
İşaretçiyi ikili dosyalar üzerinde taşıyabilir, istediğiniz yerden okuyabilir ve yazabilirsiniz. Geçerli noktadan dosyanın sonuna kadar bir şekilde silmek, temizlemek mümkün müdür? Dosyanın sonunun işaretini kaydedin mi?Sesi artırabilirsiniz. azaltılabilir mi? Üzerine yazmadan.
Neden tırnaklar 5 haneli ve gösterge 4 haneli değerler veriyor? Hiçbir yerde yuvarlama yok.
teşekkür ederim
İşlev neden ...
PositionsTotal ()... gerçekten bir açık pozisyon varsa bazen 0 zamanında döner ? MQL5
İşin mantığına bağlı.
...işte kanıt
yardım için teşekkürler
Tünaydın.
İkili dosyalar hakkında böyle bir soru var: kuyruklarını bir şekilde kesmek mümkün mü?
Tünaydın.
İkili dosyalar hakkında böyle bir soru var: kuyruklarını bir şekilde kesmek mümkün mü?
dosyaadı = "bu@kuyruk.bin";
dosyaadı = "a_this@no_tail";
)))
Ya da ne kuyruğu demek istedin?
dosyaadı = "bu@kuyruk.bin";
dosyaadı = "a_this@no_tail";
)))
Ya da ne kuyruğu demek istedin?
İşaretçiyi ikili dosyalar üzerinde taşıyabilir, istediğiniz yerden okuyabilir ve yazabilirsiniz. Geçerli noktadan dosyanın sonuna kadar bir şekilde silmek, temizlemek mümkün müdür? Dosyanın sonunun işaretini kaydedin mi?Sesi artırabilirsiniz. azaltılabilir mi? Üzerine yazmadan.
Tünaydın.
İkili dosyalar hakkında böyle bir soru var: kuyruklarını bir şekilde kesmek mümkün mü?
yasaktır
4-ki bölümünde bir konu arayın, bir hafta önce böyle bir soru vardı ve birisi WinAPI çağrısı (.dll) ile bir çözüm önerdi