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

 
Vitaly Muzichenko #:

何から手をつけていいのかわからない。

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
  int H=100;
  double b, a;
  if(prev_calculated==0) {
    ArrayInitialize(Buffer1,EMPTY_VALUE);
    ArrayInitialize(Buffer2,EMPTY_VALUE);
  }

  b=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  a=SymbolInfoDouble(Symbol(),SYMBOL_ASK);

  if(rates_total-prev_calculated==1) {
    Buffer1[H+1]=EMPTY_VALUE;
    Buffer2[H+1]=EMPTY_VALUE;
  }
  else if (rates_total == prev_calculated) { // сдвигаем данные только когда количество баров не поменялось (в случае появления нового бара они сдвигаются системой терминала)
    ArrayCopy(Buffer1, Buffer1, 1, 0, H);
    ArrayCopy(Buffer2, Buffer2, 1, 0, H);
  }
  // записываем новые данные
  Buffer1[0]=b;
  Buffer2[0]=a;
  return(rates_total);
}

うまくいくはずなんです。チェックしてみてください。

P.S. また、ArrayCopy関数でどの程度速度が変化するのかも書いてください。自分でも知りたいです。

 
Vitaly Muzichenko #:

どこから手をつけていいかわからない

ここでは、mql5のバリエーションを紹介します。ただし、Ask価格のみ。入札価格では、自分で作るしかない。

インジケーターバッファでの動作、ティックでの動作、インジケーターバッファのリバースインデックスが不要な例など、すべて揃っています。

1000バーでは、全く遅延なく表示されます。

ファイル:
 
Alexey Viktorov #:

ここでは、mql5のバリエーションを紹介します。ただし、Ask価格のみ。入札価格については、ご自身で最終決定してください。

インジケーターバッファの操作、ティックの操作、インジケーターバッファのインデックスを反転させる必要がない例など、すべて揃っています。

1000バーでは、全く遅延なく表示されます。

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

 

こんにちは、最近MT4を使い始めたのですが、次のような問題に遭遇しました。私のアルゴリズムは単純で、新しいローソク足が表示されたら、Sell StopとBid Stopの2つの保留中の注文を置き、そのうちの1つが閉じたら閉じた注文(Sell StopまたはBid Stop)に従って、閉じたものの代わりに1つ注文を置く必要があります。注文は出ているのですが、クローズしたものをどのように追跡するのか理解できません。コードを入れてみましたが、メッセージはSellSTOPのみ表示され、BIGHTSTOPには反応しません。


if (OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY))
   {
   Print("OrderType", OrderType());//Тут всегда только только "1"
   }
   if(OrderType()==0)
    {
    Print("Закрылся  BUYSTOP:", OrderTicket());
    }
   if(OrderType()==1)
   {Print("Закрылся   SELLSTOP:",  OrderTicket());} //Тут сообщает корректно - номер ордера

また、OnTradeやOnTradeTransactionが 動作しないことに遭遇し、これを試してみました。

void OnTradeTransaction()
 {
 Print("status - "); 
 }  
 
MixanM #:

こんにちは、最近MT4を使い始めたのですが、次のような問題に遭遇しました。私のアルゴリズムは単純で、新しいローソク足が表示されたら、Sell StopとBid Stopの2つの保留中の注文を置き、そのうちの1つが閉じたら閉じた注文(Sell StopまたはBid Stop)に従って、閉じたものの代わりに1つ注文を置く必要があります。注文が配置されている - 問題はありませんが、私は閉鎖されたものを追跡する方法を理解することはできません、私はコードを置くが、メッセージはSellSTOPのみを表示し、BAYSTOPが応答しません。

//+----------------------------------------------------------------------------+
int LastClose()
  {
   int result=-1;
   datetime t=0;
   int i=OrdersHistoryTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY||OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime())
                 {
                  t=OrderCloseTime(); result=OrderType();
                 }
              }
           }
        }
     }
   return(result);
  }
//+----------------------------------------------------------------------------+

MixanMOnTradeTransactionが 動作しないことが判明し、これを試してみました。

MT5用のようです
 
皆さん、こんにちは。
ここで質問です。
このサービスのお得な コピーは、そう何年も前から変わっていない。以前から、開発者は来場者の利便性を考えることに全く興味がないという印象を持っていた。
それは、自分たちのプロジェクトの必要性を感じたからです。

可能かどうか分からないが?

1)私はお得なコピー機が必要、(顧問)私はどのような負荷とどのようにそれが測定されているかわからない、あなたはそれが1からコピーし、100以上のアカウントを配布することができるであろうことが必要です。
コピーについての質問です。私の目的は、取引の割合に基づいて取引量を得ることです(例えば、私の口座には100あり、私のフォロワーの口座には1000あります。私は預金の3%で取引を開き、ロット量は私の取引の割合で再計算されます。)


2) 彼の口座情報を引き出すことは可能ですか?例えば、名字、名前、そして最も重要なのは残高の金額です。すべての情報を引き出すことができないのであれば、何が可能なのでしょうか。

3) プログラマーの皆様、このような仕事のおおよその費用を概算してください、私は騙されたくないので、適切な価格を理解したいのです。
ありがとうございました。
 
Roman Voloshchuk トランザクションのコピーは、昔から変わっていないんです。以前から、開発者は来場者の利便性を考えることに全く興味がないという印象を持っていた。それは、自分たちのプロジェクトの必要性を感じたからです。可能かどうかわからないのですが?1)私はお得なコピー機が必要、(顧問)私はどのような負荷とどのようにそれが測定されているかわからない、あなたはそれが1からコピーし、100以上のアカウントを配布することができるであろうことが必要です。コピーについての質問です。私の目的は、取引の割合に基づいて取引量を得ることです(例えば、私の口座には100あり、私のフォロワーの口座には1000あります。私は預金の3%で取引を開き、ロット量は私の取引の割合で再計算されます。)2) 彼の口座情報を引き出すことは可能ですか?例えば、名字、名前、そして最も重要なのは残高の金額です。すべての情報を引き出すことができないのであれば、何が可能なのでしょうか。3) プログラマーの皆様、このような仕事のおおよその費用を概算してください、私は騙されたくないので、適切な価格を理解したいと思います。ありがとうございました。











加入者データは持ち出すと弊害がある。

ここでも、あなたはレバレッジ500で口座に50を持ち、加入者はレバレッジ33で5000を持っています。

ここには、ちょっと計算の問題があるんです。それは、このサービスのことを言っているのであれば。

セルフコピーということであれば

レバレッジ2000の口座に50枚、レバレッジ33の口座に5000枚の資金がある場合。

小さなレバレッジで3つのポジションを建てることができる一方、契約者は2つ目以降は証拠金にさらされるため、資金が残らなくなります。

---

そんな単純な話じゃないんです。

 

Tretyakov Rostyslav #:
Это вроде для МТ5С

コードをありがとうございます、しかし、あなたのもなぜか偶数の注文(SELLSTOP)しか返しません、なぜか理解できません、多分ソートが間違っている/(私はテスターでコードを実行しています - これが問題なのでしょうか?)

 
MixanM #:

コードをありがとうございます、しかし、あなたのもなぜか偶数の注文(SELLSTOP)しか返しません、なぜか理解できません、多分ソートが間違っている/(私はテスターでコードを実行しています - これが問題なのでしょうか?)

私のコードでは、最後に決済された注文の種類("0-買い "または "1-売り")を返します。
 
Tretyakov Rostyslav #:
私のコードでは、最後に決済された注文の種類("0-買い "または "1-売り")を返します。

そうですね、「売り止め」注文のデータしか返さないということです。視覚的に確認するために、あなたのに追加しました。

...

if(t<OrderCloseTime()の場合)

{

t=OrderCloseTime(); result=OrderType();

Print("Order TIP :", OrderTicket());

}

....