以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  后台程序化交易的手数设置  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=173913)

--  作者:zj564335
--  发布时间:2020/1/10 9:22:10
--  后台程序化交易的手数设置
 同一个模型,我想不同品种的手数设置不同,这个要怎么进行 

--  作者:FireScript
--  发布时间:2020/1/10 9:24:48
--  
 把手数设置成参数。
INPUT函数就行了。
但是你依然还是要设置多个后台预警才行。每个预警单独修改INPUT参数。
[此贴子已经被作者于2020/1/10 9:43:22编辑过]

--  作者:zj564335
--  发布时间:2020/1/10 10:58:17
--  
这个模型你帮我修改一下,白银2005合约,下5手;另外原油2003合约,下1手,应该怎么修改;


--  作者:zj564335
--  发布时间:2020/1/10 10:58:59
--  
 B1:=MA(C,150);
MID:=MA(CLOSE,140);
TMP2:=STD(CLOSE,140);
TOP:=MID+2*TMP2;
BOTTOM:=MID-2*TMP2;


N1:=BARSLAST(DATE<>REF(DATE,1))+1;
N:HHV(N1,300);
HH:REF(HhV(MA((O+H)/2,5),3*N),1);
LL:REF(LlV(MA((O+L)/2,5),3*N),1);
BSK:(HH/LL)*1000<2040;
QQ1:=CROSS(C,TOP) and BSK and C>B1 and C>HH;
PP1:=CROSS(MID,C)||(C<HHV(H,ENTERBARS+2)-ENTERPRICE*0.012);
QQ2:=CROSS(BOTTOM,C) and BSK and C<B1 and C<LL;
PP2:=CROSS(C,MID) OR (C>LLV(L,ENTERBARS+2)+ENTERPRICE*0.012);

IF HOLDING=0 and QQ1 THEN BUY(1,10,MARKET);//多空持仓为0并且最高价与前K线HH金叉,做多10手。
IF HOLDING=0 and  QQ2 THEN BUYSHORT(1,10,MARKET);//多空持仓为0并且最低价与前K线LL死叉,做空10手。



IF HOLDING>0 and PP1 THEN SELL(1,HOLDING,MARKET);//多头持仓大于0并且满足M点止损条件,多单全平。
IF HOLDING<0 and PP2 THEN SELLSHORT(1,HOLDING,MARKET);//空头持仓大于0并且满足M点止损条件,空单全平。

--  作者:wenarm
--  发布时间:2020/1/10 11:11:00
--  

最前面加上INPUT : N(1,1,100,1) ;//手数1到100,默认为1手

 

 

然后吧代码中的下单函数的第二个参数改成N.

例如:

buy(..,N,....) ;

sell(..,N,....) ;

 

 

这样下单手数就可以变成可调节的。只需要将公式加载到对应的窗格后,在该窗格上的公式名称右键,“调整参数”设置当前品种N的值就行了。

[此贴子已经被作者于2020/1/10 11:14:56编辑过]

--  作者:FireScript
--  发布时间:2020/1/10 11:11:59
--  
参考这里的14楼。
http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=173894&authorid=0&page=0&star=2

这个问题之前已经回复过了的。

--  作者:FireScript
--  发布时间:2020/1/10 11:13:42
--  
就2个步骤:
1.手数设置成可修改的参数
2.建立多个框架。每个框架单独设置周期,品种。指标加载上去后再修改手数参数即可:
类似下面这样
2个品种 下面手数一个10,一个8

图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看

--  作者:FireScript
--  发布时间:2020/1/10 11:15:06
--  
还有就是你上面的代码是图表程序化的,并非你说的后台程序化的代码。图表和后台是2种程序化的方式,代码上并非完全通用。还请注意下。
--  作者:zj564335
--  发布时间:2020/1/10 13:49:23
--  文华代码翻译成金字塔
VAR0:=EMA(C,14);
VAR2:=EMA(C,31) ;
MA240:= EMA(C,240);
CONDITION1:=CROSS(VAR0,VAR2);
CONDITION2:=CROSS(VAR2,VAR0);
 
BKX:=IF(CONDITION1,BARPOS,REF(BKX,1));
BKA:=IF(CONDITION2,BARPOS,REF(BKA,1));

CONDITION3:=CONDITION1 AND BKX>BKA AND  BKX>0 AND BKA>0 AND BARPOS>0;
VAR3SS:=HHV(H,(BKX-BKA)+1);
VAR3:IF(CONDITION3,VAR3SS,REF(VAR3,1));

CONDITION4:= CONDITION2  AND BKA>BKX AND BKX>0 AND BKA>0 AND BARPOS>0; 
VAR4SS:=LLV(L,(BKA-BKX)+1);
VAR4:IF(CONDITION4,VAR4SS,REF(VAR4,1));

MIDE:=MA(CLOSE,30); 
TMP2 := STD(CLOSE,100);
TOP : MIDE + 0.2*SQRT(30)*TMP2; 
BOTTOM : MIDE- 0.2*SQRT(30)*TMP2;

BOLT:=(TOP/BOTTOM)*1000<1030;

CONDITION5:= VAR0>VAR2 AND C>VAR3 ;
CONDITION5>0 AND MA(C,100)>MA240 &&BOLT && C>TOP,BK;

CONDITION6:= VAR0<VAR2 AND  VAR4>C;
CONDITION6>0 AND MA(C,100)<MA240 &&BOLT && C<BOTTOM,SK;

C<=BKPRICE-0.01*BKPRICE||C<=HHV(H,BARSBK+1)-0.015*BKHIGH,SP;
C>=SKPRICE+0.01*SKPRICE||C>=LLV(L,BARSSK+1)+0.015*SKLOW,BP;

--  作者:FireScript
--  发布时间:2020/1/10 14:29:23
--  
 
VAR0:=EMA(C,14);
VAR2:=EMA(C,31) ;
MA240:= EMA(C,240);
CONDITION1:=CROSS(VAR0,VAR2);
CONDITION2:=CROSS(VAR2,VAR0);
 
BKX:=VALUEWHEN(CONDITION1,BARPOS);
BKA:=VALUEWHEN(CONDITION2,BARPOS);

CONDITION3:=CONDITION1 AND BKX>BKA AND  BKX>0 AND BKA>0 AND BARPOS>0;
VAR3SS:=HHV(H,(BKX-BKA)+1);
VAR3:VALUEWHEN(CONDITION3,VAR3SS);

CONDITION4:= CONDITION2  AND BKA>BKX AND BKX>0 AND BKA>0 AND BARPOS>0;
VAR4SS:=LLV(L,(BKA-BKX)+1);
VAR4:VALUEWHEN(CONDITION4,VAR4SS);

MIDE:=MA(CLOSE,30);
TMP2 := STD(CLOSE,100);
TOP : MIDE + 0.2*SQRT(30)*TMP2;
BOTTOM : MIDE- 0.2*SQRT(30)*TMP2;

BOLT:=(TOP/BOTTOM)*1000<1030;

CONDITION5:= VAR0>VAR2 AND C>VAR3 ;
IF CONDITION5>0 AND MA(C,100)>MA240 and  BOLT and C>TOP then buy(holding=0,1,market);

CONDITION6:= VAR0<VAR2 AND  VAR4>C;
if CONDITION6>0 AND MA(C,100)<MA240 and BOLT and  C<BOTTOM then buyshort(holding=0,1,market);

IF C<=ENTERPRICE-0.01*ENTERPRICE or C<=0.985*HHV(H,ENTERBARS+1)  THEN SELL(HOLDING>0,HOLDING,MARKET);
IF C>=ENTERPRICE+0.01*ENTERPRICE or C>=1.015*LLV(L,ENTERBARS+1) THEN SELLSHORT(HOLDING<0,HOLDING,MARKET);

供参考。