当前位置:首页 > 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
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、为什么通常不使用“移动止赢”概念?
共分享92篇相关文档