FORTS 助けてください - ページ 30

 
demonsn:
ありがとうございます。並行チェックとして、お客様のオプションを追加しました。あとはタイミングをつかむだけです。

100%うまくいきますよ!

構造体を正しく埋めていないからです(フィールドだけでなく、値も)。

コンパイラが「悪態」をつかなかったのが不思議です。

あなたです。

MqlTradeRequest.action = TRADE_ACTION_DEAL;

必要なんです。

MtRequest.action = TRADE_ACTION_DEAL;
 

でも、違うんです!私のメッセージにあるコードはExpert Advisorのものではなく、Expert Advisorからデバッグ情報が書き込まれたログの断片を修正したものです。私のミスです(笑)。

EA自体は必要な構造を埋めていくが、チェックの結果は異なる。マージンを正しく計算するか、例のような無意味なものを表示するかのどちらかです。

以下は、ライブサイトからの抜粋です。

   MqlTradeRequest MtRequest = {0}; 

   switch(OrderType)
   {
      case ORDER_TYPE_BUY:         
         MtRequest.price     = CurrentTick.ask;         
         break;

      case ORDER_TYPE_SELL:         
         MtRequest.price     = CurrentTick.bid;
         break;

      default:
         LogFile.Log(LOG_PRINT,__FUNCTION__," error: Invalid OrderType");
         return(false);
   }

   MtRequest.tp        = 0.0;
   MtRequest.sl        = 0.0;
   MtRequest.action    = TRADE_ACTION_DEAL;
   MtRequest.magic     = 0;
   MtRequest.symbol    = strSymbol;
   MtRequest.volume    = dblLots;
   MtRequest.deviation = Config.Deviation;
   MtRequest.type      = OrderType;
   MtRequest.type_filling = Config.OrdersFillingType;
 

そうしてください。

   MqlTradeRequest MtRequest = {0}; 
   MqlTradeRequest MtResult = {0}; 

   switch(OrderType)
   {
      case ORDER_TYPE_BUY:         
         MtRequest.price     = CurrentTick.ask;         
         break;

      case ORDER_TYPE_SELL:         
         MtRequest.price     = CurrentTick.bid;
         break;

      default:
         LogFile.Log(LOG_PRINT,__FUNCTION__," error: Invalid OrderType");
         return(false);
   }

   MtRequest.action    = TRADE_ACTION_DEAL;
   MtRequest.magic     = 77777777777777;
   MtRequest.symbol    = strSymbol;
   MtRequest.volume    = dblLots;
   MtRequest.type      = OrderType;
   MtRequest.type_filling = Config.OrdersFillingType;
   MtRequest.type_time = ORDER_TIME_DAY;
 

ここにもログの瞬間がある。

 MqlTradeRequest structure:
   action: Action Deal
   magic: 0
   order: 0
   symbol: Si-12.15
   volume: 2.00
   price: 63365
   stoplimit: 0
   sl: 0
   tp: 0
   deviation: 50
   type: ORDER_TYPE_SELL
   type_filling: ORDER_FILLING_FOK
   type_time: gtc
   expiration: 1970.01.01 00:00
   comment: (null)

 MqlTradeCheckResult structure:
   retcode: 10019 (There is not enough money to complete the request)
   balance: 133921.71
   equity: 132772.57
   profit: 0.00
   margin: 172148.68
   margin_free: -39376.11
   margin_level: 77.13
   comment: No money

同じ構造体をOrderSend() に渡すと、すべてが完璧に開きます

ちなみに、ビルド1194。

Si-12.15、2ロットを販売。1コントラクトのGOが5090ルーブル。取引はQR 5090*2 = 10180 RUBが必要です。しかし、この関数は172148.68ルーブルを返し、これは172148.68 / 5090 = 33.82契約に相当します!

なんという奇跡...。

 
demonsn:

ここにもログの瞬間がある。

同じ構造体をOrderSend()に渡すと、すべてが完璧に開きます

ちなみに、ビルド1194。

Si-12.15、2ロットを販売。1コントラクトのGOが5090ルーブル。取引はQR 5090*2 = 10180 RUBが必要です。そして、この関数は172148.68ルーブルを返し、これは172148.68 / 5090 = 33.82コントラクトに相当します!

何が不思議なのか...

1.きちんとした構成の記入例を示したのに、このアドバイスを無視するんですね。

では、なぜ聞くのですか?

2. 1194 ビルドは現在のサーバーと互換性がありません (Renat はこれについて言及しました。当面はビルド 1159 を使用してください)。

3.OrderCheck()関数を全く使わず、自分で資金を 確認しています。

//+------------------------------------------------------------------+
//| Expert Check money function                                      |
//+------------------------------------------------------------------+ 
bool CheckMoney( const string a_symbol, const long volume )
{
  if ( volume <= 0 )
  {
    Print( "Check Money: Объём лота указан не правильно!" );
    retutn ( false );
  } 
//---
  double a_go = SymbolInfoDouble( a_symbol, SYMBOL_MARGIN_INITIAL ) * double( volume);
  double free_margin = ( AccountInfoDouble( ACCOUNT_FREEMARGIN ) / 100 ) * 90; //90% от свободных средств
//---  
  if ( a_go <= free_margin )
  {
    return( true );
  }
  Print( "Check Money: Не достаточно средств!" );
  return( false );
}
 
Михаил:

1.構造を正しく記入するための見本を示したのに、このアドバイスを無視する。

では、なぜ聞くのですか?

2) Build 1194は現在のサーバーと互換性がありません(Renatが言及しました。当面はBuild 1159を使用してください)。

3.OrderCheck()を全く使わず、自分で手段を 確認している。


1.全く無視はしていません。全く無視しているわけではありません。あなたのサンプルをコードに組み込み、今、それを観察しているところです。

2.やばい!それは知らなかった。

3.私も同じことをしました。そして、機能は90%を除いてほとんど同じです(ところで、良いアイデアです)。

私がこの質問をしたのは、私の関数(あなたのものと似ている)がCSをチェックし、ポジションを開くことを可能にする一方で、標準のOrderCheck()が時々失敗するからです。


おそらくポイント2のことを指しているのでしょう。

端末のログには、こんなメッセージがたくさん残っています。

2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:27:40.995 Ticks   old tick @LKOH (tick: 2015.10.22 18:27:48, last: 2015.10.22 18:27:49) 0/0
2015.10.22 21:27:40.995 Ticks   old tick LKOH-12.15 (tick: 2015.10.22 18:27:48, last: 2015.10.22 18:27:49) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
 
demonsn:


1.なぜ無視しなければならないのか?全く無視しているわけではありません。あなたのサンプルをコードに入れました、今、見ています。

2.やばい!それは知らなかった。

3.私も同じことをしました。そして、機能は90%以外、ほとんど同じです(ちなみに、いいアイデアです)

私がこの質問をしたのは、私の関数(あなたの関数と同様)がCSをチェックし、ポジションを開くことを可能にする一方で、標準のOrderCheck()が時々不具合を起こすからです。

そのため、FORTSでは自分のものを使う方が正しいのです。)
 
Михаил:
そのため、FORTSではすべて自分のものを使う方が正しいです :)

結局そうなるのか!?ホイール」を書く時間を短縮したり、あるアイデアをテストするために、他人のコードやライブラリを使いたくなることがある。

しかし、結局は他の開発者のエラーや不具合をキャッチすることに1週間を費やさなければならないのです。最終的にはすべて書き換えて、他人のコードの痕跡を残さないようにします。

 

こんにちは。

先物の糊がテストウィンドウに表示され、それ自体は非常に喜ばしいのですが、糊と契約を一致させようとすると、糊には全く取引がなく、契約には全て問題なく、かなり多くの取引があることが分かりました。Si,RTS,GAZR,SBRFの4つの商品と期間2015.01.01~24.10.2015で確認しました。

 
Andrey Kotrin:

こんにちは。

先物の糊がテストウィンドウに表示され、それ自体は非常に喜ばしいのですが、糊と契約を一致させようとすると、糊には全く取引がなく、契約には全て問題なく、かなり多くの取引があることが分かりました。Si,RTS,GAZR,SBRFの4つの商品と期間2015.01.01~24.10.2015で確認しました。

先物でテスターが正常に動作しない。