本帖最后由 tmxk12 于 2017-9-5 13:59 编辑
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
// Graal_2.mq4 (Grail 2).
// 我的第一个“圣杯”文章中使用的范例
// Sergey Kovalyov, Dnepropetrovsk (Ukraine),sk@mail.dnepr.net,ICQ 64015987, http://autograf.dp.ua/
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
extern int TakeProfit=50; // 赢利定单
extern int StopLoss= 10; // 止损定单
extern int Distan = 2; // 距МА线的距离
extern int Cls = 2; // 平仓 ** 赢利点数
extern int period_MA=16; // MA 时间周期
//extern int Time_1 = 0; // 起始时间
//extern int Time_2 = 0; // 终止时间
extern int Prots = 0; // 流动资金百分比
//--------------------------------------------------------------------------------------------
int
Nom_bl, // BuyLimit 定单数
Nom_sl, // SellLimit
total, // 计算标准手术
bl = 0, // 1 = BuyLimit 可用定单
sl = 0, // 1 = SellLimit 可用定单
b = 0, // 1 = Buy 可用定单
s = 0; // 1 = Sell 可用定单
//--------------------------------------------------------------------------------------------
double
OP, // 开盘价 (绝对点数)
SL, // 止损定单 (相对点数)
TP, // 赢利定单 (相对点数)
dist, // 距МА线的距离 (相对点数)
Level, // 允许挂单交易的最短距离
OP_bl, // OpenPrice BuyLimit (绝对点数)
OP_sl, // OpenPrice SellLimit(绝对点数)
cls, // 平仓 ** 赢利 (绝对点数)
MA, // MA 值 (比率)
spred, // 价差 (绝对点数)
Lot; // 计算标准手数
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int init()
{
Level=MarketInfo(Symbol(),MODE_STOPLEVEL); // 检查服务器显示的内容
Level=(Level+1)*Point; // ?:)
SL=StopLoss*Point; // 止损定单(相对点数)
TP=TakeProfit*Point; // 赢利定单(相对点数)
dist=Distan*Point; // 距MA线的距离(相对点数)
cls=Cls*Point; // 平仓 ** 赢利 (绝对点数)
spred=Ask-Bid; // 价差 (绝对点数)
return;
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int start()
{
//============================================================================================
total=OrdersTotal(); // 标准手数计算
bl=0; // 通过开始处归零
sl=0; // 通过开始处归零
b=0; // 通过开始处归零
s=0; // 通过开始处归零
//--------------------------------------------------------------------------------------------
for (int i=total; i>=0; i--) // 全部定单
{
if (OrderSelect(i,SELECT_BY_POS)==true && // 所选定单
OrderSymbol()==Symbol())
{
//--------------------------------------------------------------------------------------------
if (OrderType()==OP_BUY) // 买入定单
{
b =1; // 发现定单
Close_B(OrderTicket(),OrderLots()); // 平单 (由函数决定)
}
//--------------------------------------------------------------------------------------------
if (OrderType()==OP_SELL) // 卖出定单
{
s =1; // 发现定单
Close_S(OrderTicket(),OrderLots()); // 平单 (如果需要)
}
//--------------------------------------------------------------------------------------------
if (OrderType()==OP_BUYLIMIT) // BuyLimit 定单
{
OP_bl=NormalizeDouble(OrderOpenPrice(),Digits);//OpenPrice BuyLimit(绝对点数)
Nom_bl=OrderTicket();
bl=1; // 发现定单
}
//--------------------------------------------------------------------------------------------
if (OrderType()==OP_SELLLIMIT) // SellLimit 定单
{
OP_sl=NormalizeDouble(OrderOpenPrice(),Digits);//OpenPrice SellLimit(绝对点数)
Nom_sl=OrderTicket();
sl=1; // 发现定单
}
//--------------------------------------------------------------------------------------------
}
}
//--------------------------------------------------------------------------------------------
MA = iMA(NULL,0, period_MA, 0,MODE_LWMA, PRICE_TYPICAL, 0);// MA当前值
Modify_order(); // 激活修改
Open_order() ; // 激活打开
//============================================================================================
return;
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
void Close_B(int Nomber, double lots) // 关闭 Buy 定单
{
//============================================================================================
if (NormalizeDouble(Bid-OrderOpenPrice(),Digits)>=cls)// 如果达到预设定赢利
{
OrderClose( Nomber, lots, Bid, 1, Yellow); // 平仓
b = 0; // 没有任何Buy定单
}
//============================================================================================
return;
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
void Close_S(int Nomber, double lots) // 关闭Sell定单
{
//============================================================================================
if (NormalizeDouble(OrderOpenPrice()-Ask,Digits)>=cls)// 如果达到预设定赢利
{
OrderClose( Nomber, lots, Ask, 1, Yellow); // 平仓
s = 0; // 没有任何 Sell定单
}
//============================================================================================
return;
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
void Modify_order() // 定单修改版本
{
//============================================================================================
if (bl==1) // 如果是 BuyLimit
{
OP=MA-dist; // 必须在这里找到
if (MathAbs(OP_bl-OP)>0.5*Point) // 如果这里没有找到
{
OrderModify(Nom_bl,OP,OP-SL,OP+TP,0,DeepSkyBlue);// 定单修改
}
}
//--------------------------------------------------------------------------------------------
if (sl==1) // 如果是SeelLimit
{
OP=MA+spred+dist; // 必须在这里找到
if (MathAbs(OP_sl-OP)>0.5*Point) //如果这里没有找到
{
OrderModify( Nom_sl, OP, OP+SL, OP-TP, 0, Pink);// 定单修改
}
}
//============================================================================================
return;
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
void Open_order() // 打开函数
{
// int Tek_Time=TimeHour(CurTime()); // 时间测试
// if (Tek_Time>Time_2 && Tek_Time>
//============================================================================================
if (b==0 && bl==0) // 没有Buy定单,打开 bl
{
OP=MA-dist; // bl 开单汇率
if(OP>Ask-Level) OP=Ask-Level; // 在相关的变量中精确OP
OP=NormalizeDouble(OP,Digits); // 正常化 (MA给出的第五个小数点 )
OrderSend(Symbol(),OP_BUYLIMIT, Lots(),OP,3,OP-SL,OP+TP,"",0,0,Blue);// Open
bl=1; // 现在有 Buy 定单b1
}
//--------------------------------------------------------------------------------------------
if (s==0 && sl==0) // 没有Sell定单, 打开 sl
{
OP=MA+spred+dist; // sl 开单汇率
if(OP<Bid+Level) OP=Bid+Level; // 在相关的变量中精确OP
OP=NormalizeDouble(OP,Digits); // 正常化(MA 给出的第五个小数点)
OrderSend(Symbol(),OP_SELLLIMIT,Lots(),OP,3,OP+SL,OP-TP,"",0,0,Red);// 打开
sl=1; // 现有Sell定单 sl
}
///============================================================================================
return;
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
double Lots() // 标准手数计算
{
//============================================================================================
Lot=NormalizeDouble(AccountEquity()*Prots/100/1000,1);// 计算标准手总数
double Min_Lot = MarketInfo(Symbol(), MODE_MINLOT); // 最小标准手成交量
if (Lot == 0 ) Lot = Min_Lot; // 剩余最小标准手数
//============================================================================================
return(Lot);
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
这就是花了5个金币的代码,大家看看有用吗????????????????
|