以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  [原创] 麻烦改成金字塔谢谢  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=90986)

--  作者:我渡苍生
--  发布时间:2016/2/5 22:24:27
--  [原创] 麻烦改成金字塔谢谢
 麻烦改一下谢谢麻烦改成金字塔谢谢






#property copyright "mladen"
#property link      "mladenfx@gmail.com"

#property indicator_separate_window
#property indicator_levelcolor MediumOrchid
#property indicator_buffers 5
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Lime
#property indicator_color4 Fuchsia
#property indicator_color5 Fuchsia

extern string TimeFrame = "current time frame";
extern int    T3FastPrice = 0;
extern double T3FastPeriod = 12.0;
extern double T3FastHot = 0.0;
extern bool   T3FastOriginal = FALSE;
extern int    T3SlowPrice = 0;
extern double T3SlowPeriod = 34.0;
extern double T3SlowHot = 0.0;
extern bool   T3SlowOriginal = FALSE;
extern double Length = 10.0;
extern double StDv = 2.0;
extern bool   drawDots = TRUE;
extern double level1 = 0.005;
extern double level2 = -0.005;
double G_ibuf_168[];
double G_ibuf_172[];
double G_ibuf_176[];
double G_ibuf_180[];
double G_ibuf_184[];
double G_ibuf_188[];
double G_ibuf_192[];
int G_timeframe_196;
string Gs_200;
bool G_bool_208;
bool G_bool_212;
string Gsa_216[] = {"M1", "M5", "M15", "M30", "H1", "H4", "D1", "W1", "MN"};
int Gia_220[] = {1, 5, 15, 30, 60, 240, 1440, 10080, 43200};
double Gda_224[][12];
double Gda_228[][6];

// E37F0136AA3FFAF149B351F6A4C948E9
int init() {
   IndicatorBuffers(7);
   SetIndexBuffer(0, G_ibuf_168);
   SetIndexBuffer(1, G_ibuf_172);
   SetIndexBuffer(2, G_ibuf_176);
   SetIndexBuffer(3, G_ibuf_180);
   SetIndexBuffer(4, G_ibuf_184);
   SetIndexBuffer(5, G_ibuf_188);
   SetIndexBuffer(6, G_ibuf_192);
   if (drawDots) {
      SetIndexStyle(2, DRAW_ARROW, STYLE_SOLID);
      SetIndexArrow(2, 159);
      SetIndexStyle(3, DRAW_ARROW, STYLE_SOLID);
      SetIndexArrow(3, 159);
      SetIndexStyle(4, DRAW_NONE);
   } else {
      SetIndexStyle(2, DRAW_LINE);
      SetIndexStyle(3, DRAW_LINE);
      SetIndexStyle(4, DRAW_LINE);
   }
   SetLevelValue(0, 0);
   SetLevelValue(1, level1);
   SetLevelValue(2, level2);
   Gs_200 = WindowExpertName();
   G_bool_212 = TimeFrame == "calculateValue";
   if (G_bool_212) return (0);
   G_bool_208 = TimeFrame == "returnBars";
   if (G_bool_208) return (0);
   G_timeframe_196 = f0_5(TimeFrame);
   IndicatorDigits(5);
   IndicatorShortName(f0_1(G_timeframe_196) + "   T3 BB Macd (" + DoubleToStr(T3FastPeriod, 2) + "," + DoubleToStr(T3SlowPeriod, 2) + "," + DoubleToStr(Length, 2) + ")");
   SetIndexLabel(0, "Upperband");
   SetIndexLabel(1, "Lowerband");
   SetIndexLabel(2, "BB Macd");
   SetIndexLabel(3, NULL);
   SetIndexLabel(4, NULL);
   return (0);
}

// 52D46093050F38C27267BCE42543EF60
int deinit() {
   return (0);
}

// EA2B2676C28C0DB26D39331A336C6B92
int start() {
   double Ld_12;
   double Ld_20;
   int shift_28;
   int Li_8 = IndicatorCounted();
   if (Li_8 < 0) return (-1);
   if (Li_8 > 0) Li_8--;
   int Li_0 = MathMin(Bars - Li_8, Bars - 1);
   if (G_bool_208) {
      G_ibuf_168[0] = Li_0 + 1;
      return (0);
   }
   if (G_bool_212 || G_timeframe_196 == Period()) {
      if (!drawDots)
         if (G_ibuf_192[Li_0] == -1.0) f0_2(Li_0, G_ibuf_180, G_ibuf_184);
      Ld_12 = 2.0 / (Length + 1.0);
      for (int Li_4 = Li_0; Li_4 >= 0; Li_4--) {
         G_ibuf_176[Li_4] = f0_4(iMA(NULL, 0, 1, 0, MODE_EMA, T3FastPrice, Li_4), T3FastPeriod, T3FastHot, T3FastOriginal, Li_4, 0) - f0_4(iMA(NULL, 0, 1, 0, MODE_EMA, T3SlowPrice,
            Li_4), T3SlowPeriod, T3SlowHot, T3SlowOriginal, Li_4, 1);
         G_ibuf_188[Li_4] = G_ibuf_188[Li_4 + 1] + Ld_12 * (G_ibuf_176[Li_4] - (G_ibuf_188[Li_4 + 1]));
         Ld_20 = f0_3(G_ibuf_176, G_ibuf_188[Li_4], Length, Li_4);
         G_ibuf_168[Li_4] = G_ibuf_188[Li_4] + StDv * Ld_20;
         G_ibuf_172[Li_4] = G_ibuf_188[Li_4] - StDv * Ld_20;
         G_ibuf_180[Li_4] = EMPTY_VALUE;
         G_ibuf_184[Li_4] = EMPTY_VALUE;
         G_ibuf_192[Li_4] = G_ibuf_192[Li_4 + 1];
         if (G_ibuf_176[Li_4] > G_ibuf_176[Li_4 + 1]) G_ibuf_192[Li_4] = 1;
         if (G_ibuf_176[Li_4] < G_ibuf_176[Li_4 + 1]) G_ibuf_192[Li_4] = -1;
         if (G_ibuf_192[Li_4] == -1.0) {
            if (drawDots) {
               G_ibuf_180[Li_4] = G_ibuf_176[Li_4];
               continue;
            }
            f0_6(Li_4, G_ibuf_180, G_ibuf_184, G_ibuf_176);
         }
      }
      return (0);
   }
   Li_0 = MathMax(Li_0, MathMin(Bars - 1, iCustom(NULL, G_timeframe_196, Gs_200, "returnBars", 0, 0) * G_timeframe_196 / Period()));
   if (!drawDots)
      if (G_ibuf_192[Li_0] == -1.0) f0_2(Li_0, G_ibuf_180, G_ibuf_184);
   for (Li_4 = Li_0; Li_4 >= 0; Li_4--) {
      shift_28 = iBarShift(NULL, G_timeframe_196, Time[Li_4]);
      G_ibuf_168[Li_4] = iCustom(NULL, G_timeframe_196, Gs_200, "calculateValue", T3FastPrice, T3FastPeriod, T3FastHot, T3FastOriginal, T3SlowPrice, T3SlowPeriod, T3SlowHot,
         T3SlowOriginal, Length, StDv, 0, shift_28);
      G_ibuf_172[Li_4] = iCustom(NULL, G_timeframe_196, Gs_200, "calculateValue", T3FastPrice, T3FastPeriod, T3FastHot, T3FastOriginal, T3SlowPrice, T3SlowPeriod, T3SlowHot,
         T3SlowOriginal, Length, StDv, 1, shift_28);
      G_ibuf_176[Li_4] = iCustom(NULL, G_timeframe_196, Gs_200, "calculateValue", T3FastPrice, T3FastPeriod, T3FastHot, T3FastOriginal, T3SlowPrice, T3SlowPeriod, T3SlowHot,
         T3SlowOriginal, Length, StDv, 2, shift_28);
      G_ibuf_180[Li_4] = EMPTY_VALUE;
      G_ibuf_184[Li_4] = EMPTY_VALUE;
      G_ibuf_192[Li_4] = iCustom(NULL, G_timeframe_196, Gs_200, "calculateValue", T3FastPrice, T3FastPeriod, T3FastHot, T3FastOriginal, T3SlowPrice, T3SlowPeriod, T3SlowHot,
         T3SlowOriginal, Length, StDv, 6, shift_28);
      if (drawDots && G_ibuf_192[Li_4] == -1.0) G_ibuf_180[Li_4] = G_ibuf_176[Li_4];
   }
   if (!drawDots) {
      for (Li_4 = Li_0; Li_4 >= 0; Li_4--)
         if (G_ibuf_192[Li_4] == -1.0) f0_6(Li_4, G_ibuf_180, G_ibuf_184, G_ibuf_176);
   }
   return (0);
}

// 33B5F9392F2A76B37F7C243381478E4B
double f0_3(double Ada_0[], double Ad_4, int Ai_12, int Ai_16) {
   double Ld_20 = 0.0;
   for (int count_28 = 0; count_28 < Ai_12; count_28++) Ld_20 += (Ada_0[Ai_16 + count_28] - Ad_4) * (Ada_0[Ai_16 + count_28] - Ad_4);
   return (MathSqrt(Ld_20 / Ai_12));
}

// 21F8D7C6ACBD885873A4BA3D594D41CD
void f0_2(int Ai_0, double &Ada_4[], double &Ada_8[]) {
   if (Ada_8[Ai_0] != EMPTY_VALUE && Ada_8[Ai_0 + 1] != EMPTY_VALUE) {
      Ada_8[Ai_0] = EMPTY_VALUE;
      return;
   }
   if (Ada_4[Ai_0] != EMPTY_VALUE && Ada_4[Ai_0 + 1] != EMPTY_VALUE && Ada_4[Ai_0 + 2] == EMPTY_VALUE) Ada_4[Ai_0 + 1] = EMPTY_VALUE;
}

// D1B45A6FF1A5430B6E40FB3AD384517E
void f0_6(int Ai_0, double &Ada_4[], double &Ada_8[], double Ada_12[]) {
   if (Ada_4[Ai_0 + 1] == EMPTY_VALUE) {
      if (Ada_4[Ai_0 + 2] == EMPTY_VALUE) {
         Ada_4[Ai_0] = Ada_12[Ai_0];
         Ada_4[Ai_0 + 1] = Ada_12[Ai_0 + 1];
         Ada_8[Ai_0] = EMPTY_VALUE;
         return;
      }
      Ada_8[Ai_0] = Ada_12[Ai_0];
      Ada_8[Ai_0 + 1] = Ada_12[Ai_0 + 1];
      Ada_4[Ai_0] = EMPTY_VALUE;
      return;
   }
   Ada_4[Ai_0] = Ada_12[Ai_0];
   Ada_8[Ai_0] = EMPTY_VALUE;
}

// B9EDCDEA151586E355292E7EA9BE516E
int f0_5(string As_0) {
   As_0 = f0_0(As_0);
   for (int Li_8 = ArraySize(Gia_220) - 1; Li_8 >= 0; Li_8--)
      if (As_0 == Gsa_216[Li_8] || As_0 == "" + Gia_220[Li_8]) return (MathMax(Gia_220[Li_8], Period()));
   return (Period());
}

// 1368D28A27D3419A04740CF6C5C45FD7
string f0_1(int Ai_0) {
   for (int Li_4 = ArraySize(Gia_220) - 1; Li_4 >= 0; Li_4--)
      if (Ai_0 == Gia_220[Li_4]) return (Gsa_216[Li_4]);
   return ("");
}

// 0385FAB291C6DD1F9F0C732E98E3917D
string f0_0(string As_0) {
   int Li_20;
   string Ls_ret_8 = As_0;
   for (int Li_16 = StringLen(As_0) - 1; Li_16 >= 0; Li_16--) {
      Li_20 = StringGetChar(Ls_ret_8, Li_16);
      if ((Li_20 > \'`\' && Li_20 < \'{\') || (Li_20 > \'?\' && Li_20 < 256)) Ls_ret_8 = StringSetChar(Ls_ret_8, Li_16, Li_20 - 32);
      else
         if (Li_20 > -33 && Li_20 < 0) Ls_ret_8 = StringSetChar(Ls_ret_8, Li_16, Li_20 + 224);
   }
   return (Ls_ret_8);
}

// 5FFF0406096EE64C0135056E5E1304BD
double f0_4(double Ad_0, double Ad_8, double Ad_16, bool Ai_24, int Ai_28, int Ai_32 = 0) {
   double Ld_36;
   if (ArrayRange(Gda_224, 0) != Bars) ArrayResize(Gda_224, Bars);
   if (ArrayRange(Gda_228, 0) < Ai_32 + 1) ArrayResize(Gda_228, Ai_32 + 1);
   if (Gda_228[Ai_32][0] != Ad_8) {
      Gda_228[Ai_32][0] = Ad_8;
      Ld_36 = Ad_16;
      Gda_228[Ai_32][1] = (-Ld_36) * Ld_36 * Ld_36;
      Gda_228[Ai_32][2] = 3.0 * Ld_36 * Ld_36 + 3.0 * Ld_36 * Ld_36 * Ld_36;
      Gda_228[Ai_32][3] = (-6.0 * Ld_36) * Ld_36 - 3.0 * Ld_36 - 3.0 * Ld_36 * Ld_36 * Ld_36;
      Gda_228[Ai_32][4] = 3.0 * Ld_36 + 1.0 + Ld_36 * Ld_36 * Ld_36 + 3.0 * Ld_36 * Ld_36;
      if (Ai_24) Gda_228[Ai_32][5] = 2.0 / (Ad_8 + 1.0);
      else Gda_228[Ai_32][5] = 2.0 / ((Ad_8 - 1.0) / 2.0 + 2.0);
   }
   int Li_44 = 6 * Ai_32;
   int Li_48 = Bars - Ai_28 - 1;
   if (Li_48 == 0) {
      Gda_224[Li_48][Li_44 + 0] = Ad_0;
      Gda_224[Li_48][Li_44 + 1] = Ad_0;
      Gda_224[Li_48][Li_44 + 2] = Ad_0;
      Gda_224[Li_48][Li_44 + 3] = Ad_0;
      Gda_224[Li_48][Li_44 + 4] = Ad_0;
      Gda_224[Li_48][Li_44 + 5] = Ad_0;
   } else {
      Gda_224[Li_48][Li_44 + 0] = Gda_224[Li_48 - 1][Li_44 + 0] + Gda_228[Ai_32][5] * (Ad_0 - (Gda_224[Li_48 - 1][Li_44 + 0]));
      Gda_224[Li_48][Li_44 + 1] = Gda_224[Li_48 - 1][Li_44 + 1] + Gda_228[Ai_32][5] * (Gda_224[Li_48][Li_44 + 0] - (Gda_224[Li_48 - 1][Li_44 + 1]));
      Gda_224[Li_48][Li_44 + 2] = Gda_224[Li_48 - 1][Li_44 + 2] + Gda_228[Ai_32][5] * (Gda_224[Li_48][Li_44 + 1] - (Gda_224[Li_48 - 1][Li_44 + 2]));
      Gda_224[Li_48][Li_44 + 3] = Gda_224[Li_48 - 1][Li_44 + 3] + Gda_228[Ai_32][5] * (Gda_224[Li_48][Li_44 + 2] - (Gda_224[Li_48 - 1][Li_44 + 3]));
      Gda_224[Li_48][Li_44 + 4] = Gda_224[Li_48 - 1][Li_44 + 4] + Gda_228[Ai_32][5] * (Gda_224[Li_48][Li_44 + 3] - (Gda_224[Li_48 - 1][Li_44 + 4]));
      Gda_224[Li_48][Li_44 + 5] = Gda_224[Li_48 - 1][Li_44 + 5] + Gda_228[Ai_32][5] * (Gda_224[Li_48][Li_44 + 4] - (Gda_224[Li_48 - 1][Li_44 + 5]));
   }
   return (Gda_228[Ai_32][1] * (Gda_224[Li_48][Li_44 + 5]) + Gda_228[Ai_32][2] * (Gda_224[Li_48][Li_44 + 4]) + Gda_228[Ai_32][3] * (Gda_224[Li_48][Li_44 + 3]) + Gda_228[Ai_32][4] * (Gda_224[Li_48][Li_44 +
      2]));
}



此主题相关图片如下:11.png
按此在新窗口浏览图片

[此贴子已经被作者于2016/2/5 22:26:13编辑过]

--  作者:jinzhe
--  发布时间:2016/2/6 8:18:25
--  
请注释一下
--  作者:我渡苍生
--  发布时间:2016/2/6 13:58:11
--  
 麻烦改一下谢谢  麻烦改成金字塔谢谢

  BM:=MACD.DIF(12,26,9);      BM赋值:平滑异同平均的DIF(12,26,9)


 通达信   改成   麻烦改成金字塔谢谢


--  作者:jinzhe
--  发布时间:2016/2/6 14:38:32
--  
那么就是系统自带的macd
--  作者:我渡苍生
--  发布时间:2016/2/6 14:55:19
--  
 通达信   改成   副图
N:=3;  


 
 BM:=MACD.DIF(12,26,9);
 AAM:BM,POINTDOT, COLORGREEN,LINETHICK5;
 AAC:IF(BM>REF(BM,1),BM,DRAWNULL),POINTDOT,COLORRED,LINETHICK5;
 

 
 
DRAWICON(CROSS(BM,REF(BM,1)),BM,1);
DRAWICON(CROSS(REF(BM,1),BM),BM,2);
  

DRAWICON(CROSS(BM,REF(BM,1)),BM,1);
DRAWICON(CROSS(REF(BM,1),BM),BM,2);
   



平空开多:=CROSS(BM,REF(BM,1))    ;
平多开空:=CROSS(REF(BM,1),BM)    ;

 bBOLL:=MA(BM,10);
 bUB:bBOLL+2.5*STD(BM,N),COLORGREEN,LINETHICK1;
 bLB:bBOLL-2.5*STD(BM,N), COLORRED,LINETHICK1;


   

 
 
  
通达信   改成   副图

 
   
--  作者:jinzhe
--  发布时间:2016/2/6 15:09:11
--  

N:=3; 

 


 
 BM:=stkindi(\'\',\'macd.diff\',0,datatype);
 AAM:BM,POINTDOT, COLORGREEN,LINETHICK5;
 AAC:IF(BM>REF(BM,1),BM,DRAWNULL),POINTDOT,COLORRED,LINETHICK5;
 


 
 
DRAWICON(CROSS(BM,REF(BM,1)),BM,1);
DRAWICON(CROSS(REF(BM,1),BM),BM,2);
 


DRAWICON(CROSS(BM,REF(BM,1)),BM,1);
DRAWICON(CROSS(REF(BM,1),BM),BM,2);
  

 

 


平空开多:=CROSS(BM,REF(BM,1))    ;
平多开空:=CROSS(REF(BM,1),BM)    ;


 bBOLL:=MA(BM,10);
 bUB:bBOLL+2.5*STD(BM,N),COLORGREEN,LINETHICK1;
 bLB:bBOLL-2.5*STD(BM,N), COLORRED,LINETHICK1;