加载中…
个人资料
跨越时空的牛
跨越时空的牛
  • 博客等级:
  • 博客积分:0
  • 博客访问:6,250
  • 关注人气:54
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

一套简洁的智能交易EA模板

(2015-09-22 22:04:45)
标签:

杂谈

分类: 外汇知识学习

查看原文:http://www.125808047.com/?p=671
为满足有需求的EA新手检测各种策略的可行性,同时快速上手制作自己的智能交易EA,特整理了下面这套EA模板,可以实现按不同条件组合的策略开仓,可以现价开仓也可以执行挂单。除加码策略外,大部分功能都具备也可以自行按示范拓展。

//+------------------------------------------------------------------+
//|                                                                    2015JXHM.mq4 |
//|                                       Copyright @2015, QQ:125808047 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, QQ:125808047"
#property link      "www.125808047.com"//以上为头部信息。

extern int TakeProfit = 600;//盈利点数
extern int StopLoss = 300;//止损点数
extern int Jcds = 500; //减持点数,比如开仓2手到盈利500点会平仓1.9手或者设置平仓百分比。
extern int Slippage = 30;//滑点,正常设置30点-50点随意
extern int AB = 65;//允许开仓的最大点差,浮动报价意外波动点差会放大。
extern int MagicNo = 999;//订单识别码,随意大于0的整数。
extern double Lots = 0.01;//关闭下面自动计算仓位功能会执行此固定开仓手数。
extern double MinLots = 0.01;//平台最小开仓手数。
extern double MaxLots = 0.5;//限制EA最大交易手数。
extern bool AutoLot = True;//自动按资金计算仓位的开关。False为关闭
extern int AutoLotrk = 100;//自动计算仓位的比例,多少美金下0.01手这里就设置多少。
extern int LimitLeve = 300;//挂单距离
extern   int TMT = 86400;//挂单有效期,按秒计算
extern string Symbol = "GOLD";//交易品种。

void deinit() {
Comment("www.125808047.com");
}//注释,忽略不计

int start() {
HideTestIndicators(true);//禁止闲人复盘显示策略
//------------------------------------定义开平仓指标或所需组合条件----------------------
double cci = iCCI(。。。。。。。。。。。。。。。。。。。。。。。。);
double l_iclose_0 = iClose(。。。。。。。。。。。。。。。。。。。。。);
double l_iopen_0 = iOpen(。。。。。。。。。。。。。。。。。。。;
double cci_1 = iCCI(。。。。。。。。。。。。。。。。。。。。。。。。。);
double cci_2 = iCCI(。。。。。。。。。。。。。。。。。。。。。);
double cci_3 = iCCI(。。。。。。。。。。。。。。。。。。。。。);
double cci_4 = iCCI(。。。。。。。。。。。。。。。。。。。。);
double  MacdCurrent=iMACD(。。。。。。。。。。。。。。。。。。。。。。。。。。。。。);
double  SignalCurrent=iMACD(。。。。。。。。。。。。。。。。。。。。。。。。。。);
//-------------------------------------定义指标或条件结束-------------------------------------------------
//--------------------减持强平设置--------------------------------
for (int li_36 = OrdersTotal() - 1; li_36 >= 0; li_36--){
bool chenggong = OrderSelect(li_36, SELECT_BY_POS, MODE_TRADES);
{
double lot = NormalizeDouble(OrderLots()- MinLots, 2);
if(OrderSymbol() == Symbol() && OrderType()==OP_SELL && OrderMagicNumber() == MagicNo)
if (OrderLots()>=MinLots * 2 && OrderProfit() >= lot*Jcds )
chenggong= OrderClose(OrderTicket(),lot,Ask,3,CLR_NONE);
if(OrderSymbol() == Symbol() && OrderType()==OP_BUY && OrderMagicNumber() == MagicNo)
if (OrderLots()>=MinLots * 2 && OrderProfit() >= lot*Jcds)
chenggong= OrderClose(OrderTicket(),lot,Bid,3,CLR_NONE);
}
}
//--------为订单循环检测移动止损,盈利到达坚持或其它定义点数会执行保护1点--------------------
for (int li_37 = OrdersTotal() - 1; li_37 >= 0; li_37--){
chenggong = OrderSelect(li_37, SELECT_BY_POS, MODE_TRADES);
{
if(OrderType()==OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo)
if(OrderClosePrice()-OrderOpenPrice()>Jcds*Point)
if(OrderStopLoss()+Point<OrderOpenPrice()+1*Point)
{
chenggong=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+1*Point,OrderTakeProfit(),0);
}
if(OrderType()==OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo)
if(OrderOpenPrice()-OrderClosePrice()>Jcds*Point)
if(OrderStopLoss()-Point>OrderOpenPrice()-1*Point)
{
chenggong=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-1*Point,OrderTakeProfit(),0);
}
}
}
//------------------------为订单循环检测移动止损结束--------------------------------
//-------------下面开始比较各种条件组合并执行想对应开仓函数---------------------------
if (!ExistPositions()) {
if (Symbol()==Symbol && MacdCurrent > 0 && SignalCurrent > 0 && MacdCurrent > SignalCurrent && 。。。。。。。。。。。。。。。) {
OpenBuyBuyLimit();//自定义开仓函数下面单独写执行内容.上面条件满足就会执行这个函数开仓交易
return (0);
}
if (Symbol()==Symbol && MacdCurrent > 0 && SignalCurrent > 0 && MacdCurrent < SignalCurrent && 。。。。。。。。。。) {
OpenBuyLimit();//自定义开仓函数下面单独写执行内容.上面条件满足就会执行这个函数开仓交易
return (0);
}
if (Symbol()==Symbol && MacdCurrent < 0 && SignalCurrent < 0 && MacdCurrent < SignalCurrent &&。。。。。。。。。。。。。) {
OpenSellSellLimit();//自定义开仓函数下面单独写执行内容.上面条件满足就会执行这个函数开仓交易
return (0);
}
if (Symbol()==Symbol && MacdCurrent < 0 && SignalCurrent < 0 && MacdCurrent > SignalCurrent && 。。。。。。。。。。。。。) {
OpenSellLimit();//自定义开仓函数下面单独写执行内容.上面条件满足就会执行这个函数开仓交易
return (0);
}
}
//-----上面一共示范四种不同的策略,可以自由添加或删除------------------------------------------
txt();//自定义描述账户盈亏情况的函数,内容下面单独写。
//----------------------------------------------------
if ((MacdCurrent < 0 && SignalCurrent < 0) || 。。。。。。。。。。。。。。。) {
DelBuyLimit();//满足IF里条件删除挂单。或者写成平仓。
}
if ((MacdCurrent > 0 && SignalCurrent > 0) || 。。。。。。。。。。) {
DelSellLimit();//满足IF里条件删除挂单。或者写成平仓。
}
//-------------------------------------------------------------------
return (0);
}
//-------------------------定义交易----------------------------------
bool ExistPositions() {
for (int l_pos_0 = 0; l_pos_0 < OrdersTotal(); l_pos_0++) {
if (OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo) return (TRUE);
}
return (FALSE);
}

//-----------------------------下面是上面用到的各种开仓函数---------------
void OpenBuyBuyLimit() {
。。。。。。。。。。。。。。。。。。。
bool cg = OrderSend(Symbol(), OP_BUY,。。。。。。。。。。。。。。。);
cg = OrderSend(Symbol(), OP_BUYLIMIT, 。。。。。。。。。。。);
}//可以根据需要执行挂单或现价单。

void OpenBuyLimit() {
。。。。。。。。。。。。。。。。。。。。。。
bool cg = OrderSend(Symbol(), OP_BUYLIMIT, 。。。。。。。。。。。。。。。。。);
cg = OrderSend(Symbol(), OP_BUYLIMIT, 。。。。。。。。。。。。。。);
}//按照设定的距离执行挂单

void OpenSellSellLimit() {
。。。。。。。。。。。。。。。。。。。。。。。。
bool cg = OrderSend(Symbol(), OP_SELL,。。。。。。。。。。。。。。。。);
cg = OrderSend(Symbol(), OP_SELLLIMIT, 。。。。。。。。。。。。。。。);
}//执行一个现价单一个挂单

void OpenSellLimit() {
。。。。。。。。。。。。。。。。。。。。。。。。。。。
bool cg = OrderSend(Symbol(), OP_SELLLIMIT, 。。。。。。。。。。。。。。。);
cg = OrderSend(Symbol(), OP_SELLLIMIT,。。。。。。。。。。。。。。。);
}//执行两个挂单

//--------------------删除挂单的函数---------------------------
void DelBuyLimit(){
for (int li_39 = OrdersTotal() - 1; li_39 >= 0; li_39--){
bool chenggong = OrderSelect(li_39, SELECT_BY_POS, MODE_TRADES);
{
if(OrderType()==OP_BUYLIMIT && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo)
chenggong =  OrderDelete(OrderTicket());
}
}
}
//------------------------------
void DelSellLimit(){
for (int li_40 = OrdersTotal() - 1; li_40 >= 0; li_40--){
bool chenggong = OrderSelect(li_40, SELECT_BY_POS, MODE_TRADES);
{
if(OrderType()==OP_SELLLIMIT && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo)
chenggong =  OrderDelete(OrderTicket());
}
}
}
//--------------删除挂单函数结束-----------------------

//---------------描述账户盈亏状态的函数------------------
void txt(){
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
//----------------------描述账户盈亏状态函数结束-------------------------
}
//------------------------定义订单注释函数----------------------------------------------
string GetCommentForOrder() {
return ("QQ125808047");
}
//------------自动按账户资金计算仓位的函数
double GetSizeLot() {
。。。。。。。。。。。。;
}
return (Lots);
}

//----------结束,有需要的朋友直接联系我QQ。其它方面请尽量在MQL4编程或函数模块栏目下查找或借助百度搜索。----------------------------

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有