标签:
杂谈 |
分类: 外汇知识学习 |
查看原文:http://www.125808047.com/?p=671
为满足有需求的EA新手检测各种策略的可行性,同时快速上手制作自己的智能交易EA,特整理了下面这套EA模板,可以实现按不同条件组合的策略开仓,可以现价开仓也可以执行挂单。除加码策略外,大部分功能都具备也可以自行按示范拓展。
//+------------------------------------------------------------------+
//|
//|
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, QQ:125808047"
#property link
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
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
double
//-------------------------------------定义指标或条件结束-------------------------------------------------
//--------------------减持强平设置--------------------------------
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 =
}
}
}
//------------------------------
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 =
}
}
}
//--------------删除挂单函数结束-----------------------
//---------------描述账户盈亏状态的函数------------------
void txt(){
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
//----------------------描述账户盈亏状态函数结束-------------------------
}
//------------------------定义订单注释函数----------------------------------------------
string GetCommentForOrder() {
return ("QQ125808047");
}
//------------自动按账户资金计算仓位的函数
double GetSizeLot() {
。。。。。。。。。。。。;
}
return (Lots);
}
//----------结束,有需要的朋友直接联系我QQ。其它方面请尽量在MQL4编程或函数模块栏目下查找或借助百度搜索。----------------------------