新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 550

 
iv1986:

在代码的末尾也有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,无其他内容。

那么这里是如何帮助你的?首先,你写道,"销售限额 "没有得到展示,你给出了日志的摘录。而现在我们说的是买入限价单。因此,问题必须是浮动的。此外,你从未引用过该声明。你声称该命令在现实中是看不到的。而该声明可能有助于澄清情况。

 
void OnStart()
 {MqlTradeRequest request={0};
  MqlTradeResult  result={0};
 double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
 double Ask=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;
   }
 
Ihor Herasko:

我怎样才能帮助你?首先,你写道,"卖出限制 "没有被放置,并且你给出了日志的摘录。现在我们讨论的是买入限价单。因此,问题必须是浮动的。此外,你从未引用过该声明。你声称该命令在现实中是看不到的。该声明可能有助于你澄清情况。

卖出限额和买入限额都没有设置, Alert(result.retcode)返回10009我在哪里可以得到这个 "声明",我需要做什么?

 
iv1986:

在我自己身上运行这个代码。请注意,在非二进制符号上你会得到一个0的除法误差,因为那里没有初始化的余量。

在我设法运行它的代码中,我不得不添加一个体积检查。否则,体积等于零。

if (request.volume < SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN))
   request.volume = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);

之后,订单就成功设定了。还要注意的是,它的触发速度相当快--它与价格接近。因此,订单本身可能不会被你注意到。如果账户类型是净额结算,它将被转换为头寸或附加到头寸上。

 
iv1986:

卖出限额和买入限额都没有设置, Alert(result.retcode)返回10009我在哪里可以得到这个 "转码",我应该怎么做?

工具箱 "窗口的 "历史 "标签。在上下文菜单中选择"订单"。然后从上下文菜单中选择 "报告"-"HTML"。但你可能会自己看到订单丢失的原因:其状态将被标记为 "已完成"。

 

找到了我的2009年脚本,但现在编译时出现了警告:'M' - 未识别的字符转义序列 1.mq4 66 37

PapkaFiles    = TerminalPath()+"\MQL4\Files\\";//Путь к терминалу 

你能告诉我在这一行中要怎么调整才能正确编译吗?

 
Ihor Herasko:

在我自己身上运行这个代码。请注意,在非二进制符号上你会得到一个0的除法误差,因为那里没有初始化的余量。

在我设法运行它的代码中,我不得不添加一个体积检查。否则,体积等于零。

之后,订单就成功设定了。还要注意的是,它的触发速度相当快--它与价格接近。因此,订单本身可能不会被你注意到。如果账户类型是净额结算,它将被转换为头寸或附加到头寸上。

谢谢你!
 
HeAic:

找到了我的2009年脚本,但现在编译时出现了警告:'M' - 未识别的字符转义序列 1.mq4 66 37

你能告诉我在这一行中要怎么调整才能正确编译吗?

在MQL4之前加一个双反斜杠
 
你好,你能告诉我是否有可能将复制信号和机器人连接到mt4账户,并将所有这些连接到vps?
 
Artyom Trishkin:
在MQL4之前加一个双反斜杠
和F之前也是如此。所有的斜线都应该是双斜线