voidOnStart()
{MqlTradeRequest request={0};
MqlTradeResult result={0};
doubleBid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
doubleAsk=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
double p=NormalizeDouble(ChartPriceOnDropped(),digits);
if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
{p=MathRound(ChartPriceOnDropped()*0.1)/0.1;
}
int V=75;
if (p<Ask)
{
request.action =TRADE_ACTION_PENDING; // тип торговой операции
request.symbol =Symbol(); // символ
request.volume =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)));
if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL))
{ request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
}
request.type =ORDER_TYPE_BUY_LIMIT; // тип ордера
request.price =NormalizeDouble(Ask-SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits); // цена для открытия
request.deviation=50; // допустимое отклонение от цены
request.sl =p; // Stop Loss позиции
request.tp =NormalizeDouble(Ask+(Ask-p)*3,digits); // Take Profit позиции
request.type_filling=ORDER_FILLING_IOC;
request.type_time=ORDER_TIME_DAY;
request.stoplimit=Ask;
OrderSend(request,result);
}
if (p>Bid)
{
request.action =TRADE_ACTION_PENDING; // тип торговой операции
request.symbol =Symbol(); // символ
request.volume =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((p-Bid)/
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)));
if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL))
{ request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
} // объем
request.type =ORDER_TYPE_SELL_LIMIT; // тип ордера
request.price =NormalizeDouble(Bid+SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits); // цена для открытия
request.deviation=50; // допустимое отклонение от цены
request.sl =p; // Stop Loss позиции
request.tp =NormalizeDouble(Bid-(p-Bid)*3,digits); // Take Profit позиции
request.type_time=ORDER_TIME_DAY;
request.type_filling=ORDER_FILLING_IOC;
request.stoplimit=Bid;
OrderSend(request,result);
}
Alert(result.retcode);
return;
}
在代码的末尾也有Alert(result.retcode)。
在一般日志中。
2018.05.14 12:08:16.984 脚本 脚本LIMIT(Si-6.18,M15)加载成功
2018.05.14 12:08:17.187 交易 '992940': buy limit 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905
2018.05.14 12:08:17.484 交易 '992940': 接受买入限制 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905
2018.05.14 12:08:17.500 交易 '992940': buy limit 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905 placed for execution
2018.05.14 12:08:17.546 交易 '992940': 订单#13235300买入限价3.00 / 3.00 Si-6.18 at 62091 在337.532 ms内完成。
2018.05.14 12:08:17.578 脚本 脚本LIMIT(Si-6.18,M15)被删除。
在专家栏中:2018.05.14 12:08:17.578 LIMIT (Si-6.18,M15) 警报:10009,无其他内容。
那么这里是如何帮助你的?首先,你写道,"销售限额 "没有得到展示,你给出了日志的摘录。而现在我们说的是买入限价单。因此,问题必须是浮动的。此外,你从未引用过该声明。你声称该命令在现实中是看不到的。而该声明可能有助于澄清情况。
我怎样才能帮助你?首先,你写道,"卖出限制 "没有被放置,并且你给出了日志的摘录。现在我们讨论的是买入限价单。因此,问题必须是浮动的。此外,你从未引用过该声明。你声称该命令在现实中是看不到的。该声明可能有助于你澄清情况。
卖出限额和买入限额都没有设置, Alert(result.retcode)返回10009。我在哪里可以得到这个 "声明",我需要做什么?
在我自己身上运行这个代码。请注意,在非二进制符号上你会得到一个0的除法误差,因为那里没有初始化的余量。
在我设法运行它的代码中,我不得不添加一个体积检查。否则,体积等于零。
之后,订单就成功设定了。还要注意的是,它的触发速度相当快--它与价格接近。因此,订单本身可能不会被你注意到。如果账户类型是净额结算,它将被转换为头寸或附加到头寸上。
卖出限额和买入限额都没有设置, Alert(result.retcode)返回10009。我在哪里可以得到这个 "转码",我应该怎么做?
工具箱 "窗口的 "历史 "标签。在上下文菜单中选择"订单"。然后从上下文菜单中选择 "报告"-"HTML"。但你可能会自己看到订单丢失的原因:其状态将被标记为 "已完成"。
找到了我的2009年脚本,但现在编译时出现了警告:'M' - 未识别的字符转义序列 1.mq4 66 37
你能告诉我在这一行中要怎么调整才能正确编译吗?
在我自己身上运行这个代码。请注意,在非二进制符号上你会得到一个0的除法误差,因为那里没有初始化的余量。
在我设法运行它的代码中,我不得不添加一个体积检查。否则,体积等于零。
之后,订单就成功设定了。还要注意的是,它的触发速度相当快--它与价格接近。因此,订单本身可能不会被你注意到。如果账户类型是净额结算,它将被转换为头寸或附加到头寸上。
找到了我的2009年脚本,但现在编译时出现了警告:'M' - 未识别的字符转义序列 1.mq4 66 37
你能告诉我在这一行中要怎么调整才能正确编译吗?
在MQL4之前加一个双反斜杠