【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

半間家の本物の本家です。(貴族です)

半間家の本物の本家です。(貴族です)

フリーページ

2022.05.24
XML
カテゴリ:貴族
//+------------------------------------------------------------------+
//| extern                                                        |
//+------------------------------------------------------------------+
#property copyright "nyxjf367@ybb.ne.jp"
#property link      "http://hanma.zouri.jp/"
#property version   "1.00" 
#property indicator_chart_window
#property indicator_buffers    2
//+------------------------------------------------------------------+
extern   int Periods0=60;
int   MaxBarsBack=6*20*12;
//+------------------------------------------------------------------+
bool  AdditionalDigit;
int   ATRPeriod=100;
int   Price=PRICE_CLOSE;
int   TimeFrameValue,FirstAvailableBar;
int   iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};
string   sTfTable[]={"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
string   TimeFrame="Current";
double   Bfer00[],Bfer01[];
double   TICK,SumTMAPeriod,TickScaleFactor,Threshold,PriorTick,FullSumW;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
{
   IndicatorBuffers(2);
   SetIndexBuffer(0,Bfer00);  SetIndexStyle(0,DRAW_LINE,EMPTY,2,White); 
   SetIndexBuffer(1,Bfer01);  SetIndexStyle(1,DRAW_LINE,EMPTY,2,White); 
   AdditionalDigit=MarketInfo(Symbol(),MODE_MARGINCALCMODE)==0&&MarketInfo(Symbol(),MODE_PROFITCALCMODE)==0&&Digits%2==1;
   TICK=MarketInfo(Symbol(),MODE_TICKSIZE);
   if(AdditionalDigit)  TICK*=10;
   TimeFrameValue=stringToTimeFrame(TimeFrame);
   IndicatorShortName(TimeFrameValueToString(TimeFrameValue)+" TMA bands ("+Periods0+")");
   SumTMAPeriod=0;
   for(int i=1;i<=Periods0;i++)   SumTMAPeriod+=i;
   FullSumW=Periods0+1+2*SumTMAPeriod;
   TickScaleFactor=(Periods0+1)/(Periods0+1+SumTMAPeriod);
   PriorTick=Close[0];
   if(Digits<4) Threshold=10*0.01;   else   Threshold=10*0.0001;    
   FirstAvailableBar=iBars(NULL,TimeFrameValue)-Periods0-1;
   return(0);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
{
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   int i,limit;
   if(Period() > TimeFrameValue)     return(0);
   static double range=0;
   static double slope=0;
   static double PriceAtFullRecalc=0;
   if(((Bars-counted_bars)==1)&&(MathAbs(Close[0]-PriceAtFullRecalc)<Threshold))
   {
      Bfer00[0]=CalcTmaUpdate(Bfer00[0]);
   }
   else
   {
      PriceAtFullRecalc=Close[0];
      if(counted_bars>0)   counted_bars--;
      double barsPerTma=(TimeFrameValue/Period());
      limit=MathMin(Bars-1,MaxBarsBack); 
      limit=MathMin(limit,Bars-counted_bars+ Periods0*barsPerTma); 
      int mtfShift=0;
      int lastMtfShift=999;
      double prevTma=Bfer00[limit+1];
      double tmaVal=Bfer00[limit+1];
      for(i=limit;i>=0;i--)
      {
         if(TimeFrameValue==Period()){mtfShift = i;}  else  {mtfShift = iBarShift(Symbol(),TimeFrameValue,Time[i]);} 
         if (mtfShift > FirstAvailableBar) continue;
         if(mtfShift == lastMtfShift)
         {       
            Bfer00[i] =Bfer00[i+1] + ((tmaVal - prevTma) * (1/barsPerTma));         
            continue;
         }
         lastMtfShift = mtfShift;
         prevTma = tmaVal;
         tmaVal = CalcTma(mtfShift);
         if(range == 0) range = 1;
         if(barsPerTma>1){Bfer00[i]=prevTma+((tmaVal-prevTma)*(1/barsPerTma));} else  {Bfer00[i]=tmaVal;}
         Bfer01[i]=Bfer00[i+Periods0];
      }
    }
return(0);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CalcTma(int inx)
{
  double ttma;
  if(inx>=Periods0)    ttma=CalcPureTma(inx);  else  ttma=CalcTmaEstimate(inx);
  return(ttma);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CalcPureTma(int i)
{
   int k,j=Periods0 + 1; 
   double sum=0;
   switch (Price)
   {
      case     0:sum=j*iClose(NULL,TimeFrameValue,i);break;
      case     1:sum=j*iOpen(NULL,TimeFrameValue,i);break;
      case     2:sum=j*iHigh(NULL,TimeFrameValue,i);break;
      case     3:sum=j*iLow(NULL,TimeFrameValue,i);break;
      case     4:sum=j*(iHigh(NULL,TimeFrameValue,i)+iLow(NULL,TimeFrameValue,i))/2;break;
      case     5:sum=j*(iHigh(NULL,TimeFrameValue,i)+iLow(NULL,TimeFrameValue,i)+iClose(NULL,TimeFrameValue,i))/3;break;
      case     6:sum=j*(iHigh(NULL,TimeFrameValue,i)+iLow(NULL,TimeFrameValue,i)+iClose(NULL,TimeFrameValue,i)+iClose(NULL,TimeFrameValue,i))/4;break;
      default   :sum=j*iClose(NULL,TimeFrameValue,i);break;
   }
   for(k=1;k<=Periods0;k++)
   {
      switch(Price)
      {
         case     0:sum=sum+(j-k)*(iClose(NULL,TimeFrameValue,i+k)+iClose(NULL,TimeFrameValue,i-k));break;
         case     1:sum=sum+(j-k)*(iOpen(NULL,TimeFrameValue,i+k)+iOpen(NULL,TimeFrameValue,i-k));break;
         case     2:sum=sum+(j-k)*(iHigh(NULL,TimeFrameValue,i+k)+iHigh(NULL,TimeFrameValue,i-k));break;
         case     3:sum=sum+(j-k)*(iLow(NULL,TimeFrameValue,i+k)+iLow(NULL,TimeFrameValue,i-k));break;
         case     4:sum=sum+(j-k)*((iHigh(NULL,TimeFrameValue,i+k)+iLow(NULL,TimeFrameValue,i+k))/2 +(iHigh(NULL,TimeFrameValue,i-k)+iLow(NULL,TimeFrameValue,i-k))/2);break;
         case     5:sum=sum+(j-k)*((iHigh(NULL,TimeFrameValue,i+k)+iLow(NULL,TimeFrameValue,i+k)+iClose(NULL,TimeFrameValue,i+k))/3+(iHigh(NULL,TimeFrameValue,i-k)+iLow(NULL,TimeFrameValue,i-k)+iClose(NULL,TimeFrameValue,i-k))/3);break;
         case     6:sum=sum+(j-k)*((iHigh(NULL,TimeFrameValue,i+k)+iLow(NULL,TimeFrameValue,i+k)+iClose(NULL,TimeFrameValue,i+k)+iClose(NULL,TimeFrameValue,i+k))/4+(iHigh(NULL,TimeFrameValue,i-k)+iLow(NULL,TimeFrameValue,i-k)+iClose(NULL,TimeFrameValue,i-k)+iClose(NULL,TimeFrameValue, i-k))/4);break;
         default   :sum=sum+(j-k)*(iClose(NULL,TimeFrameValue,i+k)+iClose(NULL,TimeFrameValue,i-k));break;
      }
   }        
   return( sum / FullSumW );
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CalcTmaEstimate(int i)
{
   double sumW,sum=0;
   int k,
   j=Periods0+1;
   sumW=0;
   for(k=0;k<=Periods0;k++)
   {
      switch(Price)
      {  
         case     0: sum += (j - k) * iClose(NULL, TimeFrameValue, i+k);
         sumW += (j - k);break;
         case     1: sum += (j - k) * iOpen(NULL, TimeFrameValue, i+k);
         sumW += (j - k);break;
         case     2: sum += (j - k) * iHigh(NULL, TimeFrameValue, i+k);
         sumW += (j - k);break;
         case     3: sum += (j - k) * iLow(NULL, TimeFrameValue, i+k);
         sumW += (j - k);break;
         case     4: sum += (j-k)*((iHigh(NULL,TimeFrameValue,i+k) +iLow(NULL,TimeFrameValue,i+k))/2);
         sumW += (j - k);break;
         case     5: sum += (j - k) * (   (  iHigh(NULL, TimeFrameValue, i+k) +iLow(NULL,TimeFrameValue, i+k) +iClose(NULL,TimeFrameValue, i+k))/3);
         sumW += (j - k);break;
         case     6: sum += (j - k) * (   (  iHigh(NULL, TimeFrameValue, i+k) +iLow(NULL,TimeFrameValue, i+k)+iClose(NULL,TimeFrameValue, i+k)+iClose(NULL,TimeFrameValue,i+k))/4);
         sumW += (j - k);break;
         default   : sum += (j - k) * iClose(NULL, TimeFrameValue, i+k);
         sumW += (j - k);break;
      }                          
   }
   j = Periods0;
   for (k = i-1; k >= 0; k--)
   {
      switch(Price)
      {  
         case     0: sum += j * iClose(NULL, TimeFrameValue, k);
         sumW += j;break;
         case     1: sum += j * iOpen(NULL, TimeFrameValue, k);
         sumW += j;break;
         case     2: sum += j * iHigh(NULL, TimeFrameValue, k);
         sumW += j;break;
         case     3: sum += j * iLow(NULL, TimeFrameValue, k);
         sumW += j;break;
         case     4: sum += j *(( iHigh(NULL, TimeFrameValue, k) +iLow(NULL, TimeFrameValue, k))/2);
         sumW += j;break;
         case     5: sum += j *(   ( iHigh(NULL, TimeFrameValue, k) +iLow(NULL, TimeFrameValue, k) +iClose(NULL, TimeFrameValue, k))/3);
         sumW += j;break;
         case     6: sum += j *(   ( iHigh(NULL, TimeFrameValue, k) +iLow(NULL, TimeFrameValue, k) +iClose(NULL, TimeFrameValue, k) +iClose(NULL, TimeFrameValue, k))/4);
         sumW += j;break;
         default   : sum += j * iClose(NULL, TimeFrameValue, k);
         sumW += j;break;
      }               
      j--;
   }
   switch(Price)
   {  
      case 0   :PriorTick = Close[0];break;
      case 1   :PriorTick = Open[0];break;
      case 2   :PriorTick = High[0];break;
      case 3   :PriorTick = Low[0];break;
      case 4   :PriorTick = (High[0]+Low[0])/2;break;
      case 5   :PriorTick = (High[0]+Low[0]+Close[0])/3;break;
      case 6   :PriorTick = (High[0]+Low[0]+Close[0]+Close[0])/4;break;
      default  :PriorTick = Close[0];break;
  }
  return(sum/sumW);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CalcTmaUpdate( double PreviousTma)
{
   double r;
   switch(Price)
   {  
      case 0   :  r = PreviousTma + (Close[0] - PriorTick) * TickScaleFactor;
      PriorTick = Close[0];
      break;
      case 1   :  r = PreviousTma + (Open[0] - PriorTick) * TickScaleFactor;
      PriorTick = Open[0];
      break;
      case 2   :  r = PreviousTma + (High[0] - PriorTick) * TickScaleFactor;
      PriorTick = High[0];
      break;
      case 3   :  r = PreviousTma + (Low[0] - PriorTick) * TickScaleFactor;
      PriorTick = Low[0];
      break;
      case 4   :  r = PreviousTma + ((High[0]+Low[0])/2 - PriorTick) * TickScaleFactor;
      PriorTick = (High[0]+Low[0])/2;
      break;
      case 5   :  r = PreviousTma + ((High[0]+Low[0]+Close[0])/3 - PriorTick) * TickScaleFactor;
      PriorTick = (High[0]+Low[0]+Close[0])/3;
      break;
      case 6   :  r = PreviousTma + ((High[0]+Low[0]+Close[0]+Close[0])/4 - PriorTick) * TickScaleFactor;
      PriorTick = (High[0]+Low[0]+Close[0]+Close[0])/4;
      break;
      default  :  r = PreviousTma + (Close[0] - PriorTick) * TickScaleFactor;
      PriorTick = Close[0];
      break;
  }            
  return( r );
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int stringToTimeFrame(string tfs)
{
   tfs=StringUpperCase(tfs);
   for(int i=ArraySize(iTfTable)-1;i>=0;i--)
   {
      if(tfs==sTfTable[i] || tfs==""+iTfTable[i])  return(iTfTable[i]);
   }
   return(Period());
   
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string TimeFrameValueToString(int tf)
{
   for(int i=ArraySize(iTfTable)-1; i>=0; i--)  {if(tf==iTfTable[i]) return(sTfTable[i]);}
   return("");
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string StringUpperCase(string str)
{
   string   s=str;
   for(int length=StringLen(str)-1; length>=0; length--)
   {
      int tchar=StringGetChar(s,length);
      if((tchar > 96 && tchar < 123) || (tchar > 223 && tchar < 256))   s=StringSetChar(s,length,tchar-32); else  if(tchar>-33 && tchar<0)  s=StringSetChar(s,length,tchar+224);
   }
   return(s);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit() 
{
   return(0); 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2022.05.24 03:53:26
コメント(0) | コメントを書く


PR

キーワードサーチ

▼キーワード検索

プロフィール

論理学者

論理学者

お気に入りブログ

まだ登録されていません

コメント新着

aki@ Re:買い物(03/21) この様な書込大変失礼致します。日本も当…
188BET 田中竜司@ 188BETオンラインカジノのご紹介のご相談 運営者様 オンラインカジノ・スポーツブ…
論理学者@ Re:成績(04/05) 一年間でのバックテストの結果です。 いび…
188BET 田中竜司@ 188BETオンラインカジノ・スロットのご紹介のご相談(188BET) 188BETオンラインカジノ・スロットのご紹…
188BET 田中竜司@ Re:御金払い、パクベガス オンラインカジノゲームの有料会員になりました。(04/07) 運営者様 オンラインカジノ・スロットの1…

© Rakuten Group, Inc.