初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 940

 
Artyom Trishkin:

ここでは使えません。彼はスマートフォンなどの新しいガジェットは使いません。スモラバの携帯がありますが...。

ここには少なくとも一人、同じ志を持つ人がいる。私も、このようなガジェットやソーシャルメディアはすべて無視しています。クレムリンからの電話がないことを除けば...

 

リクオートはうんざりです。

//+------------------------------------------------------------------+
void OpenSell()
  {

   m_symbol.Name("EURUSD");
   RefreshRates();
   if(m_trade.Sell(InpLots,"EURUSD",m_symbol.Bid(),0.0,0.0))
     {
      if(m_trade.ResultDeal()==0)
        {
         Print("#1 Sell -> false. Result Retcode: ",m_trade.ResultRetcode(),
               ", description of result: ",m_trade.ResultRetcodeDescription());
         PrintResultTrade(m_trade,m_symbol);
        }
      else
        {
         Print("#2 Sell -> true. Result Retcode: ",m_trade.ResultRetcode(),
               ", description of result: ",m_trade.ResultRetcodeDescription());
         PrintResultTrade(m_trade,m_symbol);
        }

     }

//---
  }
//+------------------------------------------------------------------+

このコードのどこが問題なのでしょうか?注文実行チェックの結果も出ない。

リクオートで表が出るだけなんです。


 
ilvic:

リクオートはうんざりです。

このコードのどこが問題なのでしょうか?注文実行チェックの結果も出ない。

リクオートの表が出るだけで、それだけなんですけどね。


PrintResultTradeの 結果をコードとして 貼り付ける必要があります。写真ではなく、コードという形で。

 

これが専門家の文章です。テスト結果は書きませんのでご了承ください。

2018.11.02 15:20:36.769 Above (EURUSD,M1)       CTrade::OrderSend: instant sell 1.00 EURUSD at 1.14299 [requote (1.14307/1.14317)]

そして、ログにはこのように書かれています。

2018.11.02 11:18:49.826 Network '13107230': scanning network for access points
2018.11.02 11:19:17.821 Network '13107230': scanning network finished
2018.11.02 15:20:35.846 Trades  '13107230': instant sell 1.00 EURUSD at 1.14299 (deviation: 100)
2018.11.02 15:20:36.769 Trades  '13107230': requote 1.14307 / 1.14317 (instant sell 1.00 EURUSD at 1.14299 (deviation: 100))

サーバーメタクォーツデモ

 
ilvic:

これが専門家の文章です。テスト結果は書きませんのでご了承ください。

そして、ログにはこのように書かれています。

サーバーmethaqvotesデモ

PrintResultTradeの 結果をコードとして挿入 します。絵としてではなく、コードとして。


それともPrintResultTradeに全くたどり着けず、先に放り出されるのか?

 

そうなんですか?そうでない場合は、どういう意味か教えてください。

//+------------------------------------------------------------------+
//| Print CTrade result                                              |
//+------------------------------------------------------------------+
void PrintResultTrade(CTrade &trade,CSymbolInfo &symbol)
  {
   Print("File: ",__FILE__,", symbol: ",m_symbol.Name());
   Print("Code of request result: "+IntegerToString(trade.ResultRetcode()));
   Print("code of request result as a string: "+trade.ResultRetcodeDescription());
   Print("Deal ticket: "+IntegerToString(trade.ResultDeal()));
   Print("Order ticket: "+IntegerToString(trade.ResultOrder()));
   Print("Volume of deal or order: "+DoubleToString(trade.ResultVolume(),2));
   Print("Price, confirmed by broker: "+DoubleToString(trade.ResultPrice(),symbol.Digits()));
   Print("Current bid price: "+DoubleToString(symbol.Bid(),symbol.Digits())+" (the requote): "+DoubleToString(trade.ResultBid(),symbol.Digits()));
   Print("Current ask price: "+DoubleToString(symbol.Ask(),symbol.Digits())+" (the requote): "+DoubleToString(trade.ResultAsk(),symbol.Digits()));
   Print("Broker comment: "+trade.ResultComment());
  }
//+------------------------------------------------------------------+
 
ilvic:

これが専門家の文章です。テスト結果は書きませんのでご了承ください。

そして、ログにはこのように書かれています。

サーバーのメタクオーツデモ。

なぜ、コードを切る必要があったのですか?パラボリックSAR EA コードのオープニング機能例

//+------------------------------------------------------------------+
//| Open Sell position                                               |
//+------------------------------------------------------------------+
void OpenSell(double sl,double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);

   double short_lot=InpLots;
//--- check volume before OrderSend to avoid "not enough money" error (CTrade)
   double free_margin_check= m_account.FreeMarginCheck(m_symbol.Name(),ORDER_TYPE_SELL,short_lot,m_symbol.Bid());
   double margin_check     = m_account.MarginCheck(m_symbol.Name(),ORDER_TYPE_SELL,short_lot,m_symbol.Bid());
   if(free_margin_check>margin_check)
     {
      if(m_trade.Sell(short_lot,m_symbol.Name(),m_symbol.Bid(),sl,tp))
        {
         if(m_trade.ResultDeal()==0)
           {
            Print("#1 Sell -> false. Result Retcode: ",m_trade.ResultRetcode(),
                  ", description of result: ",m_trade.ResultRetcodeDescription());
            PrintResultTrade(m_trade,m_symbol);
           }
         else
           {
            Print("#2 Sell -> true. Result Retcode: ",m_trade.ResultRetcode(),
                  ", description of result: ",m_trade.ResultRetcodeDescription());
            PrintResultTrade(m_trade,m_symbol);
           }
        }
      else
        {
         Print("#3 Sell -> false. Result Retcode: ",m_trade.ResultRetcode(),
               ", description of result: ",m_trade.ResultRetcodeDescription());
         PrintResultTrade(m_trade,m_symbol);
        }
     }
   else
     {
      Print(__FUNCTION__,", ERROR: method CAccountInfo::FreeMarginCheck returned the value ",DoubleToString(free_margin_check,2));
      return;
     }
//---
  }
 
ilvic:

そうなんですか?そうでない場合は、どういう意味か教えてください。

コードからチェックステップ#3が抜けていますね。

 
Vladimir Karputov:

PrintResultTradeの結果をコードとして挿入 します。絵としてではなく、コードとして。


それともPrintResultTradeに至らず、先に放り出されるのか?

その通り、注文が実行された場合、印刷は次のようになります。

2018.11.02 10:09:12.648 Above (EURUSD,M1)       #2  Buy -> true. Result Retcode: 10009, description of result: done at 1.14387

再提示が あった場合、Expert Advisorは静止したままです。

そして、未達成の注文が残されている

 
ilvic:

正確には、注文が実行されると、次のような印字がされます。

リクオートの場合、Expert Advisorは魚のように無音になります。

そして、未達成の注文が残ってしまうのです。

私の投稿関数の 例を挙げました。切らなかった。パラボリックSARのEAに例が あります。

理由: