[ol]//==============================================================================#property copyright "Copyright ?2008, AutoTrader fx-auto-trader@mail.ru"#property link "fx-auto-trader@mail.ru"#include //==============================================================================extern double 手数 = 0.1;extern int 滑点 = 2;extern int Warp = 67;extern double Deviation = 1.85;extern int Amplitude = 155;extern double Distortion = 0.79;extern bool SL_long_EQUAL_SL_short = FALSE;extern double 止损 = 80.0;extern double 小小止损 = 65.0;//extern bool 音响 = TRUE;extern int 魔术号码 = 55555;string EA名称 = "PNN Shell ?2008, FX-Systems Co Ltd";int 时段 = 0;int 计数数目 = 6;double 暂停修改001 = 5.0;double 暂停修改002 = 25.0;//==============================================================================void init() { if (SL_long_EQUAL_SL_short == TRUE) 小小止损 = 止损;}//==============================================================================void deinit() {}//==============================================================================void start() {//============================================================================== int 点差; int 确定订单; int 全部账单; int 账单号码; 检查001(); 检查002();//============================================================================== if (Time[0] != 时段) { 时段 = Time[0]; 点差 = 3;//============================================================================== if (IsTradeAllowed()) { RefreshRates(); 点差 = MarketInfo(Symbol(), MODE_SPREAD); } else { 时段 = Time[1]; return; }//============================================================================== 确定订单 = -1; 全部账单 = OrdersTotal(); for (int 计数002 = 全部账单 - 1; 计数002 >= 0; 计数002--) { OrderSelect(计数002, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == 魔术号码) { 账单号码 = OrderTicket();//=============OP_SELLOP_SELLOP_SELLOP_SELLOP_SELL========================================= if (OrderType() == OP_BUY) { if (Bid = OrderStopLoss() - (2.0 * 小小止损 + 点差) * Point) return; if (指标(Warp, Deviation, Amplitude, Distortion) > 0.0) { 确定订单 = 发送订单(Symbol(), OP_BUY, 手数, Ask, 滑点, Bid - 止损 * Point, 0, EA名称, 魔术号码, 0, Blue); Sleep(30000);//============================================================================== if (确定订单 0.0) { 确定订单 = 发送订单(Symbol(), OP_BUY, 手数, Ask, 滑点, Bid - 止损 * Point, 0, EA名称, 魔术号码, 0, Blue); if (确定订单 10) { Comment("... 青溧眍 耠桫觐?恹耦觐?珥圜屙桢 镳铖赅朦琨忄龛 滑点,", "\n", "... 殃铕疱牝桊箝蝈 黩钺?猁腩 礤 犷脲?10??镥疱玎矬耱栩?耧屦?"); return; }//============================================================================== if (Warp > 100 || Warp 2.0 || Warp 200 || Amplitude 1.0 || Distortion 0) { 货币对价钱 = NormalizeDouble(货币对价钱, 小数点); 止损价钱 = NormalizeDouble(止损价钱, 小数点); 止赢价钱 = NormalizeDouble(止赢价钱, 小数点); }//============================================================================== if (止损价钱 != 0.0) 保险(货币对1, 货币对价钱, 止损价钱); int 错误1 = GetLastError(); 错误1 = 0; bool 启动确定 = FALSE; bool 确定开单 = FALSE; int 账单 = -1;//============================================================================== if (开单种类 == OP_BUYSTOP || 开单种类 == OP_SELLSTOP) { 计数1 = 0; while (!启动确定) { if (IsTradeAllowed()) { 账单 = OrderSend(货币对1, 开单种类, 发送订单手数, 货币对价钱, 滑点002, 止损价钱, 止赢价钱, a_comment_48, 魔术号码002, a_datetime_60, 颜色); 错误1 = GetLastError(); } else 计数1++; switch (错误1) { case 0/* NO_ERROR */: 启动确定 = TRUE; break; case 4/* SERVER_BUSY */: case 6/* NO_CONNECTION */: case 129/* INVALID_PRICE */: case 136/* OFF_QUOTES */: case 137/* BROKER_BUSY */: case 146/* TRADE_CONTEXT_BUSY */: 计数1++; break; case 135/* PRICE_CHANGED */: case 138/* REQUOTE */: RefreshRates(); continue; break; case 130/* INVALID_STOPS */: MODE_STOPLEVEL1 = MarketInfo(货币对1, MODE_STOPLEVEL) * MarketInfo(货币对1, MODE_POINT);//============================================================================== if (开单种类 == OP_BUYSTOP) { if (MathAbs(Ask - 货币对价钱) 计数数目) 启动确定 = TRUE; if (启动确定) { if (错误1 != 0/* NO_ERROR */) Print("发送订单: non-retryable error: " + ErrorDescription(错误1)); if (计数1 > 计数数目) Print("发送订单: retry attempts maxed at " + 计数数目); }//============================================================================== if (!启动确定) { Print("发送订单: retryable error (" + 计数1 + "/" + 计数数目 + "): " + ErrorDescription(错误1)); 暂停修改订单(暂停修改001, 暂停修改002); RefreshRates(); } }//============================================================================== if (错误1 == 0/* NO_ERROR */) { Print("发送订单: apparently successful OP_BUYSTOP or OP_SELLSTOP order placed, details follow."); OrderSelect(账单, SELECT_BY_TICKET, MODE_TRADES); OrderPrint(); return (账单); }//============================================================================== if (!确定开单) { Print("发送订单: failed to execute OP_BUYSTOP/OP_SELLSTOP, after " + 计数1 + " retries"); Print("发送订单: failed trade: " + OrderReliable_CommandString(开单种类) + " " + 货币对1 + "@" + 货币对价钱 + " tp@" + 止赢价钱 + " sl@" + 止损价钱); Print("发送订单: last error: " + ErrorDescription(错误1)); return (-1); } }//============================================================================== if (确定开单) { Print("发送订单: going from limit order to market order because market is too close.");//============================================================================== if (开单种类 == OP_BUYSTOP) { 开单种类 = 0; 货币对价钱 = Ask; } else { if (开单种类 == OP_SELLSTOP) { 开单种类 = 1; 货币对价钱 = Bid; } } }//============================================================================== 错误1 = GetLastError(); 错误1 = 0; 账单 = -1;//============================================================================== if (开单种类 == OP_BUY || 开单种类 == OP_SELL) { 计数1 = 0; while (!启动确定) { if (IsTradeAllowed()) { 账单 = OrderSend(货币对1, 开单种类, 发送订单手数, 货币对价钱, 滑点002, 止损价钱, 止赢价钱, a_comment_48, 魔术号码002, a_datetime_60, 颜色); 错误1 = GetLastError(); } else 计数1++;//============================================================================== switch (错误1) { case 0/* NO_ERROR */: 启动确定 = TRUE; break; case 4/* SERVER_BUSY */: case 6/* NO_CONNECTION */: case 129/* INVALID_PRICE */: case 136/* OFF_QUOTES */: case 137/* BROKER_BUSY */: case 146/* TRADE_CONTEXT_BUSY */: 计数1++; break; case 135/* PRICE_CHANGED */: case 138/* REQUOTE */: RefreshRates(); continue; break; default: 启动确定 = TRUE; }//============================================================================== if (计数1 > 计数数目) 启动确定 = TRUE;//============================================================================== if (!启动确定) { Print("发送订单: retryable error (" + 计数1 + "/" + 计数数目 + "): " + ErrorDescription(错误1)); 暂停修改订单(暂停修改001, 暂停修改002); RefreshRates(); }//============================================================================== if (启动确定) { if (错误1 != 0/* NO_ERROR */) Print("发送订单: non-retryable error: " + ErrorDescription(错误1)); if (计数1 > 计数数目) Print("发送订单: retry attempts maxed at " + 计数数目); } }//============================================================================== if (错误1 == 0/* NO_ERROR */) { Print("发送订单: apparently successful OP_BUY or OP_SELL order placed, details follow."); OrderSelect(账单, SELECT_BY_TICKET, MODE_TRADES); OrderPrint(); return (账单); } Print("发送订单: failed to execute OP_BUY/OP_SELL, after " + 计数1 + " retries"); Print("发送订单: failed trade: " + OrderReliable_CommandString(开单种类) + " " + 货币对1 + "@" + 货币对价钱 + " tp@" + 止赢价钱 + " sl@" + 止损价钱); Print("发送订单: last error: " + ErrorDescription(错误1)); return (-1); } return (0);}//==============================================================================//==============================================================================//==============================================================================//==============================================================================//==============================================================================bool 修改订单(int a_ticket_0, double a_price_4, double a_price_12, double 货币对价钱, int a_datetime_28, color a_color_32 = -1) { string ls_40;//============================================================================== if (!IsConnected()) { Print("修改订单: error: IsConnected() == false"); return (-1); }//============================================================================== if (IsStopped()) { Print("修改订单: error: IsStopped() == true"); return (-1); }//============================================================================== for (int l_count_36 = 0; !IsTradeAllowed() && l_count_36 计数数目) li_56 = TRUE;//============================================================================== if (!li_56) { Print("修改订单: retryable error (" + l_count_36 + "/" + 计数数目 + "): " + ErrorDescription(错误52)); 暂停修改订单(暂停修改001, 暂停修改002); RefreshRates(); }//============================================================================== if (li_56) { if (错误52 != 0/* NO_ERROR */ && 错误52 != 1/* NO_RESULT */) Print("修改订单: non-retryable error: " + ErrorDescription(错误52)); if (l_count_36 > 计数数目) Print("修改订单: retry attempts maxed at " + 计数数目); } }//============================================================================== if (错误52 == 0/* NO_ERROR */) { Print("修改订单: apparently successful modification order, updated trade details follow."); OrderSelect(a_ticket_0, SELECT_BY_TICKET, MODE_TRADES); OrderPrint(); return (TRUE); }//============================================================================== if (错误52 == 1/* NO_RESULT */) { Print("修改订单: Server reported modify order did not actually change parameters."); Print("修改订单: redundant modification: " + a_ticket_0 + " " + ls_40 + "@" + a_price_4 + " tp@" + 货币对价钱 + " sl@" + a_price_12); Print("修改订单: Suggest modifying code logic"); } Print("修改订单: failed to execute modify after " + l_count_36 + " retries"); Print("修改订单: failed modification: " + a_ticket_0 + " " + ls_40 + "@" + a_price_4 + " tp@" + 货币对价钱 + " sl@" + a_price_12); Print("修改订单: last error: " + ErrorDescription(错误52)); return (FALSE);}//==============================================================================//==============================================================================//==============================================================================//==============================================================================//==============================================================================//==============================================================================//==============================================================================void 保险(string 货币对1, double ad_8, double &指标资料4) { //ad_16==指标资料4?? double ld_24;//============================================================================== if (指标资料4 != 0.0) { ld_24 = MarketInfo(货币对1, MODE_STOPLEVEL) * MarketInfo(货币对1, MODE_POINT); if (MathAbs(ad_8 - 指标资料4) 指标资料4) 指标资料4 = ad_8 - ld_24; else { if (ad_8 0.0) { li_24 = MathRound(ad_8 / 0.1); ld_28 = 1.0 - 1.0 / ld_16; Sleep(1000);//============================================================================== for (int l_count_36 = 0; l_count_36 32768.0 * ld_28) break; Sleep(1000); } } }}//==============================================================================//==============================================================================//end 柒侠伍义//只有一个指标 iAC//手数0.1=USD1.00//没有限制比赛的最大手数5注码 ?有问题?[/ol]复制代码 |