xlbdh2:
请教大家一个mt4的ea编程技术问题,源代码如下:
void c_z17_m1_1k()
{
int i;
string t=Hour();
float c1[8],c2[8],c3[8],c4[8];
string c_k,c_k1[8],c_k2[8],c_k3[8],c_k4[8];
for(int i=0; i<=7; i++)
c1[i]=10000*(Close[i]-Close[i+1]);
c2[i]=10000*(Close[i+1]-Close[i+2]);
c3[i]=10000*(Close[i+2]-Close[i+3]);
c4[i]=10000*(Close[i+3]-Close[i+4]);
c_k=c_k1[i]+c_k2[i]+c_k3[i]+c_k4[i];
k17[8]={-7,-5,-1,0,1,5,7,14};
for(int u=0; u<=7; u++)
if(k17[u]==c_k && t=="17") OrderSend("CADCHF", OP_SELL, 0.01, Bid, 25, Ask+24*Point, Ask-25*Point,0,0,8);
}
void c_z17_m1_2k()
{
int i;
string t=Hour();
float c1[8],c2[8],c3[8],c4[8];
string c_k,c_k1[8],c_k2[8],c_k3[8],c_k4[8];
for(int i=0; i<=7; i++)
c1[i]=10000*(Close[i]-Close[i+1]);
c2[i]=10000*(Close[i+1]-Close[i+2]);
c3[i]=10000*(Close[i+2]-Close[i+3]);
c4[i]=10000*(Close[i+3]-Close[i+4]);
c_k=c_k1[i]+c_k2[i]+c_k3[i]+c_k4[i];
k17[8]={-9,-6,-2,0,2,6,9,13};
for(int u=0; u<=7; u++)
if(k17[u]==c_k && t=="17") OrderSend("CADCHF", OP_SELL, 0.01, Bid, 25, Ask+24*Point, Ask-25*Point,0,0,8);
}
void c_z17_m1_3k()
{
int i;
string t=Hour();
float c1[8],c2[8],c3[8],c4[8];
string c_k,c_k1[8],c_k2[8],c_k3[8],c_k4[8];
for(int i=0; i<=7; i++)
c1[i]=10000*(Close[i]-Close[i+1]);
c2[i]=10000*(Close[i+1]-Close[i+2]);
c3[i]=10000*(Close[i+2]-Close[i+3]);
c4[i]=10000*(Close[i+3]-Close[i+4]);
c_k=c_k1[i]+c_k2[i]+c_k3[i]+c_k4[i];
k17[8]={-11,-7,-3,0,3,7,11,15};
for(int u=0; u<=7; u++)
if(k17[u]==c_k && t=="17") OrderSend("CADCHF", OP_SELL, 0.01, Bid, 25, Ask+24*Point, Ask-25*Point,0,0,8);
}
void c_z17_m1_4k()
{
int i;
string t=Hour();
float c1[8],c2[8],c3[8],c4[8];
string c_k,c_k1[8],c_k2[8],c_k3[8],c_k4[8];
for(int i=0; i<=7; i++)
c1[i]=10000*(Close[i]-Close[i+1]);
c2[i]=10000*(Close[i+1]-Close[i+2]);
c3[i]=10000*(Close[i+2]-Close[i+3]);
c4[i]=10000*(Close[i+3]-Close[i+4]);
c_k=c_k1[i]+c_k2[i]+c_k3[i]+c_k4[i];
k17[8]={-12,-8,-4,0,4,8,12,16};
for(int u=0; u<=7; u++)
if(k17[u]==c_k && t=="17") OrderSend("CADCHF", OP_SELL, 0.01, Bid, 25, Ask+24*Point, Ask-25*Point,0,0,8);
}
void contral_m1_17k()
{
int Magic;
int a=0;
for(int i=OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==TRUE)
if(OrderType()==OP_SELL && OrderMagicNumber()==Magic)
a++;
if(a<2)
c_z17_m1_1k();
if(a<2)
c_z17_m1_2k();
if(a<2)
c_z17_m1_3k();
if(a<2)
c_z17_m1_4k();
else if(a=2)
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
if(int(TimeCurrent()-OrderOpenTime())/60>20)
if(OrderType()==OP_SELL) OrderClose(OrderTicket(),0.01,Bid,25);
}
else OrderClose(OrderTicket(),0.01,Bid,25);
}
代码块c_z17_m1_1k()~c_z17_m1_4k()代表4个做空的策略,代码块contral_m1_17k()是控制这4个做空策略进行交易。
现在希望contral_m1_17k()实现如下功能:
1.当整个空单少于8单,某个策略少于2单,符合做空策略要求且满足设定的Hour(如在4k里,c_k吻合k17[8]设定的8个值中任意一个,同时t=17),则该策略就可 以成交1单,当然只能成交1单.
2.单个策略大于2单,立刻把那个策略的空单平掉(平仓顺序是,先平浮盈,在平不亏不赚)。
3.整个空单大于8单,则把有浮盈的空单立刻平掉。
谢谢各位高手~指导。