以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  请帮忙看下我所改的问题出在哪里?  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=161132)

--  作者:sanmu528
--  发布时间:2018/1/18 1:02:17
--  请帮忙看下我所改的问题出在哪里?
INPUT:M0(1.5,1,10,1),N2(10,1,50,1); variable:trs:=0; variable:ups:=0; variable:dns:=0; variable:flag=1; variable:flagh=1; variable:changeOfTrs=1; variable:ColorBuffer=1; variable:SuperTrend=1; variable:Support1=1; variable:Resist1=1; variable:SUPERTREND下拐=1; variable:SUPERTREND上拐=1; //--- R001:KLINE(H,O,L,C,1); //--- TR1:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW)); ATR:=MA(TR1,NN); med:=(H+L)/2; ups:=med+atr*M0; dns:=med-atr*M0; trsr1:=ref(trs,1); trsr2:=ref(trs,2); SuperTrendr1:=ref(SuperTrend,1); SuperTrendr2:=ref(SuperTrend,2); upsr1:=ref(ups,1); dnsr1:=ref(dns,1); //--- IF c>upsr1 THEN BEGIN trs=1; IF trsr1=-1 THEN changeOfTrs=1; end else if c0 THEN BEGIN flag=1; end else BEGIN flag=0; end IF trs>0 and trsr1<0 THEN="THEN" BEGIN flagh="1; end else" BEGIN="BEGIN" flagh="0; end //--" draw="draw" the="the" indicator IF trs="1" THEN BEGIN supertrend="dns; " if="if" changeoftrs="1" THEN BEGIN supertrendr1="SuperTrendr2; " changeoftrs="0; " end end else if="if" trs="-1" THEN BEGIN supertrend="ups; " if="if" changeoftrs="1" THEN BEGIN supertrendr1="SuperTrendr2; " changeoftrs="0; " end end //--- Support1:=SuperTrend; Resist1:=SuperTrend; UpTrend:=Support1Support1 THEN BEGIN SUPERTREND上拐=L; END END else BEGIN IF H>Resist1 AND Cvar reload=1;
--  作者:sanmu528
--  发布时间:2018/1/18 1:06:02
--  
INPUT:M0(1.5,1,10,1),N2(10,1,50,1);
variable:trs:=0;
variable:ups:=0;
variable:dns:=0;
variable:flag=1;
variable:flagh=1;
variable:changeOfTrs=1;
variable:ColorBuffer=1;
variable:SuperTrend=1;
variable:Support1=1;
variable:Resist1=1;
variable:SUPERTREND下拐=1;
variable:SUPERTREND上拐=1;
 //---
R001:KLINE(H,O,L,C,1);
 //---
TR1:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR:=MA(TR1,NN);
med:=(H+L)/2;
ups:=med+atr*M0;
dns:=med-atr*M0;
trsr1:=ref(trs,1);
trsr2:=ref(trs,2);
SuperTrendr1:=ref(SuperTrend,1);
SuperTrendr2:=ref(SuperTrend,2);
upsr1:=ref(ups,1);
dnsr1:=ref(dns,1);
 //---
IF c>upsr1 THEN  
   BEGIN
     trs=1;  
     IF trsr1=-1 THEN  
        changeOfTrs=1;
end

else if c<dnsr1 THEN     
   BEGIN
     trs=-1; 
     IF dnsr1=1 THEN  
        changeOfTrs=1;
end

else if trsr1=1 THEN  
   BEGIN
   trs=1;
   changeOfTrs=0;
end

else if trsr1=-1 THEN 
   BEGIN
   trs=-1;
   changeOfTrs=0;
end

IF trs<0 and trsr1>0 THEN 
   BEGIN
   flag=1;
end

else  
   BEGIN
   flag=0;
end

IF trs>0 and trsr1<0 THEN 
   BEGIN
   flagh=1;
end

else 
   BEGIN  
   flagh=0;
end

//-- draw the indicator
IF trs=1 THEN
   BEGIN
   SuperTrend=dns;
   if changeOfTrs=1 THEN
      BEGIN
      SuperTrendr1=SuperTrendr2;
      changeOfTrs=0;
    end
end

else if trs=-1 THEN
   BEGIN
   SuperTrend=ups;
   if changeOfTrs=1 THEN
      BEGIN
      SuperTrendr1=SuperTrendr2;
      changeOfTrs=0;
    end
end

 //---
Support1:=SuperTrend;
Resist1:=SuperTrend;
UpTrend:=Support1<C;
 //---

IF UpTrend  THEN
   BEGIN
   IF L<Support1 AND C>Support1 THEN
      BEGIN
        SUPERTREND上拐=L;
   END
END

else  
   BEGIN
   IF H>Resist1 AND C<Resist1 THEN
      BEGIN
        SUPERTREND下拐=H;
   END
END

 //---
请帮忙看下我所改的问题出在哪里?调不出两条线出来

--  作者:sanmu528
--  发布时间:2018/1/18 1:15:19
--  
以下指标是MT5的部分源码,想改成金字塔版的。谢谢,帮我看下上面编码问题出在哪里

input int    Periode=10;
input double Multiplier=3;
input bool   Show_Filling=false; // Show as DRAW_FILLING
//---
double buyPB[];
double sellPB[];
//---
double SuperTrend[];
double ColorBuffer[];
//---
double Atr[];
double Up[];
double Down[];
double Middle[];
double trend[];
//---
int atrHandle;
int changeOfTrend;
int flag;
int flagh;


      Middle[i]=(high[i]+low[i])/2;
      Up[i]  = Middle[i] +(Multiplier*Atr[i]);
      Down[i]= Middle[i] -(Multiplier*Atr[i]);
      //---
      if(close[i]>Up[i-1])
        {
         trend[i]=1;
         if(trend[i-1]==-1) changeOfTrend=1;
        }
      else if(close[i]<Down[i-1])
        {
         trend[i]=-1;
         if(trend[i-1]==1) changeOfTrend=1;
        }
      else if(trend[i-1]==1)
        {
         trend[i]=1;
         changeOfTrend=0;
        }
      else if(trend[i-1]==-1)
        {
         trend[i]=-1;
         changeOfTrend=0;
        }

      if(trend[i]<0 && trend[i-1]>0)
        {
         flag=1;
        }
      else
        {
         flag=0;
        }

      if(trend[i]>0 && trend[i-1]<0)
        {
         flagh=1;
        }
      else
        {
         flagh=0;
        }

      if(trend[i]>0 && Down[i]<Down[i-1])
         Down[i]=Down[i-1];

      if(trend[i]<0 && Up[i]>Up[i-1])
         Up[i]=Up[i-1];

      if(flag==1)
         Up[i]=Middle[i]+(Multiplier*Atr[i]);

      if(flagh==1)
         Down[i]=Middle[i]-(Multiplier*Atr[i]);

      //-- draw the indicator
      if(trend[i]==1)
        {
         SuperTrend[i]=Down[i];
         if(changeOfTrend==1)
           {
            SuperTrend[i-1]=SuperTrend[i-2];
            changeOfTrend=0;
           }
         ColorBuffer[i]=0.0;
        }
      else if(trend[i]==-1)
        {
         SuperTrend[i]=Up[i];
         if(changeOfTrend==1)
           {
            SuperTrend[i-1]=SuperTrend[i-2];
            changeOfTrend=0;
           }
         ColorBuffer[i]=1.0;
        }
      //---
      double Support1= 0;
      double Resist1 = 0;
      //---
      Support1 = SuperTrend[i];
      Resist1  = SuperTrend[i];
      //---
      bool UpTrend=Support1<close[i];
      //---
      sellPB[i]=0;
      buyPB[i]=0;
      //---      
      if(UpTrend)
        {
         if(low[i]<Support1 && close[i]>Support1)
           {
            buyPB[i]=low[i];
           }
        }
      else
        {
         if(high[i]>Resist1 && close[i]<Resist1)
           {
            sellPB[i]=high[i];
           }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+---------+

--  作者:FireScript
--  发布时间:2018/1/18 10:28:15
--  
MT5我们这边不是很了解,所以没办法很好的处理。举个例子:你翻译一个语言从德语翻译到中文,肯定要对2种语言都有了解才行。我们技术人员肯定如果对MT5了解比较少的话,那对你的帮助就很有限了。
--  作者:sanmu528
--  发布时间:2018/1/18 11:04:23
--  
老师,你说的我明白了,那能否看下我前面的编码有没有什么逻辑上的问题,请帮忙指出改进,,谢谢
--  作者:sanmu528
--  发布时间:2018/1/18 11:14:00
--  
图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看
以下是我通过文化版自己改进的编码,,在指标里是可以显示红绿已经转向的,,但是转向不是很到位有偏差,所以我现在想参照MT5里的多循环模糊逻辑进去,可出来的编码指标就实现不了红绿和转向
INPUT:M0(1.5,1,10,1),N2(10,1,50,1);
variable:trs:=0,ups:=0,dns:=0;
R001:KLINE(H,O,L,C,1);
TR1:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR:=MA(TR1,NN);
med:=(H+L)/2;
ups:=med+atr*M0;
dns:=med-atr*M0;
trs:=if(c>ref(ups,1),1,if(c<ref(dns,1),-1,trs));
flag:=trs<0 and ref(trs,1)>0;
flagh:=trs>0 and ref(trs,1)<0;
dns:=if(trs>0 and dns<ref(dns,1),ref(dns,1),dns);
ups:=if(trs<0 and ups>ref(ups,1),ref(ups,1),ups);
ups:=if(flag,med+atr*M0,ups);
dns:=if(flagh,med-atr*M0,dns);
outtrs:=trs;
outups:=ups;
outdns:=dns;
SUPERTREND:=if(outtrs=1,outdns,outups);

L1:=REF(UPS,BARSLAST(UPS<=REF(UPS,1)));
L2:=LLV(UPS,NN*1.5);
LL:=IF(L2!=REF(L2,1) AND L1<REF(L1,1),L1,IF(L1=L2,L1,L2));
S1:=BARSLAST(CROSS(0.5,UPS=LL))+1;
S2:=CROSS(COUNT((CROSS(C,LL) OR CROSS(C,REF(LL,2))) AND UPS>LL,S1),0.5);
A6:=BARSLAST(S2);
B6:=BARSLAST(CROSS(HHV(DNS,A6+1),C));
SUPERTREND上拐:=CROSS(B6,A6);
SUPERTREND下拐:=CROSS(A6,B6);
SUPERTREND01:IF(B6>A6,HHV(DNS,BARSLAST(SUPERTREND上拐)+1),LLV(UPS,BARSLAST(SUPERTREND下拐)+1)),COLOR996611,LINETHICK2;
SUPERTREND02:IF(B6>A6,SUPERTREND01,DRAWNULL),COLORF00099,LINETHICK2;
SUPERTREND下标记:DRAWICON(SUPERTREND下拐,SUPERTREND01*1.001,5);
SUPERTREND上标记:DRAWICON(SUPERTREND上拐,SUPERTREND02*0.999,4);


--  作者:sanmu528
--  发布时间:2018/1/18 11:16:54
--  
以下是我参照MT5自己改的编码,但就是SUPERTREND线显示数值有很大问题,,所以我不知道问题出在哪里,请帮忙看下,谢谢
INPUT:M0(1.5,1,10,1),N2(10,1,50,1);
variable:trs:=0;
variable:ups:=0;
variable:dns:=0;
variable:flag=0;
variable:flagh=0;
variable:changeOfTrs=0;
variable:ColorBuffer=0;

variable:Support1=1;
variable:Resist1=1;
variable:SUPERTREND下拐=1;
variable:SUPERTREND上拐=1;
 //---
R001:KLINE(H,O,L,C,1);
 //---
TR1:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR:=MA(TR1,NN);
med:=(H+L)/2;
ups:=med+atr*M0;
dns:=med-atr*M0;
trsr1:=ref(trs,1);
trsr2:=ref(trs,2);
upsr1:=ref(ups,1);
dnsr1:=ref(dns,1);
 //---
IF c>upsr1 THEN  
   BEGIN
     trs=1;  
     IF trsr1=-1 THEN  
        changeOfTrs=1;
end

else if c<dnsr1 THEN     
   BEGIN
     trs=-1; 
     IF trsr1=1 THEN  
        changeOfTrs=1;
end

else if trsr1=1 THEN  
   BEGIN
   trs=1;
   changeOfTrs=0;
end

else if trsr1=-1 THEN 
   BEGIN
   trs=-1;
   changeOfTrs=0;
end

IF trs<0 and trsr1>0 THEN 
   BEGIN
   flag=1;
end

else  
   BEGIN
   flag=0;
end

IF trs>0 and trsr1<0 THEN 
   BEGIN
   flagh=1;
end

else 
   BEGIN  
   flagh=0;
end

IF trs>0 and dns<dnsr1 THEN 
   dns=dnsr1;

IF trs<0 and ups>upsr1 THEN 
   ups=upsr1;

IF flag=1 THEN 
   ups=med+atr*M0;

IF flagh=1 THEN  
   dns=med-atr*M0;

SUPERTREND:if(TRS=1,dns,ups);




--  作者:sanmu528
--  发布时间:2018/1/18 11:19:28
--  
     我对比了下和MT5的以下这段IF  else if循环,我看不出我自己以上编的问题出在哪,望帮忙提建议,谢谢
 Middle[i]=(high[i]+low[i])/2;
      Up[i]  = Middle[i] +(Multiplier*Atr[i]);
      Down[i]= Middle[i] -(Multiplier*Atr[i]);
      //---
      if(close[i]>Up[i-1])
        {
         trend[i]=1;
         if(trend[i-1]==-1) changeOfTrend=1;
        }
      else if(close[i]<Down[i-1])
        {
         trend[i]=-1;
         if(trend[i-1]==1) changeOfTrend=1;
        }
      else if(trend[i-1]==1)
        {
         trend[i]=1;
         changeOfTrend=0;
        }
      else if(trend[i-1]==-1)
        {
         trend[i]=-1;
         changeOfTrend=0;
        }

      if(trend[i]<0 && trend[i-1]>0)
        {
         flag=1;
        }
      else
        {
         flag=0;
        }

      if(trend[i]>0 && trend[i-1]<0)
        {
         flagh=1;
        }
      else
        {
         flagh=0;
        }

      if(trend[i]>0 && Down[i]<Down[i-1])
         Down[i]=Down[i-1];

      if(trend[i]<0 && Up[i]>Up[i-1])
         Up[i]=Up[i-1];

      if(flag==1)
         Up[i]=Middle[i]+(Multiplier*Atr[i]);

      if(flagh==1)
         Down[i]=Middle[i]-(Multiplier*Atr[i]);

      //-- draw the indicator
      if(trend[i]==1)
        {
         SuperTrend[i]=Down[i];
         if(changeOfTrend==1)
           {
            SuperTrend[i-1]=SuperTrend[i-2];
            changeOfTrend=0;
           }
         ColorBuffer[i]=0.0;
        }
      else if(trend[i]==-1)
        {
         SuperTrend[i]=Up[i];
         if(changeOfTrend==1)
           {
            SuperTrend[i-1]=SuperTrend[i-2];
            changeOfTrend=0;
           }
         ColorBuffer[i]=1.0;
        }

--  作者:sanmu528
--  发布时间:2018/1/18 11:20:18
--  
不知道我的前端变量设置是否不对?
--  作者:sanmu528
--  发布时间:2018/1/18 11:22:49
--  
请你分别输入文华改进版和我现在的编码分别比照下,应该需要如何作调整