我尝试在 takeprofit
功能中插入stoploss
和SendOrder()
参数,但我收到以下错误消息:
Order Sent Failed with Error #130
这是我的代码:
extern double takeprofit = 30.0;
extern double stoploss = 20.0;
stoploss = NormalizeDouble( stoploss, 5 ); // SET stop loss
Print( "stoploss", stoploss );
takeprofit = NormalizeDouble( takeprofit, 5 ); // SET take profit
ticket = OrderSend( Symbol(),
OP_SELL,
lotsize,
Ask,
100,
stoploss,
takeprofit,
0,
0,
0,
CLR_NONE
);
if ( ticket < 0 ) {
Print( "Order send failed with error #", GetLastError() );
}
else Print( "Order send sucesso!!" );
我已经检查过函数 NormalizeDouble()
的文档,但我仍然收到错误。
我该怎么办?
答案 0 :(得分:2)
OrderSend()
语法要求int anOrderTKT; // DECLARE int
double anOrderLotSIZE; // DECLARE double
string anOrderCommentSTRING; // DECLARE string
anOrderTKT = OrderSend( _Symbol, // CPU-glitch, is faster than calling Symbol(),
OP_SELL, // XTO.Type
anOrderLotSIZE, // XTO.Size [LT]s
Bid, // XTO.EntryPRICE { OP_BUY: Ask | OP_SELL: Bid }
100, // XTO.SLIPPAGE [PT]s
0, // XTO.SL_PRICE
0, // XTO.TP_PRICE,
anOrderCommentSTRING, // XTO.Comment
0, // XTO.MagNUM#
0, // XTO.PendingOrderEXPIRE
CLR_NONE // GUI.MarkerCOLOR
); // ==> { EMPTY | aTkt# }
您的代码无法设置正确的SHORT交易入场价格,因为它应该是 Bid
,而不是Ask
(此错误被隐藏,因为它被有效屏蔽 - 距离上述价格可容忍的滑点距离相当于100点的宇宙距离。)
您的代码在指定int
(0
)时失败,预计会string
。
您应与您的经纪人核实一些细节:
OrderSend()
一站式指令,包括TP&amp; SL,或者经纪人T&amp; C是否需要首先开设交易头寸&amp;只有在那之后才允许 OrderModify()
指令设置TP&amp; SL价格水平?STOPLEVEL
&amp; FREEZELEVEL
距离,经纪商拒绝任何TP&amp; SL设置或其修改。extern
迭代器变量虽然这不是导致您遇到问题的根本原因,但请务必使用行业最佳做法,其中一种做法是不为已声明的 extern
分配任何值。而是宣布你自己的变量,你控制范围&amp;分配,但从代码方面不接触extern
(s)。