MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 996

 
Alexey Viktorov:


印刷しようとしているものは、正しくありません。正しくはこうです。

その内訳は以下の通りです。

42 は数値識別子:ACCOUNT_MARGIN_FREE

つまり、定数からフリーマージンを求めることができます。

AccountInfoDouble(ACCOUNT_MARGIN_FREE)

または、その数値の識別子で。

AccountInfoDouble(42)

ありがとうございました。

 
killer67:

その内訳は以下の通りです。

42 は数値識別子:ACCOUNT_MARGIN_FREE

つまり、定数からフリーマージンを求めることができます。

または、その数値の識別子で。

ありがとうございました。

最初のバージョンのライティングは、より情報量が多い。

 

https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants

愚問かもしれませんが、これらの関数はMQL4で使用できるのでしょうか?ただ、MQL4のツールはより限定的です。

MQL4でデータを取得する方法。

シンボル_セッション_ディール

現在のセッションの取引数

シンボル_セッション_買い注文

現時点での買い注文の総数

シンボル_セッション_セル_オーダー

現時点での売り注文の総数

SYMBOL_VOLUME(シンボルボリューム

数量 - 直近の取引数量

シンボルボリューム高

その日の最大音量

シンボルボリュームロー

当日の最小出来高

SYMBOL_BID

入札-ベストビッド

二重

SYMBOL_BIDHIGH

当日の最大落札額

二重

SYMBOL_BIDLOW

当日の最低落札価格

二重

SYMBOL_ASK

アスク - ベストビッド

二重

SYMBOL_ASKHIGH

当日の最大アスク

二重

SYMBOL_ASKLOW

当日のミニマムアスク

シンボル_セッション_ボリューム

現在のセッションの総取引量

二重

シンボル_セッション_ターンオーバー

当四半期の総売上高

二重

シンボル_セッション_インタレスト

オープンポジションの総量

二重

シンボル_セッション_買い注文_ボリューム

現時点での買い注文の総量

二重

シンボル_セッション_販売注文_ボリューム

現時点での売り注文の総量

二重

シンボル_セッション_オープン

セッション開始価格

二重

symbol_session_close

クローズ価格

二重


有用なデータが一挙に集まる宝の山です。問題は、それをMQL4でどうやるかだ。 なぜMQL5を勉強しないのかというと、MQL5の方が機能が充実しているからです。単純なことです。すべてのブローカーが対応しているわけではありません。現時点ではまだMQL4が最も人気があり、需要もあります。

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Для получения текущей рыночной информации служат функции SymbolInfoInteger(), SymbolInfoDouble() и SymbolInfoString(). В качестве второго параметра этих функций допустимо передавать один из идентификаторов из перечислений ENUM_SYMBOL_INFO_INTEGER, ENUM_SYMBOL_INFO_DOUBLE и ENUM_SYMBOL_INFO_STRING соответственно. Некоторые символы (как...
 
Gilmor:

https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants

愚問かもしれませんが、これらの関数はMQL4で使用できるのでしょうか?ただ、MQL4のツールはより限定的です。

MQL4でデータを取得する方法。


ワンクリックで役立つデータの宝庫です。しかし、MQL4ではどうすればいいのか。この記事では、MQL5で勉強するための準備のコツも紹介します。単純なことです。すべてのブローカーが対応しているわけではありません。現時点ではまだMQL4が最も人気があり、需要もあります。

mql4のドキュメントでは、動作しないものはすべてマークされています。

SYMBOL_BID

入札-ベストビッド

二重

SYMBOL_BIDHIGH

非対応

二重

SYMBOL_BIDLOW

非対応

二重

SYMBOL_ASK

Ask - best offer to buy

二重

SYMBOL_ASKHIGH

非対応

二重

SYMBOL_ASKLOW

非対応

二重

シンボルラスト

非対応

二重

シンボル_ラストハイ

非対応

二重

SYMBOL_LASTLOW

非対応

二重

SYMBOL_POINT

一点値

二重

これはテーブル全体ではありません。ドキュメントに複数あるので、F1キーを押して読んでみてください。

 
Alexey Viktorov:

mql4のドキュメントでは、動作しないものにはすべてマークが付けられています。

ありがとうございます。
 
ストップロスを正しく設定できないので、理解するのに役立つ。
ログ行:
2019.11.16 12:38:40.660 2019.01.02:35:00 ストップを計算するには、ブローカーから値=30を取る
2019.11.16 13:20:18.791 2019.01.01.02:03:00 Open order: Price = 1.14595, Stop Loss = 1.14565, Take Profit = 1.14625
2019.11.16 13:20:18.791 2019.01.02 02:03:00 failed instant buy 0.01 EURUSD at 1.14595 sl: 1.145.00.14565 tp: 1.14625 [invalid stops]
2019.11.16 13:20:18.792 2019.01.02:03:00CTrade::OrderSend: instant buy 0.01 EURUSD at 1.14595 sl: 1.14565 tp: 1.14525 tp: 1.14625 [invalid stops]


そして、このケースを少し分かりやすく説明すると、
注文を出す前のコードで、次のように計算します:
価格 = 注文に応じて、買うべき最高の市場価格、この場合は買いです。
SL = 右ストップを計算(ブローカーは価格から少なくとも30単位のストップを許可)すなわち
価格 (1.14595) - 0.0003 = SL (1.14565)
TP = 右ストップを計算(ブローカーは価格から少なくとも30単位を許可)すなわち
価格 (1.14595) + 0.0003 = TP (1.14625)
まあすべてが正しく見える、私は30点を保持しているが、私は設定エラーが表示されます。

SL = 0とすれば、すべてOKで、オーダーとTPが設定されます。
SLの計算でエラーが出るのですが、どこがエラーなのでしょうか?
 
killer67:
ストップロスを正しく設定できないのですが、教えてください。
ログラインです。
2019.11.16 12:38:40.660 2019.01.02 02:35:00 ストップを計算するには、ブローカーからの値 = 30 を取る。
2019.11.16 13:20:18.791 2019.01.02 02:03:00 注文を開く:価格=1.14595、ストップロス=1.14565、テイクプロフィット=1.14625
2019.11.16 13:20:18.791 2019.01.02 02:03:00 失敗した瞬間買い 0.01 EURUSD at 1.14595 sl: 1.14565 tp: 1.14625 【無効なストップ】。
2019.11.16 13:20:18.792 2019.01.02 02:03:00 CTrade::OrderSend: instant buy 0.01 EURUSD at 1.14595 sl: 1.14565 tp: 1.14625 [invalid stops] (ストップは無効です。


そして今、この事件のためにいくつかの明確化。
コードでは、注文を開く前に計算しています。
price = 注文に応じた最適な市場価格、この場合は買い。
SL = 右のストップを計算する(ブローカーは価格から少なくとも30単位離れたストップが可能)、すなわち。
価格 (1.14595) - 0.0003 = SL (1.14565)
TP = 正しいストップを計算する(ブローカーは価格から少なくとも30単位離れたところでストップすることを許可しています)。
価格 (1.14595) + 0.0003 = TP (1.14625)
さて、すべてが正しいように見える、私は30ピップを保持しますが、私は設定エラーが表示されます。

SL=0とし、それで全てOK、オーダーとTPが設定されました。
SLの計算ミスであることが判明したが、どこがミスなのか?

どのような価格ですか?

 
Iurii Tokman:

どのような価格ですか?

購入時 価格=SYMBOL_ASK

発売価格=SYMBOL_BID

 
killer67:

購入時 価格=SYMBOL_ASK

販売価格=SYMBOL_BIDの場合

スプレッドを追加してみましたか?

 
Iurii Tokman:

スプレッドを追加してみましたか?

このように修正しました。

double CheckSetSL(ENUM_ORDER_TYPE OrderT, double price)
  {
   if(InpSL != 0)
     {
      double CalcSL = 0.0;
      double SL = 0.0;
      if(InpSL < 0.0003)
        {
         CalcSL = 0.0003; // Если SL в настройках указано меньше 30 (установки брокером) то ставим минимально допустимую.
        }
      else
        {
         CalcSL = InpSL;
        }

      // Формируем стоп-лимит.
      if(OrderT == ORDER_TYPE_BUY)
        {

         SL = SymbolInfoDouble(_Symbol,SYMBOL_BID) - CalcSL;

        }
      else
        {

         SL = SymbolInfoDouble(_Symbol,SYMBOL_ASK) + CalcSL;

        }

      return SL;
     }

   return 0.0;
  }