EA编程实训课程 - 图文

发布时间 : 星期日 文章EA编程实训课程 - 图文更新完毕开始阅读

MA26时,发出买入信号;当MA13下穿MA26时,发出卖出信号。 另写EA,分别执行挂单交易的四种模式。

3.3参考资料:

教材中默认指标的章节、调用自定义指标(iCustom)的使用方法。

编写“交叉”自定义函数,输入参数为快速线当前价、快速线前1K线价、慢速线当前价、慢速线前1K线价,输出参数为无信号“N/A”,上穿信号“Upcross”,下穿信号“Downcross”。 iDrawSign 是一个用于标注符号和画线的自定义函数,在编程中经常用于显示交易信号 /*

画线函数(类型,K线,价格,颜色,编码)

iDrawSign(string myTapy,int myBarPos,doubl myPrice,color myColor,int mySymbol)

参数说明:

类型:string myTapy (点画线-Dot、水平线-Hline、垂直线-VLine) K线:int myBarPos 价格:doubl myPrice 颜色:color myColor

编码:int mySymbol,108代表圆点

函数返回:在指定的K线和价格位置画出:符号、水平线或垂直线 */

Void iDawSign(string myTapy,int myBarPos,doubl myPrice,color myColor,int mySymbol) {

If(myType=”Dot”) {

ObjectCreate(myType+TimeToStr(Time[myBarPos]),OBJ_ARROW,0,Time[myBarPos],myPrice); ObjectSet(myType+TimeToStr(Time[myBarPos]),OBJPROP_COLOR,myCOLOR);

ObjectSet(myType+TimeToStr(Time[myBarPos]),OBJPROP_ARROWCODE,mySymbol);

}

If(myType=”HLine”) {

ObjectCreate(myType+TimeToStr(Time[myBarPos]),OBJ_HLine,0,Time[myBarPos],myPrice); ObjectSet(myType+TimeToStr(Time[myBarPos]),OBJPROP_COLOR,myCOLOR);

}

If(myType=”VLine”) {

ObjectCreate(myType+TimeToStr(Time[myBarPos]),OBJ_VLine,0,Time[myBarPos],myPrice); ObjectSet(myType+TimeToStr(Time[myBarPos]),OBJPROP_COLOR,myCOLOR); } }

iCrossSignal是一个返回两线交叉信号的自定义函数,在程序中判断指标快慢上穿(金叉)、下穿(死叉)的状况。

/*

交叉函数(当前快线值,当前慢线值,前次快线值,前次慢线值):

String iCrossSignal(double myFast0,doubl mySlow0,doubl myFast1,doubl mySlow1)

参数说明:

当前快线值:doubl myFast0

当前慢线值:doubl mySlow0 前次快线值:doubl myFast1 前次线慢线值:doubl mySlow1

函数返回:金叉-UpCross、死叉-DownCross、无穿越-N/A

String iCrossSignal(double myFast0,doubl mySlow0,doubl myFast1,doubl mySlow1) {

String myCrosssignal=”N/A”;

If(myFast0>mySlow0 && myFsat1<=mySlow1) String myCrossSignal=”UpCross”; //金叉 If(myFast0=mySlow1) String myCrossSignal=”DownCross”; //死叉 Return(string myCross); } */

3.4思考题:

1、为什么通常会建议开仓时不做止损、止赢设置,而要等到开仓后通过修改订单的方式来设置?

2、挂单有4种模式:BuyLimt、BuyStop、SellLimt、SellStop,详细解释这些模式的应用条件,重点说明停止水平(StopLevel)规则

3、详细阅读教材关于默认指标的章节,了解各项常用指标的调用语句 4、详细阅读教材关于自定义指标命令(iCustom)的使用方法 5、用自定义函数标注“*”号

6、找到帮助文件中特殊字符集部分,复制粘贴特殊字符与列表。

第四课 移动止损

4.1课程目标

移动止损(TrallingLoss)是在持仓单盈利时实施一种保护利润的方法。

移动止损一般用“点数”表达,当前订单盈利,且价格区间大于等于移动止损点时,修改订单的止损价位,之后再与持仓单的止损价位比较价格区间,超过移动止损1次就修改价位1次。

通常不使用“移动止盈”概念。 掌握持仓单操作方法 4.2实训内容

在上一章程序的基础上完成以下任务。

用OrderSelect命令选中持仓单,在图表中显示持仓单单号、类型、开仓量、开仓价、止损价、止盈价。

预设移动止损(TrallingLoss)参数为40,编制移动止损自定义函数,在程序中调用。 4.3参考资料

ITrallingLoss是一个实现移动止损的自定义函数,输入参数为目标订单号和移动止损点数。这是一个常用的自定义函数。 /*

函数:移动止损

输入参数:int myTicket目标订单号

Int myTrallingLoss移动止损点数 输出参数:1-订单选择出错

2-亏损订单

3-未达到移动止损价位 0-修改成功 算法说明: */

Void iTrallingLoss(int myTicket,int myTrallingLoss) {

If(!OrderSelect(myTicket,SELECT_BY_TICKET,MODE_TRADES)) Return(1);//选定单出错

If(OrderProfit()<0) return(2);//亏损订单不修改

Double myBasePrice;//定义基本价变量 If(OrderStopLoss()==0)//如果没有止损价 MyBasePrice=OrderOpenPrice(); Else

MyBasePrice=OrderStopLoss();//有止损价 Double myTLPrice;//定义止损价变量

If(OrderType()==OP_BUY)//买入订单移动止损 {

MyTLPrice=Bide-myTrallingLoss*Point;//计算移动止损价 If(myBasePrice<=myTLPrice)

OrderModify(myTicket,OrderOpenPrice(),myTLPrice,OrderTakeProfit(),0);//修改移动止损价

Return(0); }

If(OrderType()==OP_SELL)//卖出订单移动止损

{

MyTLPrice=Ask+myTrallingLoss*Point;//计算移动止损价 If(myBasePrice>=myTLPrice)

OrderModify(myTicket,OrderOpenPrice(),myTLPrice,OrderTakeProfit(),0);//修改移动止损价

Return(0); }

Return(3); }

4.4思考题

1、哪些订单操作命令在使用前需要用OrderSelect命令?为什么?

2、OrderSelect命令中参数SELECT_BY_POS和SELECT_BY_TICKET有什么区别? 3、为什么通常不使用“移动止赢”概念?

联系合同范文客服:xxxxx#qq.com(#替换为@)