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

 
Maxim Kuznetsov:
原文がパラレルワールドからやってきて、google-translateで2回翻訳された後、アリスが再話したような感じです :-)。

なるほど。最後のロットを見つけるために使用できる関数があります。その名も「FindLastLots」。 でも、単に最後のロットを探すだけでなく、ロットを変更できるような機能を作りたいんです。つまり、extern lots = 0.01 の場合、この 関数を使って lots = 0.01 を例えば 0.04 に変更したいのです。そしてここで、一般的にどのように実装することができるかを理解する手助けが必要です。

double FindLastLots()
  {
   double oldlots=0;
   int oldticket;
   int ticket=0;

   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            oldticket=OrderTicket();
            if(oldticket>ticket)
              {
               oldlots= OrderLots();
               ticket = oldticket;
              }
           }
        }
     }
   return(oldlots);
  }
Общие принципы - Торговые операции - Справка по MetaTrader 5
Общие принципы - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит...
 
Corvin85:

...

ロット=0.01を0.04に変更する。 掛け算は使用しない。

...

まあ...掛け算が問題なら、足し算で欲しい結果を得ることができる。

 
Alexey Viktorov:

まあ...掛け算が問題なら、足し算で欲しい結果を得ることができる。

-:)

言わずに
 
この関数にwhileループを追加して、選択されたオーダーで 外部変数を1つずつ調べていくことは可能でしょうか?しかし、その後に「戻り値」を引き出して使うにはどうしたらいいのでしょうか?
 
Alexey Viktorov:

まあ...掛け算で問題がある場合は、足し算で目的の結果を得ることができます。

皮肉はわかりますが、掛け算や計算の場合、外部変数の数だけ乗算器があるはずだということ Lots.それは、状況の打開策にはならない。正直なところ、考えたことはあるのですが...。

 
こんにちは!私はM5タイムフレームをベースにEAを作っているのですが、シグナルは(例えば9時33分、12時11分)などに発動されます。シグナルが現在のものにあった場合、新しいローソク 足に注文を出す方法を教えてください。
 
Corvin85:

皮肉はわかりますが、掛け算や計算の場合、外部変数の数だけ乗算器があるはずだということ Lots.それは、状況の打開策にはならない。正直なところ、考えたことはあるけれど。

今となっては詳細を覚えていませんが、「ロット」の計算で何か複雑なことを命じられたのです。その結果、計算式が判明した。

もしかして、順番を詳しく書いた方がいいのでは?では、どなたかこの処方を提案してください。

 
Alexey Viktorov:

今となっては詳細を覚えていませんが、ロットの計算で何か凝ったことを命じられたのです。その結果、計算式が出来上がったのです。

もしかして、順番を詳しく書いた方がいいのでは?では、どなたかこの処方を提案してください。

#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lot  = 0.01;
extern double Lot2  = 0.02;
extern double Lot3  = 0.05;
extern double Lot3  = 0.07;
//----------- И так далее-------//

ロットにはいくつかの外部変数があります。ストップロスによって注文が閉じられた場合、外部変数に指定された新しいロットで新規注文が開始されます。(たぶん、本来はこう書くべきだったのでしょう)。ただ、コードでどう正しく書けばいいのかわからない。そして、上に書いたように、掛け算も計算も、外付けの乗算器も役に立ちません。何とかしてクローズドオーダーのデータを調べたいのですが...。

 
Corvin85:

いくつかの外部変数がある Lot.注文がStopLossによって閉じられると、外部変数で指定された新しいロットで新しい注文が始まります。(もしかしたら、これは本来こう書くべきだったかもしれない)そして、ここでヒヤリとすることがある。ただ、コードでどう正しく書けばいいのかわからない。そして、上に書いたように、掛け算も計算も、外付けの乗算器も役に立ちません。クローズドオーダーのデータを何とかして取り出したいのですが・・・。

注文を開く際、コメントにルール/変数の番号を記入してください。

履歴を確認する際に、この番号を取得し、それに1を加えて、新しいルール番号を取得します。

 
Corvin85:

いくつかの外部変数がある Lot.注文がStopLossによって閉じられると、外部変数で指定された新しいロットで新しい注文が始まります。(もしかしたら、これは本来こう書くべきだったかもしれない)そして、ここでヒヤリとすることがある。ただ、コードでどう正しく書けばいいのかわからない。上に書いたように、掛け算も計算も、外付けの乗算器も役に立ちません。クローズドオーダーのデータをどうにかして調べなければならない。

このコードで実験してください。おそらく、これが必要なものです。

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict

input double Lot_01  = 0.1;
input double Lot_02  = 0.2;
input double Lot_03  = 0.3;
input double Lot_04  = 0.4;
input double Lot_05  = 0.5;
input double Lot_06  = 0.6;
input double Lot_07  = 0.7;

double GetNextLot(const double last_lot)
{
   if(last_lot>=Lot_07) return(Lot_07);
   if(last_lot>=Lot_06) return(Lot_07);
   if(last_lot>=Lot_05) return(Lot_06);
   if(last_lot>=Lot_04) return(Lot_05);
   if(last_lot>=Lot_03) return(Lot_04);
   if(last_lot>=Lot_02) return(Lot_03);
   if(last_lot>=Lot_01) return(Lot_02);
   return(Lot_01);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   Print(Lot_01," ---> ",GetNextLot(Lot_01));
   Print(Lot_02," ---> ",GetNextLot(Lot_02));
   Print(Lot_03," ---> ",GetNextLot(Lot_03));
   Print(Lot_04," ---> ",GetNextLot(Lot_04));
   Print(Lot_05," ---> ",GetNextLot(Lot_05));
   Print(Lot_06," ---> ",GetNextLot(Lot_06));
   Print(Lot_07," ---> ",GetNextLot(Lot_07));
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
void OnTick()
  {

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

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.7 ---> 0.7

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.6 ---> 0.7

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.5 ---> 0.6

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.4 ---> 0.5

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.3 ---> 0.4

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.2 ---> 0.3

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.1 ---> 0.2

私の関数GetNextLot()では、最後に決済した注文の数量を入力すると、Lot_XXの設定の次の値が返されます。

このコードでの唯一の制限は、ロット設定が昇順であることです - 私はこのコードがシンプルでわかりやすいと思います、あなたのニーズに合わせて変更することができます