MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1148

 
相場は5桁なのに、インジケーターは4桁の値を出すのはなぜですか?四捨五入も何もありません
 
Roman Sharanov:
相場は5桁なのに、インジケーターは4桁の値を出すのはなぜですか?四捨五入も何もありません
IndicatorSetInteger(INDICATOR_DIGITS,Digits());
 
Artyom Trishkin:

ありがとうございます

 

なぜ、機能 ...

PositionsTotal()

......実際には1つのオープンポジション があるにもかかわらず、0を返すことがある?MQL5


動作のロジックはこれに依存する

if(trade_p && PositionsTotal() == 0 && trade_o && OrdersTotal() > 0)
     {
      if(Order_Close()) ExpertRemove();
     }

...これが証拠です


 
こんにちは、アンドロイドで自動スクロールのグラフィックを無効にする方法を教えてください。( メタ・トレダー 4 )
 
こんにちは。

苦労しているんですよ。インジケータBolingeer Bundsのロジックで、前日の終値からラインを引くというルールが設定できないのですが。

iClose("USDCHF",PERIOD_D1,0)という関数が適して いるようですが、ちょっと違うような気がします。1時間足チャートでサイクルを再計算すると、すべてがすぐに壊れてしまいます。

//+------------------------------------------------------------------+
//|                                                       Клюква.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_buffers 3
#property indicator_color1 LightSeaGreen
#property indicator_color2 LightSeaGreen
#property indicator_color3 LightSeaGreen
//--- indicator parameters
input int    InpBandsPeriod=20;      // Bands Period
input int    InpBandsShift=0;        // Bands Shift
input double InpBandsDeviations=2.0; // Bands Deviations
input string SimbolUSD="USDIDX..";
//--- buffers
double 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                         |
//+------------------------------------------------------------------+
int OnInit(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 buffer
   SetIndexBuffer(3,ExtStdDevBuffer);
//--- check for input parameter
   if(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 done
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Bollinger Bands                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,pos;
//---
   if(rates_total<=InpBandsPeriod || InpBandsPeriod<=0)
      return(0);
//--- counting from 0 to rates_total
   ArraySetAsSeries(ExtMovingBuffer,false);
   ArraySetAsSeries(ExtUpperBuffer,false);
   ArraySetAsSeries(ExtLowerBuffer,false);
   ArraySetAsSeries(ExtStdDevBuffer,false);
   ArraySetAsSeries(close,false);
//--- initial zero
   if(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,const double &price[],const double &MAprice[],int period)
  {
//--- variables
   double StdDev_dTmp=0.0;
//--- check for position
   if(position>=period)
     {
      //--- calcualte StdDev
      for(int i=0; i<period; i++)
         StdDev_dTmp+=MathPow(price[position-i]-MAprice[position],2);
      StdDev_dTmp=MathSqrt(StdDev_dTmp/period);
     }
//--- return calculated value
   return(StdDev_dTmp);
  }
//+------------------------------------------------------------------+




ありがとうございました

Aliaksei Karalkou
Aliaksei Karalkou
  • www.mql5.com
Опубликовал MetaTrader 4 сигнал Выставил продукт Советник DSvoltage  использует индикатор MACD. Торговый объём зависит от результата предыдущих сделок, фиксированного лота, и размера показателя Автолота. Советник DCvoltage хеджирует размер позиции и направление в зависимости от ситуации на рынке за счёт перекрытых ордеров. В советнике...
 

こんにちは。

バイナリファイルについて質問があるのですが、その尻尾を切り落とす方法はありますか?

 
Yurij Kozhevnikov:

こんにちは。

バイナリファイルについて質問です。バイナリファイルの尻尾を切る方法はありますか?

filename = "эта@с_хвостом.bin"。

filename = "a_et@tailless";

)))

それとも、どの尻尾のことでしょうか?

 
Сергей Таболин:

filename = "эта@с_хвостом.bin"。

filename = "a_ta@no_tail";

)))

それとも、どの尻尾のことを指しているのでしょうか?

バイナリファイルの中でポインタを移動させ、任意の場所から読み書きをすることができます。現在のポイントからファイルの終わりまで、削除、クリアする方法はありますか?ファイル終了のサインを書き込むことは可能ですか?減らせるのか?オーバーライトなし。

 
Yurij Kozhevnikov:

こんにちは。

バイナリファイルについて、その尻尾を切り落とすことはできないか?

敵わない

1週間ほど前にこのような質問があり、WinAPIコール(.dll)を使った解決策を提案された方がいらっしゃいましたので、セクション4のトピックを探してみてください。