双均线交叉系统交易模型源代码
量化交易策略:MACD双均线交叉策略
概述该策略基于MACD指标,利用MACD指标中的MACD线和Signal线的交叉来判断交易信号。
当MACD 线上穿Signal线时产生做多信号,当MACD线下穿Signal线时产生做空信号。
同时使用前一根K线的最低价作为多头止损位,前一根K线的最高价作为空头止损位。
止盈位设置为4倍ATR(平均真实波幅)。
策略原理MACD指标由DIF线和DEA线组成,DIF线是快速均线和慢速均线的差值,DEA线是DIF线的移动平均线。
当DIF线上穿DEA线时,表明股价已经脱离超卖区域并开始向上,产生做多信号;当DIF线下穿DEA线时,表明股价已经脱离超买区域并开始向下,产生做空信号。
同时,策略使用前一根K线的最低价和最高价分别作为多头止损位和空头止损位,以控制风险。
止盈位设置为4倍ATR,以获取更多利润。
优势分析1.MACD指标能够较好地捕捉股价的趋势变化,特别是中长期趋势。
2.止损位的设置能够有效控制风险,避免单笔交易的损失过大。
3.止盈位的设置能够让利润充分扩大,提高策略收益。
4.代码逻辑清晰,容易理解和实现。
风险分析1.MACD指标有滞后性,可能错过最佳建仓时机。
2.止损位的设置相对简单,可能无法应对某些极端行情。
3.止盈位的设置可能导致错过更大的利润空间。
4.缺乏仓位管理,风险控制能力有限。
优化方向1.可以考虑加入其他指标,如RSI、布林带等,以提高信号准确性。
2.可以优化止损位的设置,如使用ATR或百分比止损,以更好地控制风险。
3.可以优化止盈位的设置,如使用移动止盈或部分止盈,以获取更多利润。
4.可以加入仓位管理,如基于风险比例调整仓位大小,以提高风险控制能力。
总结该策略基于MACD指标,通过MACD线和Signal线的交叉来判断交易信号,同时使用前一根K线的最低价和最高价作为止损位,止盈位设置为4倍ATR。
策略逻辑清晰,容易实现,能够较好地捕捉股价趋势。
但是,该策略也存在一些风险,如指标滞后、止损位设置简单等。
通达信均线交叉算法 主图源码
均线交叉算法均线交叉包括所谓的金叉和死叉。
大多数股盲喜欢金叉买,死叉卖。
屡试屡败,不知错在何处?有经验者,喜欢用所谓的有效交叉原理进行过滤,以期提高胜率,仍是雾里看花,水中捞月。
何之在《大师的命门》一书中,道破玄机,几人能懂?其实,通过简单算法,可以知道,所谓均线的交叉与之前的价格与昨天的均线有关,通过计算,可以知道均线交叉的均衡点,若今天收盘价大于均衡,一定是金叉,反之亦然。
----------------------------------------------------------------------------------------------以上证指数为例,月线级别,3均在五月K线处,已经金叉5均,本月均衡点在2682,不破仍是金叉状态。
周线级别,5均在20均之下,目前的均衡点在3124,不能站上,仍是所谓的死叉状态。
日线级别,5均在六一金叉20均,目前均衡点在2563,可以明白短线处于强势区域。
3均在五三零已经金叉5均,目前均衡点在2769,与目前指数2938相距169,超短线也是强势,强势不玩,岂不可惜?通达信源码如下参数N 1 60 5P 1 60 20------------------------------------------MN:MA(C,N),COLORWHITE;MP:MA(C,P),COLORYELLOW;RN:=REF(MN,1);RP:=REF(MP,1);A1:=N*P*(RP-RN);A2:=P*REF(C,N)-N*REF(C,P);JC:IF(CURRBARSCOUNT<=20,(A1+A2)/(P-N),DRAWNULL),COLORFFFF00,DOTLINE;。
图解双均线双交叉期货股票操作系统课件
图解“双均线双交叉”期货、股票操作系统
2、操作方式与周期的选择 做股票,由于中国A股不能做空,不能T+0,因
此日内操作受到限制,再者股票无交割期,因此 做股票可以在较长的时期持有。若要把握一轮中 级上涨行情赚大钱,选时看大盘指数是否上5月 线,周线双均线双交叉系统是否双金叉,,日线 MACD双均线是否上横轴。选股与看大盘选时的 条件差不多,但更要周线MACD双均线上横轴。 以后就是周线双均线双金叉时买入股票并持有, 周线双均线双死叉时空仓。
线在横轴线之上为多头,在横轴线之下为 空头。 MACD双均线在横轴线之上: 1、金叉后,DIF、DEA方向相同为多头 强势上涨。 2、金叉后,DIF、DEA方向相反,甚至 DIF、DEA死叉,为多头上涨修正。
图解“双均线双交叉”期货、股票操作系统
MACD双均线在横轴线之下: 1、死叉后,DIF、DEA方向相同为空头
图解“双均线双交叉”期货、股票操作系统
2、做期货 由于其交易制度正好与中国A股市场相反,并且
还有资金的杠杆作用,因此做期货的操作方式比 较灵活多样。可以按日、周周期做大趋势,也可 以选择从15分钟到日线周期做波段。更可以选择 从1分钟到15分钟周期做日内波动。 期货做大趋势看周线图中的技术图形选品种,做 波段或者日内波动看价格的活跃程度选品种。 做期货,注意控制仓位,注意防隔夜风险,注意 交割期。 ——————END——————
强势下跌。 2、死叉后,DIF、DEA方向相反,甚至
DIF、DEA金叉,为空头下跌修正。
图解“双均线双交叉”期货、股票操作系统
三、MA、MACD双均线双交叉操作系统及使用 规则
双均线双金叉,上涨趋势形成买多。 1、MACD双均线在横轴线之上,是多头上涨,
自适应均线的源代码以及改良
自适应均线的源代码以及改良根据考夫曼的自适应均线原理,利用文华财经编了一下,还是不错的,现把源代码公布出来给大家参考。
交易指标即自适应均线的源代码,我根据指标改良了一下交易系统,考夫曼原来是采用均线值的变化率发出买卖信号,我觉得不是很好,就用最高最低价构建了一个智能均线带,采用最低最高价突破来发出信号,大家一起探讨阿。
交易指标:DIRECTION:=CLOSE-REF(CLOSE,N);VOLATILITY:=SUM(ABS((CLOSE-REF(CLOSE,1))),N);ER:=ABS(DIRECTION/VOLATILITY);FASTSC:=2/(2 + 1);SLOWSC:=2/(30 + 1);SSC:=ER*(FASTSC-SLOWSC)+SLOWSC;CONSTANT:=SSC*SSC;AMAHIGH:REF(EMA(HIGH,N),1)+CONSTANT*(HIGH- REF(EMA(HIGH,N),1));AMALOW:REF(EMA(LOW,N),1)+CONSTANT*(LOW- REF(EMA(LOW,N),1));交易模型:DIRECTION:=CLOSE-REF(CLOSE,N);VOLATILITY:=SUM(ABS((CLOSE-REF(CLOSE,1))),N);ER:=ABS(DIRECTION/VOLATILITY);FASTSC:=2/(2 + 1);SLOWSC:=2/(30 + 1);SSC:=ER*(FASTSC-SLOWSC)+SLOWSC;CONSTANT:=SSC*SSC;AMAHIGH:=REF(EMA(HIGH,N),1)+CONSTANT*(HIGH- REF(EMA(HIGH,N),1));AMACLOSE:=REF(EMA(CLOSE,N),1)+CONSTANT*(CLOSE- REF(EMA(CLOSE,N),1));AMALOW:=REF(EMA(LOW,N),1)+CONSTANT*(LOW- REF(EMA(LOW,N),1));LOW>AMAHIGH,BK;CLOSE<AMACLOSE,SP;HIGH<AMALOW,SK;CLOSE>AMACLOSE,BP;AMACLOSE:=REF(EMA(CLOSE,N),1)+CONSTANT*(CLOSE- REF(EMA(CLOSE,N),1));这还不是原书中定义的自适应均线。
通达信变色双均线主图源码通达信指标源码
{P1:1 100 10 P2: 1 100 20}DRAWGBK(C>0, RGB(0,10,10),RGB(88,0,0),0,'11',0);DRAWNUMBER(ISLASTBAR,C,C),COLORMAGENTA;N8:=STRCAT(CON2STR(YEAR,0),' 年');Y8:=STRCAT(CON2STR(MONTH,0),' 月');R8:=STRCAT(CON2STR(DAY,0),' 日');MAR1:=MA(CLOSE,P1);C1:=C>=MAR1;C2:=C<MAR1;AA:=C1>=C2;BB:=C2>C1;STICKLINE(AA,C,O,3,0),COLORRED;STICKLINE(AA,H,L,0,0),COLORRED;STICKLINE(BB,C,O,3,0),COLOR00FF00;STICKLINE(BB,H,L,0,0),COLOR00FF00;STICKLINE(AA,CLOSE,OPEN,3,0),COLOR000099;STICKLINE(AA,CLOSE,OPEN,2.2,0),COLOR0000CC;STICKLINE(AA,CLOSE,OPEN,1.5,0),COLOR0000FF;STICKLINE(AA,CLOSE,OPEN,0.5,0),COLORCC66FF;STICKLINE(BB,CLOSE,OPEN,3,0),COLORFF7700;STICKLINE(BB,CLOSE,OPEN,2.2,0),COLORFF9900;STICKLINE(BB,CLOSE,OPEN,1.5,0),COLORFFBB00;STICKLINE(BB,CLOSE,OPEN,0.5,0),COLORCYAN;MAA:MAR1,COLOR00FF00,LINETHICK2;IF(MAA>=REF(MAA,1),MAA,DRAWNULL),COLORRED,LINETHICK2;IF(MAA<REF(MAA,1),MAA,DRAWNULL),COLORFFFFFF,LINETHICK2;MAB:MA(CLOSE,P2),COLOR00FF00,LINETHICK2;IF(MAB>=REF(MAB,1),MAB,DRAWNULL),COLORMAGENTA,LINETHICK2;IF(MAB<REF(MAB,1),MAB,DRAWNULL),COLORGREEN,LINETHICK2;SJ8:=STRCAT(STRCAT(N8,Y8), R8);VAR2:=(2*CLOSE+HIGH+LOW)/4;VAR3:=IF(YEAR>=2099 AND MONTH>2,0,1);VAR4:=LLV(LOW,5);VAR5:=HHV(HIGH,4);VAR6:=EMA((VAR2-VAR4)/(VAR5-VAR4)*100,4)*VAR3;VAR7:=EMA(0.667*REF(VAR6,1)+0.333* VAR6,2)*VAR3;DRAWTEXT(CROSS(VAR6, VAR7) AND VAR6<30,L-0.05,'←低吸'),COLOR00FFFF; DRAWTEXT(CROSS(VAR7, VAR6) AND VAR6>70,H+0.05,'←高抛'),COLOR00FFFF;DRAWICON(CROSS(VAR6, VAR7) AND VAR6<30,L-0.05,13);DRAWICON(CROSS(VAR7, VAR6) AND VAR6>70,H+0.05,14);AAA:= MAA>=REF(MAA,1);{C>=MAA;}BBB:= MAA<REF(MAA,1);{ C<MAA;}DDD:=MAB>=REF(MAB,1);EEE:=MAB<REF(MAB,1);TT:=IF(ISLASTBAR,240/FROMOPEN,1);NN:=120;HH:=HHV(V*TT,NN);LL:=LLV(V,NN);最高:=CONST(HH);最低:=CONST(LL);最高2:=CONST(HHV(H,NN));最低2:=CONST(LLV(L,NN));PP:=IF((最高2*0.9-(最高2-最低2)*0.5)>CONST(LLV(L,20)),0.9,IF((最高2*0.9-(最高2-最低2)*0.5)>CONST(LLV(L,50)),0.7,0.6)),NODRAW;RCC1:=最高2*0.9-(最高2-最低2)*PP;最低3:=MIN(RCC1,最低2);AA1:=最低3;STICKLINE(AAA,AA1-0.000*AA1,AA1-0.040*AA1,4,0),COLOR0000FF;STICKLINE(BBB,AA1-0.000*AA1,AA1-0.040*AA1,4,1),COLOR686868;STICKLINE(EEE,AA1-0.050*AA1,AA1-0.090*AA1,4,1),COLOR686868;STICKLINE(DDD,AA1-0.050*AA1,AA1-0.090*AA1,4,0),COLORFF00FF;DRAWTEXT_FIX(C>0,0.5,0,0,SJ8),COLOR00FFFF;DRAWTEXT_FIX(1,0.5,0.84,0,'★★A-红色均线持股★★B-粉色均线持股★★'),COLOR00FFFF;今日保护价:(REF(C,2)+REF(C,1)+O)/3,COLOR00FFFF,NODRAW;顶点:IF(CURRBARSCOUNT<=60,CONST(IF(ISLASTBAR=1,HHV(H,BARSLAST(CURRBARSCO UNT=60)),1)),DRAWNULL),COLORRED,DOTLINE;低点:IF(CURRBARSCOUNT<=60,CONST(IF(ISLASTBAR=1,LLV(L,BARSLAST(CURRBARSCOU NT=60)),1)),DRAWNULL),COLORMAGENTA,DOTLINE;STICKLINE(CCI>=200 AND H>=顶点,O,C,3,0),COLORBLUE;STICKLINE(CCI<=100 AND L<=低点,O,C,3,0),COLORYELLOW;DRAWTEXT(ISLASTBAR,顶点,'顶点'),COLORRED;DRAWTEXT(ISLASTBAR,低点,'低点'),COLORMAGENTA;。
双均画线通达信指标公式源码
出现连续阳线一般是多方所为,在上一次连续阳线出现后我们在它的实体平均价格画一条黄色水平线,在它的成交额/成交量/100(均价)的平均价画一条洋红色水平线,看看多方在上次进攻中的成本在哪个位置?因为有画线,所以必须要到画线未来函数,而我的画线没画历史画线,只考虑最后一次的成本价位。
比如;两连阳就取最后一次两根阳线的实体高低点进行平分画线。
八连阳就取八根K线的均价画线到今天。
源码提供方便大家自行设置预警。
既然预警画线未来函数就无所谓了。
双均画线主图
JJ:=AMOUNT/VOL/100;
VAR0:=BARSLASTCOUNT(C>O);
T:=BARSLAST(CROSS(VAR0=1 AND REFX(VAR0=2,1),0.5));
VAR2:=IF(ISLASTBAR,VAR0>1,VAR0>1 AND REFX(C<=O,1));
T2:=BARSLAST(VAR2);
中间价:CONST((REF(HHV(C,T+1),T2)+REF(LLV(O,T+1),T2))/2),NODRAW;
中间均价:CONST(REF(SUM(JJ,T+1)/(T+1),T2)),NODRAW;
IF(CURRBARSCOUNT<=CONST(T)+1,中间价,DRAWNULL),COLORYELLOW;
IF(CURRBARSCOUNT<=CONST(T)+1,中间均价,DRAWNULL),COLORMAGENTA;。
双均线模型
ParamsNumeric Length1(10);Numeric Length2(20);Numeric Lots(1);Numeric TrailingStop(1); // 跟踪止损百分比Numeric BarsReEntry(5); // 出场后趋势维持多少根Bar后再进场VarsNumericSeries MA1;NumericSeries MA2;BoolSeries condBuy(false);BoolSeries condSell(false);Numeric MinPoint;Numeric MyExitPrice;NumericSeries HigherAfterEntry;NumericSeries LowerAfterEntry;Numeric StopLine(0);BoolSeries bLongStoped(false);BoolSeries bShortStoped(false);Numeric BarsAfterLongExit(0);Numeric BarsAfterShortExit(0);Begin/*if (BarStatus > 0) // V4中可以省略的序列变量传递部分{bLongStoped = bLongStoped[1];bShortStoped = bShortStoped[1];}*/Commentary("bLongStoped="+IIFString(bLongStoped,"true","false"));Commentary("bShortStoped="+IIFString(bShortStoped,"true","false"));if (BarsSinceEntry == 1){HigherAfterEntry = AvgEntryPrice;LowerAfterEntry = AvgEntryPrice;} Else If(BarsSinceEntry > 1){HigherAfterEntry = Max(HigherAfterEntry[1],High[1]);LowerAfterEntry = Min(LowerAfterEntry[1],Low[1]);}Else{HigherAfterEntry = HigherAfterEntry[1];LowerAfterEntry = LowerAfterEntry[1];}MA1 = AverageFC(Close,Length1);MA2 = AverageFC(Close,Length2);PlotNumeric("MA1",MA1);PlotNumeric("MA2",MA2);condBuy = CrossOver(MA1,MA2);condSell = CrossUnder(MA1,MA2);if ( condBuy == false and condSell == false ){condBuy = condBuy[1];condSell = condSell[1];}If ( MarketPosition <> 1 and condBuy[1] == true and bLongStoped == false) {Buy(Lots,Open);HigherAfterEntry = Open;bLongStoped = false;bShortStoped = false;}If ( MarKetPosition <>-1 and condSell[1] == true and bShortStoped == false) {SellShort(lots,Open);LowerAfterEntry = Open;bLongStoped = false;bShortStoped = false;}BarsAfterLongExit = NthCon(!bLongStoped,1);Commentary("BarsAfterLongExit="+text(BarsAfterLongExit));If(bLongStoped and MarketPosition == 0 and condBuy[1] == true and BarsAfterLongExit >= BarsReEntry){Buy(Lots,Open);bLongStoped = False;HigherAfterEntry = Open;Return;}BarsAfterShortExit = NthCon(!bShortStoped,1);Commentary("BarsAfterShortExit="+text(BarsAfterShortExit));If(bShortStoped and MarketPosition == 0 and condSell[1] == true and BarsAfterShortExit >= BarsReEntry){SellShort(Lots,Open);bShortStoped = False;LowerAfterEntry = Open;Return;}MinPoint = MinMove * PriceScale;If(MarketPosition==1){StopLine = HigherAfterEntry * (1 - TrailingStop * 0.01);If(Low <= StopLine){MyExitPrice = StopLine - MinPoint;If(Open < MyExitPrice) MyExitPrice = Open;Sell(0,MyExitPrice);bLongStoped = true;}}Else If(MarketPosition==-1){StopLine = LowerAfterEntry * ( 1 + TrailingStop * 0.01);If(High >= StopLine){MyExitPrice = StopLine + MinPoint;If(Open > MyExitPrice) MyExitPrice = Open;BuyToCover(0,MyExitPrice);bShortStoped = true;}}End。
双均线交系统EA模板,非常好用
双均线交系统EA模板,非常好用双均线交系统EA模板#define MAGICMA 123 //订单标记数//--- Inputsinput string 仓位设置="";input double Lots =0.01;input string 风险系数="";input double MaximumRisk =0.002;//风险系数input double DecreaseFactor=3;input string 均线参数=" ";input int Ma1 =8;input int Ma2 =24;//均线的参数//+------------------------------------------------------------------+//| Calculate open positions |//+------------------------------------------------------------------+int CalculateCurrentOrders(string symbol) //计算指定商品的持仓数,查询账户状态函数{int buys=0,sells=0;//---for(int i=0;i<="" p="">{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)//判断当前持仓单是否是当前商品的,及持仓单的序号是否为MAGICMA{if(OrderType()==OP_BUY) buys++; //如果是多单,则多单个数+1if(OrderType()==OP_SELL) sells++;}}//--- return orders volumeif(buys>0) return(buys);else return(sells);}//+------------------------------------------------------------------+//| Calculate optimal lot size |//+------------------------------------------------------------------+double LotsOptimized() //计算当前入场的手数,根据资金管理确定{double lot=Lots;int orders=HistoryTotal(); // history orders totalint losses=0; // 亏损订单变量number of losses orders without a break//--- select lot sizelot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/ 1000.0,1);//按照风险比例得出的下单数量,AccountFreeMargin账户资金的保证金//--- calcuulate number of losses orders without a breakif(DecreaseFactor>0){for(int i=orders-1;i>=0;i--)//如果历时订单-1后还大于0执行循环{if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)//S ELECT_BY_POS,MOD订单类型为开单和挂单,MODE_HISTORY来自历史的定单(平仓和取消定单)。
MT4双线交叉报警指标系统源码
通达信双均线系统通达信双均线系统 (2010-01-10 20:42:49)转载▼ 标签:杂谈ZQ:=256;DZ:=ZQ/4;A1:=HHV(H,ZQ);A2:=LLV(L,ZQ);{双均线M1 M2 变色设置及交叉}M1:MA(C,DZ),COLORYELLOW;IF(M1>=REF(M1,2),M1,DRAWNULL),COLORMAGENTA,LINET HICK1;M2:MA(C,ZQ),COLORWHITE,LINETHICK2;IF(M2>=REF(M2,2),M2,DRAWNULL),COLORRED,LINETHICK2;DRAWICON( CROSS(M1,M2) ,M2,1),COLORRED;DRAWICON( CROSS(M2,M1) ,M1,2),COLORGREEN;{以下为动态百分比}K4:=(0.382*HHV(HIGH,0)+0.618*LLV(LOW,0));K50%:(0.5*A1+0.5*A2),COLORGREEN,LINETHICK2;K61%:(0.618*A1+0.382*A2),COLORLIBLUE;K38%:(0.382*A1+0.618*A2),COLORLIBLUE;{以下为乾坤线代码,线上持股操盘,线下休息或轻仓做短}{说明:在5 15 30周期里,飞龙在天}TJ:=DZ*1.25;TJCS:=IF(PERIOD=1,TJ*3,TJ/(PERIOD-1));CS:=IF(PERIOD>=1 AND PERIOD<=3,TJCS,DRAWNULL);乾坤线:=(MA(C,CS)+MA(C,CS*2)+MA(C,CS*4))/3;DRAWTEXT(CURRBARSCOUNT=13 ,乾坤线,'乾坤线'),COLORBROWN;积极操盘:IF(乾坤线>REF(乾坤线,2),乾坤线,乾坤线), COLORRED,LINETHICK3;持币观望:IF(乾坤线<REF(乾坤线,2),乾坤线,DRAWNULL), COLORYELLOW, LINETHICK3;。
股票 CROSS函数源码
股票 CROSS函数源码股票CROSS函数是一种常用的技术分析工具,用于判断短期和长期均线的交叉情况。
本文将提供 CROSS 函数的源代码,并解释其实现原理。
定义:CROSS(A, B) 函数表示在 A 上方穿过 B,即 A 从下方向上穿过B。
CROSS(B, A) 函数表示在 A 下方穿过 B,即 A 从上方向下穿过B。
原理:CROSS 函数的实现原理非常简单,只需要判断 A 和 B 的取值关系即可。
当 A 的值大于 B 的值时,表示 A 在 B 上方,此时 CROSS(A, B) 返回 1;反之,当 A 的值小于 B 的值时,表示 A 在 B 下方,此时 CROSS(B, A) 返回 1;否则返回 0。
源码:以下是 CROSS 函数的源代码:```pythondef CROSS(A, B):if A[-2] < B[-2] and A[-1] > B[-1]:return 1else:return 0```其中,A 和 B 是两个数组,表示两个均线的取值序列。
由于CROSS 函数是用于判断最新的两个值之间的关系,因此在判断之前需要先判断 A 和 B 的长度是否足够,即 A 和 B 的长度至少为 2。
示例:以下是使用 CROSS 函数判断 5 日均线和 10 日均线的交叉情况的示例代码:```python# 生成随机序列作为测试数据import randomA = [random.uniform(0, 100) for _ in range(20)]B = [random.uniform(0, 100) for _ in range(20)]# 计算 5 日均线和 10 日均线MA5 = [sum(A[i-4:i+1])/5 for i in range(4, len(A))]MA10 = [sum(A[i-9:i+1])/10 for i in range(9, len(A))] # 判断 5 日均线和 10 日均线的交叉情况for i in range(len(MA5)):if CROSS(MA5[i:i+2], MA10[i:i+2]) == 1:print('5 日均线从下方向上穿过 10 日均线')elif CROSS(MA10[i:i+2], MA5[i:i+2]) == 1:print('5 日均线从上方向下穿过 10 日均线')else:print('5 日均线和 10 日均线没有交叉')```以上代码会生成两个长度为 20 的随机序列 A 和 B,并计算它们的 5 日均线和 10 日均线。
双均线交叉系统交易模型源代码
系统是个常见的交易系统,这里给出例子,目的在于告诉大家交易系统编码,设计需要考虑的问题,和注意点。
交易规则:如果短期均线上穿长期均线,做多,如原来持有空单,则先平空单,再建多仓如果短期均线下穿长期均线,做空,如原来持有多单,则先平多单,再建空单短周期:10长周期:20交易头寸暂为1手出场部分设计我们使用三种类型的止损设置:进场后设置初始止损;有一定盈利后设置保本止损;盈利增大后使用追踪止盈(峰值价回落ATR倍数);为此,设置三个止损参数:Numeric InitialStop(20); // 初始止损(千分之N)Numeric BreakEvenStop(30); // 保本止损(千分之N)Numeric TrailingStop(50); // 追踪止损(千分之N)三种止损的代码可以放在一起处理,取最有利的价格作为止损(赢)价。
多头止损部分的代码// 初始止损StopLine = EntryPrice * (1-InitialStop/1000);// 达到保本止损条件,将止损位上移到保本的价位If (HigherAfterEntry >= EntryPrice * (1+BreakEvenStop/1000))StopLine = EntryPrice;// 追踪止损的价位超过保本止损价,止损价随盈利峰值价的上升同步提高If (StopLine < HigherAfterEntry*(1-TrailingStop/1000))StopLine = HigherAfterEntry*(1-TrailingStop/1000);Commentary("止损价:"+Text(StopLine));// 止损触发If(Low <= StopLine){MyPrice = StopLine;If(Open < MyPrice) MyPrice = Open;Sell(Lots,MyPrice);bLongStoped = True; // 止损后设置标志Commentary("Long Position Stoped at "+text(MyPrice));}其他规则其他策略和例子1相同:采用多空模型分开设计;再进场必须行情再创新高(低);过滤集合竞价数据止损处理的细节无论初次进场还是再次进场,进场后都是把进场价作为开仓后的盈利最高价或最低价。
简单双均线策略(基于python和tushare接口)
1. 数据准备1.1导入库,接入tushare.pro接口1.2 获取单一股票的日行情信息(pro.query or ts.pro_bar )并做基本处理tushare:使用通用行情接口(ts.pro_bar())查询行情信息# 专用接口data = pro.query('daily', ts_code='600030.SH', start_date='20150701', end_date='20211114') # 通用行情接口ts.pro_bardf = ts.pro_bar(ts_code='600030.SH', start_date='20180101', end_date='20201011',adj ='qfq')得到的是一个时间序列数据,紧接着进行:按照时间升序排列:排序(python)将时间转datetime格式:时间操作(python)将datetime格式的时间转成index:时间操作(python)1.3 生成长短期均线,查看并作图滚动窗口上进行mean、std等简单计算(python)data['SMA_20']= data['close'].rolling(window=20).mean()data['SMA_60']= data['close'].rolling(window=60).mean()data.tail()# 不指定最小可用窗口长度会导致较多数据烧掉,看结尾就好data[['close','SMA_20','SMA_60']].plot(figsize=(10,6))# 作图1.4 计算连续的相邻收益,并查看收益直方图分布计算相邻收益率Pandas内置的数据可视化:直方图(df.hist())data['returns']= np.log(data['close']/ data['close'].shift(1))data['returns'].hist(bins=35)2. 策略开发思路2.1 构造factordata['factor_SMA20_SMA60']= data['SMA_20']- data['SMA_60']2.2 根据factor得到position,作图查看positionnp.where()函数(python)data['position']=np.where(data['factor_SMA20_SMA60']>0,1,-1)data['position'].plot(ylim=[-1.1,1.1],title='Market Positioning')2.3 去掉空值data.dropna(inplace=True)#去掉空值,NaN3. 策略收益分析3.1 计算策略收益,比较买入并持有累计收益和策略累计收益计算累计收益率警惕未来函数:t时刻的factor只能知道t+1时刻的position,这意味着position需要滞后一期。
MT4双线交叉报警指标系统源码
#property indicator_chart_window#property indicator_buffers 4#property indicator_color1 Yellow#property indicator_color2 White#property indicator_color3 Yellow#property indicator_color4 White//---- input parametersextern int 均线周期1=10;extern int 均线周期2=130;extern int 类型1=1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA extern int 类型2=1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA extern string 类型说明="0-SMA; 1-EMA; 2-SMMA; 3-LWMA"; extern int 文字水平=0;extern int 文字垂直=0;extern int 文字大小=14;extern string 文字标识="1";extern color 文字颜色=Yellow;extern int 是否报警=1;extern int 是否发邮件=1;//---- buffersdouble Ma10[];double Ma130[];double Up[];double Down[];int TimeInMinute;int FlagAlert=0;//+------------------------------------------------------------------+ //| Custom indicator initialization function |//+------------------------------------------------------------------+ int init(){//---- indicatorsIndicatorBuffers(4);SetIndexStyle(0,DRAW_LINE);SetIndexStyle(1,DRAW_LINE);SetIndexStyle(2,DRAW_ARROW);SetIndexStyle(3,DRAW_ARROW);SetIndexBuffer(0,Ma10);SetIndexBuffer(1,Ma130);SetIndexBuffer(2,Up);SetIndexBuffer(3,Down);SetIndexArrow(2,233);SetIndexArrow(3,234);TimeInMinute=0;//----return(0);}int start(){int i;int limit;string Signal;int counted_bars=IndicatorCounted();//---- check for possible errorsif(counted_bars<0) return(-1);//---- the last counted bar will be recountedif(counted_bars>0) counted_bars--;limit=Bars-counted_bars;for (i=limit-1;i>=0;i--){Ma10[i]=iMA(NULL,0,均线周期1,0,类型1,PRICE_CLOSE,i);Ma130[i]=iMA(NULL,0,均线周期2,0,类型2,PRICE_CLOSE,i);if ((Ma10[i+1]Ma130[i])&&(Close[i]>Ma10[i])&&(Close[i]>Ma130[i])){Signal="["+Period()+"分钟]"+TimeMonth(Time[i]+TimeInMinute)+"月"+TimeDay(Time[i]+TimeInMinute)+"日"+TimeHour(Time[i]+TimeInMinute)+"点"+TimeMinute(Time[i]+TimeInMinute)+"分 "+Symbol()+"在价格"+DoubleToStr(Close[i],4)+"发生"+均线周期1+"均线上穿"+均线周期2+"均线"; writetext(文字标识,Signal,20+文字水平,40+文字垂直,文字颜色,文字大小);Up[i]=Low[i]-3*Point;if (i==0){if (FlagAlert==0){if (是否报警==1)Alert(Signal);if (是否发邮件==1)SendMail(Signal,Signal);FlagAlert=1;}}}if ((Ma10[i+1]>Ma130[i+1])&&(Ma10[i]{Signal="["+Period()+"分钟]"+TimeMonth(Time[i]+TimeInMinute)+"月"+TimeDay(Time[i]+TimeInMinute)+"日"+TimeHour(Time[i]+TimeInMinute)+"点"+TimeMinute(Time[i]+TimeInMinute)+"分 "+Symbol()+"在价格"+DoubleToStr(Close[i],4)+"发生"+均线周期1+"均线下穿"+均线周期2+"均线"; writetext(文字标识,Signal,20+文字水平,40+文字垂直,文字颜色,文字大小);Down[i]=High[i]+3*Point;if (i==1){if (FlagAlert==0){if (是否报警==1)Alert(Signal);if (是否发邮件==1)SendMail(Signal,Signal);FlagAlert=1;}}}else FlagAlert=0;}return(0);}void writetext(string Labelname,string data,int x,int y,color ColorValue,int FontSize)//通过Object写文字{ObjectDelete(Labelname);ObjectCreate(Labelname, OBJ_LABEL, 0, 0, 0);ObjectSetText(Labelname, data, FontSize, "Arial", ColorValue);ObjectSet(Labelname, OBJPROP_CORNER, 0);ObjectSet(Labelname, OBJPROP_XDISTANCE, x);ObjectSet(Labelname, OBJPROP_YDISTANCE, y);}。
python海龟交易法则股票回测-双均线规则(一)
python海龟交易法则股票回测-双均线规则(⼀)看着别⼈炒股挣钱,⼼⾥总是⼼痒痒,但是每次⼀⼊市,总能被当⾲菜收割,沉不住⽓。
近期看了《海龟交易法则》,⾥⾯提到⼀些说法,觉得有点意思,所以拿历史数据试⼀试,探探究竟,不作为投资建议,仅供娱乐。
抛出书⾥的⼏个说法:1、投资可以标准化,但是每⼏个⼈能坚持;2、找到⼀个期望值为正的操作系统,不如有55%的概率是挣钱的,那么只要不断的重复,最终总可以赢钱,除⾮你是45%*45%...*45%的倒霉蛋;3、风险空值,逐步试⾏;4、简单就可以了,复杂的系统反⽽会出现过度拟合;使⽤python进⾏数据收集和处理,最后进⾏结果分析和展⽰。
使⽤到pandas库、⾦融数据库使⽤了akshare(免费,tushare也可以,但是要有积分),但是akshare收集到的数据,与不同平台的进⾏⽐较(wind,东⽅财富)有微⼩偏差,暂忽略不计。
***本次回测操作⽅法为趋势交易,采⽤60⽇均线上穿250⽇均线时买⼊(认为开启往上涨的趋势),下穿时卖出(认为上涨结束开始下跌)使⽤当前A股从2000年1⽉1⽇到2020年11⽉26⽇数据进⾏测试。
以当前数据的结论是:截⽌到2020年11⽉26⽇,包含持有的收益是(6000倍),但是需要操作的资⾦量⼤,操作股票数量较多,且存在连续亏损的年份,虽然总体为正收益,但是执⾏起来信⼼难以保障。
1、获取机构名单,这个通过wind查询了机构的名单;2、获取数据,通过akshare库获取每只股票从2000年开始,每⼀天的数据,采⽤后复权。
后复权:保证历史价格不变,在每次股票权益事件发⽣后,调整当前的股票价格。
后复权价格和真实股票价格可能差别较⼤,不适合⽤来看盘。
其优点在于,可以被看作投资者的长期财富增长曲线,反映投资者的真实收益率情况。
%%time# 读取全部A股数据for i, row in org.iterrows():code = row['akcode']t1 = row['上市⽇期']if t1 < datetime.datetime(2000,1,1):t1 = datetime.datetime(2000,1,1)t2 = datetime.datetime.now()print(str(i),code,'开始读取。
双均线交易系统
双均线交易系统双均线交易系统公式原理1、利用短期均线与长期均线的交叉信号进行开平仓操作。
2、短期均线向上交叉长期均线,开多平空;短期均线向下交叉长期均线,开空平多;。
编制说明1、高点突破确认以收盘价高于短期均线上穿长期均线当天和第二天最高价高者为准。
2、低点突破确认以收盘价低于短期均线下穿长期均线当天和第二天最低价低者为准。
3、这是一个连续在市的交易系统,即平空就同时开多,或平多就同时开空。
4、这里介绍的是利用简单移动平均MA编制的交易系统,大家也可以用EMA、SMA等做出相似的系统。
几条实际应用原则1、大处着眼,小处着手。
趋势看周线,进出看日线。
2、顺大势,逆小势。
周线牛市,日线逢低做多;周线熊市,日线逢高放空。
3、若变盘日信号与感觉或经验不一致时,可以平仓观望,待情况明朗后再开新仓。
4、若初始止损额太大,平仓后可以等待日线上涨拉回或下跌反弹时再开新仓。
5、若盘中刺穿止损价,可以先平仓。
待周末收盘价明确后,买回或反手开新仓。
6、遇到3、4、5所述情况,要作好失去最佳机会的心理准备。
有得必有失嘛。
{双均线交易系统公式源码}{=============双均线交易系统============主图指标}DRAWTEXT(STRTONUM(NUMTOSTR(BARPOS,0))-BARPOS=44,C,'牛市做多熊市放空'),ALIGN4,COLORYELLOW;INPUT:SHORT(17,3,999),LONG(32,5,999);MAS:=MA(CLOSE,SHORT);MAL:=MA(CLOSE,LONG);DF:=MA( CLOSE,SHORT)-MA(CLOSE,LONG);{=============确定均线金叉死叉转折点}FDU0:=CROSS(DF,0);{均线金叉点}FUD0:=CROSS(0,DF);{均线死叉点}JCSL:=COUNT(FDU0,0);{均线金叉点数量}SCSL:=COUNT(FUD0,0);{均线死叉点数量}{=============取得均线多空趋势线,空头防守高点,多头防守低点}FDU3:=REF(FDU0,1);{取得均线金叉第二天}FUD3:=REF(FUD0,1);{取得均线死叉第二天}DYDYJ:=SCSL=1 AND REF(SCSL,1)=0;{自定义金叉:若上市后均线首次出现的是死叉,则自定义一个金叉,位置与该死叉为同一天} DYDYS:=JCSL=1 AND REF(JCSL,1)=0;{自定义死叉:若上市后均线首次出现的是金叉,则自定义一个死叉,位置与该金叉为同一天} FTDU3:=BARSLAST(FDU3 OR DYDYJ),LINETHICK0;{均线金叉第二天或自定义金叉到目前的时间}FTUD3:=BARSLAST(FUD3 OR DYDYS),LINETHICK0;{均线死叉第二天或自定义死叉到目前的时间}QSLINE:=IF(FTDU3<FTUD3,REF(HHV(H,2),FTDU3),REF(LLV(L, 2),FTUD3)),COLORBLUE,PRECISION2;{原始均线多空趋势线:均线金叉取当天和第二天最高价高者为空头防守点,均线死叉取当天和第二天最低价低者为多头防守点} KMD:=JCSL=SCSL AND REF(JCSL,1)=1 AND REF(SCSL,1)=0;{过滤空头盲点}DMD:=JCSL=SCSL AND REF(JCSL,1)=0 AND REF(SCSL,1)=1;{过滤多头盲点}FUDGLINE:=IF(KMD OR DMD, REF(QSLINE,1),QSLINE),COLORBLUE,PRECISION2;{过滤多空盲点后的均线多空趋势线============}{=============判断均线多空转换}FJDU0:=REF(C,1)<=REF(FUDGLINE,1) AND C>FUDGLINE AND FTDU3<FTUD3;{均线死叉一段时间后发生金叉,收盘价突破均线多空趋势线}FJUD0:=REF(C,1)>=REF(FUDGLINE,1) AND C<FUDGLINE AND FTUD3<FTDU3;{均线金叉一段时间后发生死叉,收盘价跌破均线多空趋势线}FJDU1:=FJDU0 AND COUNT(FJDU0,FTDU3)=1;{均线金叉后收盘价第一次突破均线多空趋势线}FJUD1:=FJUD0 AND COUNT(FJUD0,FTUD3)=1;{均线死叉后收盘价第一次跌破均线多空趋势线}DTY:=COUNT(FJDU1,BARSCOUNT(FTDU3))>0 AND COUNT(FJUD1,BARSCOUNT(FTDU3))=0;{首次转多信号出现后未出现转空信号}KTY:=COUNT(FJDU1,BARSCOUNT(FTUD3))=0 AND COUNT(FJUD1,BARSCOUNT(FTUD3))>0;{首次转空信号出现后未出现转多信号}DDZT:=FJDU1 OR BARSLAST(FJDU1)<BARSLAST(FJUD1);{处于多头状态中}KDZT:=FJUD1 OR BARSLAST(FJDU1)>BARSLAST(FJUD1);{处于空头状态中}FJUU:=DTY OR DDZT;{均线趋势处于多头}FJDD:=KTY OR KDZT;{均线趋势处于空头}PARTLINE(FJUU,REF(LLV(L,2),FTUD3)),COLORMAGENTA,LINE THICK2;{画晶红色粗线代表均线趋势处于多头状态=============}PARTLINE(FJDD,REF(HHV(H,2),FTDU3)),COLORWHITE,LINET HICK2; {画白色粗线代表均线趋势处于空头状态===============}{========确定空转多当日或多转空当日}KZD1:=COUNT(FJUU,0);{多头累计日期}DZK1:=COUNT(FJDD,0);{空头累计日期}FJDU2:=FJUU AND REF(FJUU,1)=0 OR KZD1=1;{均线趋势空转多日,开多平空}FJUD2:=FJDD AND REF(FJDD,1)=0 OR DZK1=1;{均线趋势多转空日,开空平多}{=============多空转向信号=============}DRAWTEXT(FJDU2,1.03*H,'转\n多'),COLORMAGENTA,ALIGN0;{显示当日空转多信号=============}DRAWTEXT(FJUD2,0.97*L,'转\n空'),COLORWHITE,ALIGN0; {显示当日多转空信号=============}{=============多空止损价=============}开多平空:IF(FJDU2,FUDGLINE,0),COLORMAGENTA,LINETHICK0;{开多平空=========}开空平多:IF(FJUD2,FUDGLINE,0),COLORWHITE,LINETHICK0; {开空平多=========}{=============初始时的多空线显示}PARTLINE(KZD1=0 AND DZK1=0,FUDGLINE),COLORBLUE;。
双均线(MA20MA80)波段交易系统分享(仅供新手参考和启蒙)
双均线(MA20MA80)波段交易系统分享(仅供新手参考和启蒙)期货是个好东西!低投入,高收益。
投入几千元、几万元,便可以一夜翻倍。
以至于很多人抱着一夜暴富的梦想冲进期货市场。
但跟一些新开户的朋友交流后,发现很多人的交易理念存在较大的问题。
比如有:基本面型。
研究宏观经济数据,产业经济,侃侃而谈。
这是把做股票的毛病带到期货市场。
猜顶摸底型。
感觉涨多了,空一下;感觉跌多了,多一下。
全凭感觉型。
也真有,全凭感觉做,错了硬抗。
一把梭型。
看见一根大阴线,追空,第二天就是一根中阳反抽。
……这些都是做期货的大忌。
为了不再重复解释,也为了更多的人能轻松地进入期货市场,分享一个简单的双均线交易系统,仅供参考和启蒙。
这套系统,不需要懂支撑阻力,也不需要懂技术形态,甚至成交量也可以不懂,简单到刚入门的人都可以用。
听到均线,先别忙着嗤之以鼻。
虽然很多人喜欢裸k交易,很多年以前我也是。
但裸k会让人对级别产生迷思,均线则能很好起到过滤作用。
放心,这套均线交易系统,不会叫你看金叉死叉,也不会叫你看均线支撑压力。
一,设计原理顺势而为吗?截断亏损让利润奔跑吗?当然是。
技术分析的祖师爷查尔斯·道把趋势分为——涨跌盘,大中小。
涨跌盘,容易理解,也很明确。
真正的难点,是大中小。
在任何时点,观察角度不同,每个人看到的趋势级别是不同的。
也就是,上涨、下跌、盘整是同时存在的。
很多时候做错的原因,就是你所认为的下降趋势,不过是高级别趋势的一个小回撤而已。
为了防止做错方向,引入两条均线:一条趋势线,指明长期趋势,防止做错方向。
一条操盘线,界定中期趋势,做到持仓不慌,且规避大幅回撤。
这套策略操作的买点其实就是,大趋势之上的,中期趋势回调结束。
这是速度最快,趋势最稳定的时候。
二,交易系统均线设置:ma20,ma80操作级别:建议15分钟,1小时,日线。
实际上所有级别都适用,但均线设置会有所不同。
如在1分钟,可以把ma80改为ma100基本原则:ma80向上且ma20在ma80上,只多不空。
双均线策略代码
双均线策略代码双均线策略是一种极其简单的股票交易策略,它主要利用两条均线来识别股票价格变化的趋势,从而作出贸易决策。
具体来说,这种策略通过将较为短期的均线与较为长期的均线相叠加,观察均线之间的交叉情况,进而推测市场趋势的走向。
双均线策略的具体实现要依赖于代码编写。
在Python等编程语言中,一般可以采用pandas等数据分析库进行数据的读取和处理,以及ta-lib等技术指标库进行均线的计算。
下面给出一种可能的双均线策略实现代码:```pythonimport pandas as pdimport talib as ta# 读取股票数据stock_data = pd.read_csv("stock_data.csv")# 计算5日均线和20日均线stock_data["ma5"] = ta.MA(stock_data["close"], timeperiod=5) stock_data["ma20"] = ta.MA(stock_data["close"], timeperiod=20)# 计算均线交叉情况buy_signals = (stock_data["ma5"] > stock_data["ma20"]) & (stock_data["ma5"].shift() <= stock_data["ma20"].shift()) sell_signals = (stock_data["ma5"] < stock_data["ma20"]) & (stock_data["ma5"].shift() >= stock_data["ma20"].shift())# 根据信号进行交易positions = pd.Series(index=stock_data.index)cash = 100000shares = 0for i in range(len(stock_data)):if buy_signals.iloc[i]:shares = cash / stock_data["close"].iloc[i]cash = 0positions.iloc[i] = shareselif sell_signals.iloc[i]:cash = shares * stock_data["close"].iloc[i]shares = 0positions.iloc[i] = -cashelse:positions.iloc[i] = 0# 计算收益率和累积收益率returns = stock_data["close"].pct_change() * positions.shift() cumulative_returns = (1 + returns).cumprod()# 输出结果print("Final P&L:", cash + shares * stock_data["close"].iloc[-1]) print("Annualized return:", (cumulative_returns[-1]**(365/len(stock_data))-1)*100, "%")```在上述代码中,我们首先读取股票数据,然后利用ta-lib计算5日均线和20日均线,接着根据均线的交叉情况来生成买入信号和卖出信号。
双均线策略代码
双均线策略代码1. 引言双均线策略是一种常见的技术分析方法,通常被用于股票、期货和外汇市场。
本文将介绍双均线策略的原理,并给出一份Python代码实现。
2. 双均线策略原理双均线策略基于均线的交叉信号进行交易决策。
具体而言,该策略使用两种不同周期的均线,通常是短期均线和长期均线。
当短期均线向上穿过长期均线时,被称为“金叉”,意味着市场趋势向上,投资者可以考虑买入;相反,当短期均线向下穿过长期均线时,被称为“死叉”,意味着市场趋势向下,投资者可以考虑卖出。
3. 双均线策略代码实现下面是一个使用Python编写的双均线策略代码实现示例:import pandas as pdimport numpy as np# 读取数据data = pd.read_csv('data.csv')# 计算短期均线data['short_ma'] = data['close'].rolling(window=10).mean()# 计算长期均线data['long_ma'] = data['close'].rolling(window=30).mean()# 计算均线交叉信号data['signal'] = np.where(data['short_ma'] > data['long_ma'], 1, -1)# 计算交易信号data['position'] = data['signal'].diff()# 回测策略data['return'] = data['position'] * data['close'].pct_change()# 计算累计收益率data['cum_return'] = (1 + data['return']).cumprod()# 输出策略表现print('总收益率:', data['cum_return'].iloc[-1] - 1)print('年化收益率:', (data['cum_return'].iloc[-1])**(250/len(data))-1)print('最大回撤:', min(data['cum_return'])-max(data['cum_return'].cummax()))4. 代码解释•第1行导入需要使用的库。
通达信双均线系统
通达信双均线系统通达信双均线系统 (2010-01-10 20:42:49)转载▼ 标签:杂谈ZQ:=256;DZ:=ZQ/4;A1:=HHV(H,ZQ);A2:=LLV(L,ZQ);{双均线M1 M2 变色设置及交叉}M1:MA(C,DZ),COLORYELLOW;IF(M1>=REF(M1,2),M1,DRAWNULL),COLORMAGENTA,LINET HICK1;M2:MA(C,ZQ),COLORWHITE,LINETHICK2;IF(M2>=REF(M2,2),M2,DRAWNULL),COLORRED,LINETHICK2;DRAWICON( CROSS(M1,M2) ,M2,1),COLORRED;DRAWICON( CROSS(M2,M1) ,M1,2),COLORGREEN;{以下为动态百分比}K4:=(0.382*HHV(HIGH,0)+0.618*LLV(LOW,0));K50%:(0.5*A1+0.5*A2),COLORGREEN,LINETHICK2;K61%:(0.618*A1+0.382*A2),COLORLIBLUE;K38%:(0.382*A1+0.618*A2),COLORLIBLUE;{以下为乾坤线代码,线上持股操盘,线下休息或轻仓做短}{说明:在5 15 30周期里,飞龙在天}TJ:=DZ*1.25;TJCS:=IF(PERIOD=1,TJ*3,TJ/(PERIOD-1));CS:=IF(PERIOD>=1 AND PERIOD<=3,TJCS,DRAWNULL);乾坤线:=(MA(C,CS)+MA(C,CS*2)+MA(C,CS*4))/3;DRAWTEXT(CURRBARSCOUNT=13 ,乾坤线,'乾坤线'),COLORBROWN;积极操盘:IF(乾坤线>REF(乾坤线,2),乾坤线,乾坤线), COLORRED,LINETHICK3;持币观望:IF(乾坤线<REF(乾坤线,2),乾坤线,DRAWNULL), COLORYELLOW, LINETHICK3;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
系统是个常见的交易系统,这里给出例子,目的在于告诉大家交易系统编码,设计需要考虑的问题,和注意点。
交易规则:
如果短期均线上穿长期均线,做多,如原来持有空单,则先平空单,再建多仓
如果短期均线下穿长期均线,做空,如原来持有多单,则先平多单,再建空单
短周期:10
长周期:20
交易头寸暂为1手
出场部分设计
我们使用三种类型的止损设置:
进场后设置初始止损;
有一定盈利后设置保本止损;
盈利增大后使用追踪止盈(峰值价回落ATR倍数);
为此,设置三个止损参数:
Numeric InitialStop(20); // 初始止损(千分之N)
Numeric BreakEvenStop(30); // 保本止损(千分之N)
Numeric TrailingStop(50); // 追踪止损(千分之N)
三种止损的代码可以放在一起处理,取最有利的价格作为止损(赢)价。
多头止损部分的代码
// 初始止损
StopLine = EntryPrice * (1-InitialStop/1000);
// 达到保本止损条件,将止损位上移到保本的价位
If (HigherAfterEntry >= EntryPrice * (1+BreakEvenStop/1000))
StopLine = EntryPrice;
// 追踪止损的价位超过保本止损价,止损价随盈利峰值价的上升同步提高
If (StopLine < HigherAfterEntry*(1-TrailingStop/1000))
StopLine = HigherAfterEntry*(1-TrailingStop/1000);
Commentary("止损价:"+Text(StopLine));
// 止损触发
If(Low <= StopLine)
{
MyPrice = StopLine;
If(Open < MyPrice) MyPrice = Open;
Sell(Lots,MyPrice);
bLongStoped = True; // 止损后设置标志
Commentary("Long Position Stoped at "+text(MyPrice));
}
其他规则
其他策略和例子1相同:
采用多空模型分开设计;
再进场必须行情再创新高(低);
过滤集合竞价数据
止损处理的细节
无论初次进场还是再次进场,进场后都是把进场价作为开仓后的盈利最高价或最低价。
两者的区别之处在于:
初次进场,因为是开盘价进场,可以在开仓Bar实现止损;
而再次入场,因为在历史K线中,无法确定入场点和最高价最低价在时间次序上的关系,从而无法实现在开仓BAR的止损。
因此,必须在记录开仓后最高和最低后,加上Return指令,从而忽略掉后面的止损部分公式。