EA11-特别的网格交易

include //
extern double 网格步幅= 25; // 格幅
extern double 网格长度= 60; // 网格总长度
double 关键价, // 以下定义参数变量:网格关键价,,,,,,
倍数, // 倍数
i, // 下单价格
手数= 0.01, // 手数
市场止损线, // 市场止损线
止赢, // 赢利目标
止损; // 止损
int 魔术号, // 定义一些整型变量:魔术号,,,,(自定义?)小数位,
j, // 循环递增值
买单数, // 买单统计
卖单数, // 卖单统计
小数位, // 小数位
单编号; // 发单编号
string Text="Grid"; // 文本字符串(未用)
// +-------------------------初始化------------------------------+
int init() // (为何参数赋值内容写在初始化部分)
{
if (小数位==4) 小数位=2; // 如果小数位等于4位,则改为2位
else 小数位=0; // 否则小数位为0
魔术号 =20100513; // 魔术号 网格步幅 =网格步幅*Point; // 网格步幅*市场点 网格长度 =网格长度*Point; // 网格长度*市场点 市场止损线 =MarketInfo(Symbol(),MODE_STOPLEVEL)*Point; // 市场规定的止损价*市场点 return(0); //
}
// +------------------------------------------------------------------+
int start()
{
倍数 =NormalizeDouble((Bid -NormalizeDouble(Bid,小数位))/网格步幅, 0); // (Print 检查这地方出值为0 ) // ★★ 倍数:(注意正负值)
关键价 =NormalizeDouble(Bid,小数位) +网格步幅*倍数; // 待再理解 // ★★ 轴心价:叫买价+格幅乘以倍数
//下网格布网 for(i=关键价; i>=关键价-网格长度; i=i-网格步幅) // 将i赋为轴心,如果大于轴心-格长度,做如下循环,递减值为i-格幅 { // 买单数 =0; // 买计数初赋为 0 卖单数 =0; // 卖计数初赋为 0 for(j=0; j<OrdersTotal(); j++) // 按单总数递增循环 { // if(OrderSelect(j,SELECT_BY_POS)==false) return(0); // 按顺序选择订单失败 返回 // if(OrderMagicNumber()==魔术号 && NormalizeDouble(OrderOpenPrice(),小数位)==NormalizeDouble(i,小数位) ) // 魔术号一致 且 开仓价精确化值=i值 { // if(OrderType()==OP_BUY || OrderType()==OP_BUYLIMIT ) 买单数++; // 如果单类型为已成交买单或限价挂单, 则将多单数加1 if(OrderType()==OP_SELL || OrderType()==OP_SELLSTOP ) 卖单数++; // 如果单类型为已成交买单或限价挂单, 则将空单数加1 } } if(买单数==0) // 买统计等于0时 { // 止赢 =i+网格步幅; // 止赢为i+格幅 止损 =0; // 止损不设 if(Ask-i>=市场止损线) // 叫卖价-i如果大于等于市场规定止损线 { // 单编号 =OrderSend(Symbol(), OP_BUYLIMIT, //限价买 手数, i, 0, 止损, 止赢, "网格- BuyLimit", 魔术号, 0, Red); // 发送限价买订单 价格为i if (单编号>0) Alert(Symbol()," ",单编号,"网格-BuyLimit=",i," 开仓成功"); // 如果成功,报警通知 else Alert( Symbol(),"网格- BuyLimit=",i," 开仓未成:",ErrorDescription(GetLastError())); // 否则也报警通知 Sleep(10000); // 休息10秒 } // if(Ask==i) // 如果叫卖价等于i { // 单编号=OrderSend(Symbol(), OP_BUY, //直接买 手数, i, 0, 止损, 止赢, "网格- Buy", 魔术号, 0, Magenta); // 发送现价买订单 if (单编号>0) Alert(Symbol()," ",单编号,"网格-Buy=",i," 开仓成功"); // 如果成功 报警 else Alert( Symbol(),"网格- Buy=",i," 开仓未成:",ErrorDescription(GetLastError())); // 否则也报警 Sleep(10000); // 休息10秒 } } if(卖单数==0) // 如果卖统计等于0 { // 止赢=i-网格步幅; // 止赢为 i-格幅 止损=0; // 止损为0 if(Bid-i>=市场止损线) // 叫买价-i >=市场规定止损线 { // 单编号=OrderSend(Symbol(), OP_SELLSTOP, //突破价卖 手数, i, 0, 止损, 止赢, "网格- SellStop", 魔术号, 0, Blue); // if (单编号>0) Alert(Symbol()," ",单编号,"网格- SellStop=",i," 开仓成功"); // else Alert( Symbol(),"网格- SellStop=",i," 开仓未成:",ErrorDescription(GetLastError())); // Sleep(10000); // } // if(Bid==i) // { // 单编号=OrderSend(Symbol(), OP_SELL, //直接卖 手数, i, 0, 止损, 止赢, "网格- Sell", 魔术号, 0, Cyan); // if (单编号>0) Alert(Symbol()," ",单编号,"网格-BuyLimit=",i," 开仓成功"); // else Alert( Symbol(),"网格- BuyLimit=",i," 开仓未成:",ErrorDescription(GetLastError())); // Sleep(10000); // } } }
//上网格布网
for(i=关键价+网格步幅; i<=关键价+网格长度; i=i+网格步幅) // 初轴心价+格幅, 如果小于轴心价+格幅长度,按轴心价再加一次格幅 运算如下部分
{ //
买单数 =0; // 将买统计赋为0
卖单数 =0; // 将卖统计赋为0
for(j=0; j<OrdersTotal(); j++) // 循环查找订单数
{ // 选择失败则返回
if(OrderSelect(j,SELECT_BY_POS)==false) return(0); // 如果魔术号相符 且按点精确后开仓价等于按点精确化的轴心加格幅
if(OrderMagicNumber()==魔术号 && NormalizeDouble(OrderOpenPrice(),小数位)==NormalizeDouble(i,小数位) ) //
{ // 如果订单类型为买或突破买,则将买统计加1
if(OrderType()==OP_BUY || OrderType()==OP_BUYSTOP) 买单数++; // 如果订单类型为卖或突破卖,则将卖统计加1
if(OrderType()==OP_SELL || OrderType()==OP_SELLLIMIT) 卖单数++; //
}
}
if(买单数==0) // 如果买统计为0 { // 止赢=i+网格步幅; // 止损=0; // if(i-Ask>=市场止损线) // 如果i-叫卖价>=市场规定的止损线 { 单编号=OrderSend(Symbol(), // 发送订单 OP_BUYSTOP, //突破买 // 类: 手数, // 手: i, // 价: 0, // 滑: 止损, // 损: 止赢, // 赢: "网格+ BuyStop", // 评: 魔术号, // 码: 0, // 效: Red); // 色: if (单编号>0) Alert(Symbol()," ",单编号,"网格+ BuyStop=",i," 开仓成功"); // 如果发送成功,则报警通知 else Alert( Symbol(),"网格+ BuyStop=",i," 开仓未成:",ErrorDescription(GetLastError())); // 否则也报警说明原因 Sleep(10000); // 休息10秒 } // if(i==Ask) // 如果i=叫卖价 { // 单编号 =OrderSend(Symbol(), // OP_BUY, //直接买 // 手数, // i, // 0, // 止损, // // 止赢, // "网格+ Buy", // 魔术号, // 0, // Magenta); // if(单编号>0) Alert(Symbol()," ",单编号,"网格+Buy=",i," 开仓成功"); // else Alert( Symbol(),"网格+ Buy=",i," 开仓未成:",ErrorDescription(GetLastError())); // Sleep(10000); // } } if(卖单数==0) // 当卖统计等于0 { // 则将止赢目标定为 止赢=i-网格步幅; // 将止损赋为0 止损=0; // if(i-Bid>=市场止损线) // 如果下单的价格大于市场夫定的止损价 { // 单编号 =OrderSend(Symbol(), // 发送限价卖订单 OP_SELLLIMIT, //限价卖 手数, i, 0, 止损, 止赢, "网格+ SellLimit", 魔术号, 0, Blue); if (单编号>0) Alert(Symbol()," ",单编号,"网格+ SellLimit=",i," 开仓成功"); // else Alert( Symbol(),"网格+ SellLimit=",i," 开仓未成:",ErrorDescription(GetLastError())); // Sleep(10000); // 休息10秒 } // if(i==Bid) // 如果下单价格等于叫买价 { // 单编号 =OrderSend(Symbol(), // 下现价卖出单 OP_SELL, //直接卖 手数, i, 0, 止损, 止赢, "网格+ Sell", 魔术号, 0, Cyan); if(单编号>0) Alert(Symbol()," ",单编号,"网格+ Sell=",i," 开仓成功"); // else Alert( Symbol(),"网格+ Sell=",i," 开仓未成:",ErrorDescription(GetLastError())); // Sleep(10000); // 休息10秒 } } }
//--主循环结束
return(0); //
}
//--------------------------------------------------------------------+