#property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict extern double 亏损比=0.3; extern int 赔率=3; extern int 分型停顿参数=7; int 顶分型停顿顶点位置; int 底分型停顿顶点位置; int magic=2126767; int sip=5; int OnInit() { return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { } void OnTick() { double jingzhi=AccountEquity(); if(底分型停顿()==true&&buyzongdanshu()==0) { double danliang=jingzhi*亏损比/1000/(Low[底分型停顿顶点位置]-Close[1]); double zhiying=Close[1]+赔率*(Close[1]-Low[底分型停顿顶点位置]); double zhisun=Open[1]; int tacket1=OrderSend(Symbol(), OP_BUY, danliang, Ask, sip,zhisun, zhiying, "buy", magic, 0, Red); } if(顶分型停顿()==true&&sellzongdanshu()==0) { double danliang=jingzhi*亏损比/1000/(High[顶分型停顿顶点位置]-Close[1]); double zhiying=Close[1]-赔率*(High[顶分型停顿顶点位置]-Close[1]); double zhisun=Open[1]; int tacket2=OrderSend(Symbol(), OP_SELL, danliang, Bid, sip,zhisun, zhiying, "sell", magic, 0, Blue); } } //+------------------------------------------------------------------+ //分型停顿信号判断 | //+------------------------------------------------------------------+ bool 顶分型停顿() { bool 出现顶分型停顿=false; for(int i=3;i<分型停顿参数;i++) { if(Close[1]>Open[1] && Low[i]<Low[i-1] && High[i]>High[iHighest(Symbol(),0,MODE_HIGH,i-3,2)] && High[i]<High[iHighest(Symbol(),0,MODE_HIGH,1,i+1)] && Low[i]<=Low[iLowest(Symbol(),0,MODE_LOW,1,i+1)]) 出现顶分型停顿=true; 顶分型停顿顶点位置=i; break; } return(出现顶分型停顿); } bool 底分型停顿( ) { bool 出现底分型停顿=false; for(int i=3;i<分型停顿参数;i++) { if(Close[1]<Open[1] && High[i]>High[i-1] && Low[i]>Low[iLowest(Symbol(),0,MODE_LOW,i-3,2)] && High[i]>=High[iHighest(Symbol(),0,MODE_HIGH,1,i+1)] && Low[i]>Low[iLowest(Symbol(),0,MODE_LOW,1,i+1)]) 出现底分型停顿=true; 底分型停顿顶点位置=i; break; } return(出现底分型停顿); } //+------------------------------------------------------------------+ //当前持仓判断 | //+------------------------------------------------------------------+ int buyzongdanshu()//当前货币对EA自动买单总单数 { int a=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if( OrderSymbol()==Symbol() ) { if( OrderType()==OP_BUY && OrderMagicNumber()==magic)// && OrderComment()=="buy" { a=a+1; } } } } return(a); } int sellzongdanshu()//当前货币对EA自动卖单总单数 { int a=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if( OrderSymbol()==Symbol() ) { if( OrderType()==OP_SELL&&OrderMagicNumber()==magic )// && OrderComment()=="sell" { a=a+1; } } } } return(a); }
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
double jingzhi=AccountEquity();
if(底分型停顿()==true&&buyzongdanshu()==0)
{
double danliang=jingzhi*亏损比/1000/(Low[底分型停顿顶点位置]-Close[1]);
double zhiying=Close[1]+赔率*(Close[1]-Low[底分型停顿顶点位置]);
double zhisun=Open[1];
int tacket1=OrderSend(Symbol(), OP_BUY, danliang, Ask, sip,zhisun, zhiying, "buy", magic, 0, Red);
}
if(顶分型停顿()==true&&sellzongdanshu()==0)
{
double danliang=jingzhi*亏损比/1000/(High[顶分型停顿顶点位置]-Close[1]);
double zhiying=Close[1]-赔率*(High[顶分型停顿顶点位置]-Close[1]);
double zhisun=Open[1];
int tacket2=OrderSend(Symbol(), OP_SELL, danliang, Bid, sip,zhisun, zhiying, "sell", magic, 0, Blue);
}
}
//+------------------------------------------------------------------+
//分型停顿信号判断 |
//+------------------------------------------------------------------+
bool 顶分型停顿()
{
bool 出现顶分型停顿=false;
for(int i=3;i<分型停顿参数;i++)
{
if(Close[1]>Open[1] && Low[i]<Low[i-1] && High[i]>High[iHighest(Symbol(),0,MODE_HIGH,i-3,2)] && High[i]<High[iHighest(Symbol(),0,MODE_HIGH,1,i+1)] && Low[i]<=Low[iLowest(Symbol(),0,MODE_LOW,1,i+1)])
出现顶分型停顿=true;
顶分型停顿顶点位置=i;
break;
}
return(出现顶分型停顿);
}
bool 底分型停顿( )
{
bool 出现底分型停顿=false;
for(int i=3;i<分型停顿参数;i++)
{
if(Close[1]<Open[1] && High[i]>High[i-1] && Low[i]>Low[iLowest(Symbol(),0,MODE_LOW,i-3,2)] && High[i]>=High[iHighest(Symbol(),0,MODE_HIGH,1,i+1)] && Low[i]>Low[iLowest(Symbol(),0,MODE_LOW,1,i+1)])
出现底分型停顿=true;
底分型停顿顶点位置=i;
break;
}
return(出现底分型停顿);
}
//+------------------------------------------------------------------+
//当前持仓判断 |
//+------------------------------------------------------------------+
int buyzongdanshu()//当前货币对EA自动买单总单数
{
int a=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if( OrderSymbol()==Symbol() )
{
if( OrderType()==OP_BUY && OrderMagicNumber()==magic)// && OrderComment()=="buy"
{ a=a+1; }
}
}
}
return(a);
}
int sellzongdanshu()//当前货币对EA自动卖单总单数
{
int a=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if( OrderSymbol()==Symbol() )
{
if( OrderType()==OP_SELL&&OrderMagicNumber()==magic )// && OrderComment()=="sell"
{ a=a+1; }
}
}
}
return(a);
}
A的范围 3<=A<=最大值 “最大值”设为外部参数
以上是策略思路,下面是源码
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern double 亏损比=0.3;
extern int 赔率=3;
extern int 分型停顿参数=7;
int 顶分型停顿顶点位置;
int 底分型停顿顶点位置;
int magic=2126767;
int sip=5;
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
double jingzhi=AccountEquity();
if(底分型停顿()==true&&buyzongdanshu()==0)
{
double danliang=jingzhi*亏损比/1000/(Low[底分型停顿顶点位置]-Close[1]);
double zhiying=Close[1]+赔率*(Close[1]-Low[底分型停顿顶点位置]);
double zhisun=Open[1];
int tacket1=OrderSend(Symbol(), OP_BUY, danliang, Ask, sip,zhisun, zhiying, "buy", magic, 0, Red);
}
if(顶分型停顿()==true&&sellzongdanshu()==0)
{
double danliang=jingzhi*亏损比/1000/(High[顶分型停顿顶点位置]-Close[1]);
double zhiying=Close[1]-赔率*(High[顶分型停顿顶点位置]-Close[1]);
double zhisun=Open[1];
int tacket2=OrderSend(Symbol(), OP_SELL, danliang, Bid, sip,zhisun, zhiying, "sell", magic, 0, Blue);
}
}
//+------------------------------------------------------------------+
//分型停顿信号判断 |
//+------------------------------------------------------------------+
bool 顶分型停顿()
{
bool 出现顶分型停顿=false;
for(int i=3;i<分型停顿参数;i++)
{
if(Close[1]>Open[1] && Low[i]<Low[i-1] && High[i]>High[iHighest(Symbol(),0,MODE_HIGH,i-3,2)] && High[i]<High[iHighest(Symbol(),0,MODE_HIGH,1,i+1)] && Low[i]<=Low[iLowest(Symbol(),0,MODE_LOW,1,i+1)])
出现顶分型停顿=true;
顶分型停顿顶点位置=i;
break;
}
return(出现顶分型停顿);
}
bool 底分型停顿( )
{
bool 出现底分型停顿=false;
for(int i=3;i<分型停顿参数;i++)
{
if(Close[1]<Open[1] && High[i]>High[i-1] && Low[i]>Low[iLowest(Symbol(),0,MODE_LOW,i-3,2)] && High[i]>=High[iHighest(Symbol(),0,MODE_HIGH,1,i+1)] && Low[i]>Low[iLowest(Symbol(),0,MODE_LOW,1,i+1)])
出现底分型停顿=true;
底分型停顿顶点位置=i;
break;
}
return(出现底分型停顿);
}
//+------------------------------------------------------------------+
//当前持仓判断 |
//+------------------------------------------------------------------+
int buyzongdanshu()//当前货币对EA自动买单总单数
{
int a=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if( OrderSymbol()==Symbol() )
{
if( OrderType()==OP_BUY && OrderMagicNumber()==magic)// && OrderComment()=="buy"
{ a=a+1; }
}
}
}
return(a);
}
int sellzongdanshu()//当前货币对EA自动卖单总单数
{
int a=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if( OrderSymbol()==Symbol() )
{
if( OrderType()==OP_SELL&&OrderMagicNumber()==magic )// && OrderComment()=="sell"
{ a=a+1; }
}
}
}
return(a);
}
A的范围 3<=A<=最大值 “最大值”设为外部参数
以上是策略思路,下面是源码
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern double 亏损比=0.3;
extern int 赔率=3;
extern int 分型停顿参数=7;
int 顶分型停顿顶点位置;
int 底分型停顿顶点位置;
int magic=2126767;
int sip=5;
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
double jingzhi=AccountEquity();
if(底分型停顿()==true&&buyzongdanshu()==0)
{
double danliang=jingzhi*亏损比/1000/(Low[底分型停顿顶点位置]-Close[1]);
double zhiying=Close[1]+赔率*(Close[1]-Low[底分型停顿顶点位置]);
double zhisun=Open[1];
int tacket1=OrderSend(Symbol(), OP_BUY, danliang, Ask, sip,zhisun, zhiying, "buy", magic, 0, Red);
}
if(顶分型停顿()==true&&sellzongdanshu()==0)
{
double danliang=jingzhi*亏损比/1000/(High[顶分型停顿顶点位置]-Close[1]);
double zhiying=Close[1]-赔率*(High[顶分型停顿顶点位置]-Close[1]);
double zhisun=Open[1];
int tacket2=OrderSend(Symbol(), OP_SELL, danliang, Bid, sip,zhisun, zhiying, "sell", magic, 0, Blue);
}
}
//+------------------------------------------------------------------+
//分型停顿信号判断 |
//+------------------------------------------------------------------+
bool 顶分型停顿()
{
bool 出现顶分型停顿=false;
for(int i=3;i<分型停顿参数;i++)
{
if(Close[1]>Open[1] && Low[i]<Low[i-1] && High[i]>High[iHighest(Symbol(),0,MODE_HIGH,i-3,2)] && High[i]<High[iHighest(Symbol(),0,MODE_HIGH,1,i+1)] && Low[i]<=Low[iLowest(Symbol(),0,MODE_LOW,1,i+1)])
出现顶分型停顿=true;
顶分型停顿顶点位置=i;
break;
}
return(出现顶分型停顿);
}
bool 底分型停顿( )
{
bool 出现底分型停顿=false;
for(int i=3;i<分型停顿参数;i++)
{
if(Close[1]<Open[1] && High[i]>High[i-1] && Low[i]>Low[iLowest(Symbol(),0,MODE_LOW,i-3,2)] && High[i]>=High[iHighest(Symbol(),0,MODE_HIGH,1,i+1)] && Low[i]>Low[iLowest(Symbol(),0,MODE_LOW,1,i+1)])
出现底分型停顿=true;
底分型停顿顶点位置=i;
break;
}
return(出现底分型停顿);
}
//+------------------------------------------------------------------+
//当前持仓判断 |
//+------------------------------------------------------------------+
int buyzongdanshu()//当前货币对EA自动买单总单数
{
int a=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if( OrderSymbol()==Symbol() )
{
if( OrderType()==OP_BUY && OrderMagicNumber()==magic)// && OrderComment()=="buy"
{ a=a+1; }
}
}
}
return(a);
}
int sellzongdanshu()//当前货币对EA自动卖单总单数
{
int a=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if( OrderSymbol()==Symbol() )
{
if( OrderType()==OP_SELL&&OrderMagicNumber()==magic )// && OrderComment()=="sell"
{ a=a+1; }
}
}
}
return(a);
}