初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 124

 
Игорь:
こんにちは。
mt4でテンプレートを使用せずにバーを再描画する方法を教えてください!?
あるいは、配色をどうするか!?
コンテキストメニューの チャート、プロパティ、色 - 試してみましたか?
 
Ihor Herasko:

混乱を避けるため、少し簡略化してお答えします。(&)記号は、関数の引数が実行時に値を変更でき、異なる値で関数が呼び出された場所に戻ることを示します。この場合、SaveOrder 関数は g_arrstBuyOrderInfo および g_arrstSellOrderInfo 配列の内容や、g_nBuyOrdersCnt および g_nSellOrdersCnt 変数を変更することができます。

ありがとうございます。少し明確になります。ただ、このようなことは、フォーラムを参照しないとわからないことなのです。チュートリアルにそのような解説はありませんでした。

また何かアドバイスをお願いします。

1) コンパイラは、'g_nBuyOrdersCnt' - 型のない宣言 ; 'g_nSellOrdersCnt' - 型のない宣言を 記述します。g_nBuyOrdersCnt と g_nSellOrdersCnt は、コンパイラによるエラーを回避するためにグローバルに宣言する必要があると仮定してよいですか?

2) コンパイラ:'for' - 式は、グローバルスコープでは許可さ れません。ここでは明らかにされていない。

3)void SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt) 関数で、コンパイラは次のように記述しています:'arrstOrderInfo' の宣言はグローバル宣言を隠して います。それもあまり明確ではありません。

4)'nOrderCnt'は未宣言の識別子 です。なぜ、どこにも宣言していないのですか?

そして最後にもうひとつ。.nと.fが どこから来て、何のためにあるのか、いまだに理解できていません。




 
Игорь:

こんにちは。

mt4でテンプレートを使用 せずにバーを再描画する方法を教えてください!?

あるいは、配色をどうするか !

プログラム的に行う場合は、ChartSetInteger()関数とChartGetInteger()関数を参照してください。

 
novichok2018:

ありがとうございます。少し意味がわかってきました。ただ、フォーラムを参照しないと、これだけのことがわからないというのは、いかがなものかと思います。教科書には、そのような説明はありませんでした。

また何かアドバイスをお願いします。

1) コンパイラは、'g_nBuyOrdersCnt' - 型のない宣言 ; 'g_nSellOrdersCnt' - 型のない宣言を 記述します。g_nBuyOrdersCnt と g_nSellOrdersCnt は、コンパイラによるエラーを回避するためにグローバルに宣言する必要があると仮定してよいですか?

2) コンパイラ:'for' - 式は、グローバルスコープでは許可さ れません。ここでは明らかにされていない。

3)void SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt) 関数で、コンパイラは次のように記述しています:'arrstOrderInfo' の宣言はグローバル宣言を隠して います。それもあまり明確ではありません。

4)'nOrderCnt'は未宣言の識別子 です。なぜ、どこにも宣言していないのですか?

コード全体を見るとこんな感じになっているはずです。

#property strict

input       int i_nMagicNumber = 12876;

#define  MAX_ORDERS_CNT   int(500)
struct OrderInfo
{
   int      nTicket;
   int      nType;
   double   fOpenPrice;
   double   fSL;
   double   fTP;
   datetime dtOpenTime;
};

int         g_nBuyOrdersCnt, 
            g_nSellOrdersCnt;

OrderInfo   g_arrstBuyOrderInfo[MAX_ORDERS_CNT], 
            g_arrstSellOrderInfo[MAX_ORDERS_CNT];

//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Expert initialization function                                                                                                                                                                    |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
int OnInit()
{
   return INIT_SUCCEEDED;
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Expert deinitialization function                                                                                                                                                                  |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Expert tick function                                                                                                                                                                              |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void OnTick()
{
    FindOrders();
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Fills the orders arrays                                                                                                                                                                           |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void FindOrders()
{
   g_nBuyOrdersCnt = 0;
   g_nSellOrdersCnt = 0;
   for (int i = OrdersTotal() - 1; i >= 0; --i)
   {
      if (!OrderSelect(i, SELECT_BY_POS))
         continue;
   
      if (OrderSymbol() != Symbol())   // Если нужны ордера только по текущему символу, к графику которого прикреплен советник
         continue;
   
      if (OrderMagicNumber() != i_nMagicNumber)  // Если имеется входной параметр советника i_nMagicNumber, в котором указан ID ордеров советника
         continue;
   
      if (OrderType() == OP_BUY)
         SaveOrderInfo(g_arrstBuyOrderInfo, g_nBuyOrdersCnt);
      if (OrderType() == OP_SELL)
         SaveOrderInfo(g_arrstSellOrderInfo, g_nSellOrdersCnt);
   }
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Saves one selected order in the specified array                                                                                                                                                   |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt)
{
   if (nOrdersCnt >= MAX_ORDERS_CNT)
      return;

   arrstOrderInfo[nOrdersCnt].nTicket = OrderTicket();
   arrstOrderInfo[nOrdersCnt].nType = OrderType();
   arrstOrderInfo[nOrdersCnt].fOpenPrice = OrderOpenPrice();
   arrstOrderInfo[nOrdersCnt].fSL = OrderStopLoss();
   arrstOrderInfo[nOrdersCnt].fTP = OrderTakeProfit();

   ++nOrdersCnt;
}
 
novichok2018:

最後にもうひとつ。.nと.fが どこから来て、何のためにあるのか、いまだによくわからない。

ドット」演算子は、構造体やクラスのメンバへのアクセスを示す。この場合、構造物である。

nとfの文字は、変数に格納されているデータの種類を指定する方法です。何しろ、膨大な数の変数がある中で、それぞれの種類を覚えておくのは不可能です。また、変数名にその型を示すものがあれば、それだけで覚える必要性がなくなります。nは整数(Numericより)、fは実数(float-浮動小数点数より)の符号です。このような変数名の書き方は、ハンガリー記法と 呼ばれています。

 
Ihor Herasko:

ドット演算子は、構造体やクラスのメンバへのアクセスを示す。この場合、構造物。

nとfは、変数に格納されるデータの種類を指定する方法である。何しろ、膨大な数の変数がある中で、それぞれの種類を覚えておくのは不可能です。また、変数名にその型を示すものがあれば、それだけで覚える必要性がなくなります。nは整数(Numericより)の符号、fは実数(float-浮動小数点数より)です。このような変数名の表記方法をハンガリー記法と いう。

出たーーーー!!!!(笑g_g_n は単なる略語ではなく、グローバル変数とグローバル整数変数であることを示す接頭語であることがわかりました!!!うっ...そして、この変数指定のダッシュの理由がわからず......。そんな微妙なことを知らない初心者が、どうして配列や構造体などを使ったコードを書けるのでしょうか?私のシンプルな戦略は、荒野に飛び込むことなく、簡単な言葉で書けると思ったのです。

あなたのアドバイスと一緒に勉強するために、mcl4に関する詳細な(拡張)チュートリアルのリンクを教えてください。

また、比較にハンガリー記法を使わずに上記のコードを書くことは可能でしょうか?MT4プラットフォームが明確に理解しているか?


そして、コードについての質問ですが、continue; は何のために あるのでしょうか?

for (int i = OrdersTotal() - 1; i >= 0; --i)
   {
      if (!OrderSelect(i, SELECT_BY_POS))
         continue;
最初の反復で選択されなかったオーダーは、その後の反復で選択されず、そのサイクルは無限に続くのですか?なぜなら、注文数は変わらないからです。エラーメッセージでブレイク する方が正しいのでは?
 
STARIJ:
コンテキストメニューのグラフィック、プロパティ、色 - あなたはそれを試してみました?

ありがとう、もう見つけたよ!

 
Ihor Herasko:

プログラム的に行う場合は、ChartSetInteger()関数とChartGetInteger()関数を参照してください。

もう、皆さんの協力で見つけてくれてありがとうございます!!!!

 
novichok2018:

出たーーーー!!!!(笑g_g_n は単なる略語ではなく、グローバル変数とグローバル整数変数であることを示す接頭辞であることが判明しました!!!!うっ...そして、この変数指定のダッシュの理由がわからず......。そんな微妙なことを知らない初心者が、どうして配列や構造体などを使ったコードを書けるのでしょうか?私のシンプルな戦略は、荒野に飛び込むことなく、簡単な言葉で書けると思ったのです。

何かをするためには、微妙なところを掘り下げていかなければならないのです。それ以外の方法はない。

あなたのアドバイスと一緒に勉強するために、mcl4に関する詳細な(拡張)チュートリアルのリンクを教えてください。

MQL4の教科書は、セルゲイ・コバレフ 氏のものしか知りません。

また、比較にハンガリー記法を使わずに上記のコードを書くことは可能でしょうか?MT4プラットフォームが明確に理解しているか?

すぐに正しいコードフォーマットに慣れることができます ))ハンガリー語表記は、かなり経験のあるプログラマーによって考案されたものである。

そして、コードについての質問ですが、continue; は何のために あるのでしょうか?

つまり、最初の反復でオーダーが選択されなければ、次の反復でも選択されず、ループは無限大に続くということですか?なぜなら、注文数は変わらないからです。エラーメッセージでブレイク する方が正しいのでは?

1つの注文を選択できなかったとしても、次の注文を選択できないわけではありません。したがって、ループを継続することは合理的である。

Учебник по MQL4
Учебник по MQL4
  • book.mql4.com
В настоящее время персональный компьютер стал незаменимым помощником в жизни каждого человека. Благодаря развитию Интернета и увеличению мощности современных компьютеров открылись новые возможности во многих областях деятельности. Ещё десять лет назад торговля на финансовых рынках была доступна только банкам и узкому кругу специалистов. Сегодня...
 
Ihor Herasko:

ある注文が選択できなかったとしても、次の注文が選択できないわけではありません。したがって、このサイクルを継続することは合理的である。

また、エラーメッセージを 表示する必要はないのでしょうか?おそらく、注文が見つからない理由とそれを回避する方法を知ることができれば、役に立つのではないでしょうか?