以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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=184758) |
-- 作者:zwlgtja -- 发布时间:2021/3/17 14:37:24 -- 求助,编写问题 想把以前在文华上用的搬过来,找不出需要修改的地方,求组,谢谢 Params Numeric OpenLen(3); //用于计算开盘价指数移动平均的周期 Numeric CloseLen(3); //用于计算收盘价指数移动平均的周期 Vars NumericSeries Histogram; //记录开盘价的指数移动平均与收盘价的指数移动平均之差 NumericSeries BuyPrice; //多头触发价格 NumericSeries LongExitPrice; //多头平仓触发价格 NumericSeries Con1; //判断是否为上升趋势 NumericSeries Con2; //判断是否为下降趋势 NumericSeries ATR10; //ATR Numeric N; //下单手数 Numeric SH; //平仓参数 Numeric RLP,FLP; //涨跌停价 Numeric BIDP,ASKP; //买卖一价 Numeric BRP,SRP; //多空头可用持仓 Numeric OPFLG; //模型处理标志 Numeric BKDFLG; //买开处理标志 Numeric BPDFLG; //买平处理标志 Global_Numeric BKID,SKID; //开仓委托 Global_Numeric BPID,SPID; //平仓委托 Global_Numeric BKFLG,SKFLG; //开仓标志 Global_Numeric BPFLG,SPFLG; //平仓标志 Global_Numeric BKM,SKM; //开仓委托手数 Global_Numeric BPM,SPM; //平仓委托手数 Global_Numeric BKP,SKP; //开仓委托价格 Global_Numeric BPP,SPP; //平仓委托价格 Begin PlotNumeric("MA1", Ema(Close,CloseLen) ); PlotNumeric("MA2", Ema(Open,OpenLen) ); //------------------------信号发出------------------------// If(1) //信号发出 { //条件设置 Histogram = Ema(Close,CloseLen) - Ema(Open,OpenLen); Con1 = CrossUp(Histogram,0); Con2 = CrossDown(Histogram,0); ATR10 = Ma(TrueRange,10); //设置多头入场触发价与多头平仓触发价 If(Con1 == 1) { BuyPrice = High + ATR10 * 0.5; LongExitPrice = Low - ATR10 * 0.5; } //满足上升趋势且向上突破触发价则进场做多 If(Histogram[1] > 0 && Vol > 0) { If(High >= BuyPrice) //最高价>买入触发价 { BK(DefaultVol,Max(Open,BuyPrice)); } } //转为下降趋势多头平仓出场 If(MarketPosition == 1 && BarsSinceEntry > 0 && Con2[1] && Vol > 0) { SP(DefaultVol,Open); } //向下突破多头平仓触发价格则多头平仓出场 If(MarketPosition == 1 && BarsSinceEntry > 0 && low <= LongExitPrice && Vol > 0) { SP(DefaultVol,Min(Open,LongExitPrice)); } //在图表上显示多头进场触发价格 If(MarketPosition == 0 && Histogram > 0 && BuyPrice>0) { PlotNumeric("BuyPrice",BuyPrice); } //持有多仓,输出多头平仓触发价格 If(MarketPosition == 1) { PlotNumeric("LongExitPrice",LongExitPrice); } } //------------------------处理开启------------------------// If(A_IsExchangeOpen() == 1) //如果是开盘状态 { If(BarStatus() == 2) //如果不带入历史值 { If(RunStart() == 1) //如果已初始化成功 { OPFLG = 1; //开启模型处理 } } } //------------------------变量赋值------------------------// If(OPFLG == 1) //变量赋值 { N = 1; //下单手数 BIDP = Price("Bid1"); //买一价 ASKP = Price("Ask1"); //卖一价 RLP = Price("RiseLimit"); //涨停价 FLP = Price("FallLimit"); //跌停价 BRP = F_BuyRemainPosition(); //多头可用持仓 BRP = Min(BRP,A_BuyRemainPosition()); //多头可用持仓 If(A_IsSHCode() == 1) //如果是上期所合约 { SH = Enum_ExitToday; //平仓参数 } Else //如果非上期所合约 { SH = Enum_Exit; //平仓参数 } } //------------------------信号处理------------------------// If(OPFLG == 1) //信号处理 { If(F_FreshSig() == 1) //如果当前信号是未处理过的信号 { If(F_SigValid() == 1) //如果当前信号未消失 { If(F_Sig() == Sig_BK) //如果信号类型为BK { Commentary("【BK信号!】"); BKDFLG = 1; //开启买开处理 } Else If(F_Sig() == Sig_BP) //如果信号类型为BP { Commentary("【BP信号!】"); BPDFLG = 1; //开启买平处理 } } } } //------------------------成交判断------------------------// If(OPFLG == 1) //成交判断 { If(BKFLG == 1) //如果有买开委托 { If(F_OrderStatus(BKID) == Enum_Filled) //如果买开委托成交 { Commentary("【BK信号:买开委托成交!】"); BKFLG = 0; //买开标志归0 } } If(BPFLG == 1) //如果有买平委托 { If(F_OrderStatus(BPID) == Enum_Filled) //如果买平委托成交 { Commentary("【BP信号:买平委托成交!】"); BPFLG = 0; //买平标志归0 } } } //------------------------委托处理------------------------// If(OPFLG == 1) //委托处理 { If(BKDFLG == 1) //如果已开启买开处理 { If(BKFLG == 0) //如果没有买开委托 { BKM = N; //买开委托手数 BKP = ASKP; //买开委托价格 Commentary("【BK信号:买开委托发出!】"); BKID = A_SendOrder(Enum_Buy,Enum_Entry,BKM,BKP); //发出买开委托 BKFLG = 1; //已发出买开委托 } } If(BPDFLG == 1) //如果已开启买平处理 { If(BPFLG == 0) //如果没有买平委托 { If(SRP > 0) //如果有空头可用持仓 { BPM = SRP; //买平委托手数 BPP = RLP; //买平委托价格 Commentary("【BP信号:买平委托发出!】"); BPID = A_SendOrder(Enum_Buy,SH,BPM,BPP); //发出买平委托 BPFLG = 1; //已发出买平委托 } } } } End |
-- 作者:gxx978 -- 发布时间:2021/3/17 14:48:54 -- 代码转化问题比较花时间,我们会先评估下这段代码是否能顺利转成金字塔的PEL语言,如转换过程中间遇到需要跟您确认的问题,会直接跟帖的,您持续关注本贴即可。 [此贴子已经被作者于2021/3/17 14:49:38编辑过]
|