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

 
Ihor Herasko:

OrderSelect()は端末内部で実行され、サーバーへのリクエストはありません。ですから、ティックごとに注文リストにアクセスすることに何の問題もありません。ほとんどのExpert Advisorがそうです。

また、配列についてのご質問は、プログラムのアーキテクチャに関連するものです。大量の注文で動作する複雑なEAの場合、絶対に必要です。Expert Advisor が単純なロジックで単一の注文で動作する場合、配列は冗長です。

ただ、注文の配列があっても、OrderSelect()を呼ばないとどうにもならないことは、特筆すべきことです。結局のところ、注文がまだ存在しているかどうかをティックごとにチェックしなければならないのです。また、そのパラメータを変更することも可能です。

ありがとうございます。
 
Rustam Bikbulatov:

みんな、どうしたらいいか、何から始めたらいいか教えてくれ!

例:0.01 ロットの注文が 15 件あり、0.07 ロットの取引を決済する必要があります。

質問ですが、1回のOrderClose(...)で7つの注文または0.07を決済するにはどうしたらいいのでしょうか?

0.07を一度に入れると、出来高0.01の取引は表示されない。

プログラミングは初めてです。


    int countS = 3;
   if(LastTime!=iTime(NULL,1,0)){
      for(int i=OrdersTotal()-1; i>=0; i--){
       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
        if(OrderSymbol()==Symbol() && OrderMagicNumber()==321){ 
         if(OrderType()==OP_SELL){
           irvb=OrderClose(OrderTicket(),0.01,Ask,3,CLR_NONE);
           LastTime=iTime(NULL,1,0); countS--; if(countS==0)break;   
          }}}}} 

countSという 形でカウンターの作り方のヒントをいただきました。

1分間に0.01ロットの取引を3件成立させる必要があります。さて、すべての注文が順番に計算されるように変換するにはどうしたらよいかという問題があります。

for(int i=OrdersTotal()-1; i>=0; i--){とすると、最後の注文から順番にカウントさ れることになります。

If for(int p=0; p<OrdersTotal(); p++){ ならば、1番目から1番目までのオーダーになります。

カウンターは動作しますが、例えばLOBが0.15の場合、0.03ロットのクローズではなく、1分ごとに0.01ロットのクローズが行われます。

付け加えるべきことは何でしょうか?

注文数・ロットに関係なく、全ロットの一部を決済できるようにするには?
 
Rustam Bikbulatov:


countS カウンターの作り方のヒントです。

1分間に0.01ロットの取引が3回成立している必要があります。今、私はすべての注文が順番にカウントされるように変換する方法を質問しています。

for(int i=OrdersTotal()-1; i>=0; i--){とすると、最後の注文から順番にカウントさ れることになります。

If for(int p=0; p<OrdersTotal(); p++){ ならば、1番目から1番目までのオーダーになります。

カウンターは動作しますが、例えばロットサイズが0.15である場合、それは0.03ロットを閉じていない、それは毎分0.01ロットを閉じています。

付け加えるべきことは何でしょうか?

注文数・ロットに関係なく、全ロットの一部を決済できるようにするには?

この問題を設定する場合(ちなみに非常に不思議なことに)、「アカウント履歴」のリストで作業する必要があります。新しい反復のたびに、このリストを調べて、現在の分に決済された注文を見つけ、その数量を合計する必要があります。ボリュームが足りなければ、必要に応じてソートして(だから方法は聞かないでください、あなた次第です)、シングルオーダーを取ります。0.01で終了し、次の反復で再び開始します。

 
Ihor Herasko:

このようなタスクを設定する場合(ところで、非常に奇妙なことですが)、「アカウント履歴」リストで作業する必要があります。新しい反復のたびに、このリストを調べて、現在の分単位で決済された注文を見つけ、その数量を合計します。ボリュームが足りなければ、必要に応じてソートして(だから方法は聞かないでください、あなた次第です)、シングルオーダーを取ります。次の繰り返しで、0.01で終了すること。

やってみます! ありがとうございました。

 
harbor:
ターミナルからメール送信の設定ができない
myl.ruではうまくいかなかったのですが、今度は同じように設定してもテストメッセージが送信されないのです。
どなたか対処されたのでしょうか?

自分用(非売品)であれば、メールの問題に対する正しい処置は:

1) ローカルホストにメーラーを設置し、転送を行い、配送を保証し、認証とアンチスパムプロテクションに干渉しないようにする。そうでなければ、EAはあっという間にブラックリストに載ってしまうでしょう。
これは難しいことではありません - 内蔵のwin smtpと簡単な設定で無料です、ピンチでは自分でスクリプトを書くことができます:-)

2) SendMail()の代替手段を使用する。全プロセスを制御し、タグやフラグ、オプションでhtmlや画像付きのスマートなレポートを送信することができます。

1+2を組み合わせると、合計3個になりますから :-) 、感覚的に安定した解答になりますね。

メール送信について :https://www.mql5.com/ru/blogs/post/718364

-----

SendMailとMTのセットアップの詳細についてヘルプが必要な場合、スクリーンショット、ソースコードの抽出、エラー診断...を添付してください。
だから、"地中ノック "だけでなく

TradeBiff - отправка почты со скриншотами
TradeBiff - отправка почты со скриншотами
  • 2018.05.19
  • Maxim Kuznetsov
  • www.mql5.com
Очень важно получать детальные оповещения о действиях любого робота. Универсальный способ оповещений - это отправка почты. TradeBiff будет следить за изменениями и отправлять вам необходимые отчёты. Таким образом у вас в почтовом ящике получится хороший торговый журнал. Постановка задачи Ставим себя на место заказчика и формулируем задачу...
 
ユーザー関数から呼び出された場合、"TimeCurrent()"は最後のティックの時刻を返すという理解で正しいですか?
 
Asa saas:
ユーザー関数から呼び出された場合、"TimeCurrent() "は最後のティックの時刻を返すという理解で正しいですか?

はい

 

ごあいさつ


オーダーは、OrderSelect コマンドを使用して、その番号でアクセスすることができます。

質問、既存のオーダーの数を事前に把握することで、全てをスルーすることはできないのでしょうか?例えば、新しい注文を開けるときに、この番号を記憶しておくことができます。

この番号は1から順番に割り当てられると理解しています。どのようなニュアンスが考えられるでしょうか。

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

 
Decromor:

ごあいさつ


オーダーは、OrderSelectコマンドを使用して、その番号でアクセスすることができます。

質問、既存のオーダーの数を事前に把握することで、全てをスルーすることはできないのでしょうか?例えば、新しい注文を開けるときに、この番号を記憶しておくことができます。

この番号は1から順番に割り当てられると理解しています。どのようなニュアンスが考えられるでしょうか。

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

オーダーセンド
オーダーセレクト

 

脳が壊れました、助けてください

相関計算ユニットを書きました。しかし、OANDAとinvesting.comでは全く違う結果が出ているのです。面白いですね~、お互い一致しないんですね~。

どこが間違ってるんだろう?


現在の通貨ペアはEURUSDで、GBPUSDとの相関を確認しています。


extern string SubSymbol = "GBPUSD";

extern int correlation_time = 24; // 選択した通貨ペアの相関を何時間チェックするか

.....

// ------------------------ 相関計算のブロック ------------------------.

int period = 15;

int bars_number = MathRound(correlation_time*60/period);

double symbol_avg = 0;

double symbol_avg = 0;

double symbol_price[]、double subsymbol_price[]。

double x,y;

int j;

int shift = 0;

ArrayResize(symbol_price, bars_number)。

ArrayResize(subsymbol_price, bars_number)を使用します。

for (j=0; j < bars_number; j++)

{

symbol_price[j] = (iHigh(NULL,period,j+shift) - iLow(NULL,period,j+shift))/2;

subsymbol_price[j] = (iHigh(SubSymbol,period,j+shift) - iLow(SubSymbol,period,j+shift))/2;

symbol_avg = symbol_avg + symbol_price[j];

subsymbol_avg = subsymbol_avg + subsymbol_price[j]とする。

}

symbol_avg = symbol_avg/bars_number;

subsymbol_avg = subsymbol_avg/bars_number;

double ss_xx = 0;

double ss_xy = 0;

double ss_yy = 0;

for (j=0; j < bars_number; j++)

{

x = symbol_price[j] - symbol_avg;

y = subsymbol_price[j](サブシンボル価格) - subsymbol_avg(サブシンボル平均値)。

ss_xy = ss_xy + x*y とする。

ss_xx = ss_xx + x*x とする。

ss_yyy = ss_yy + y*y;

}

double correlation = ss_xy/MathSqrt(ss_xx*ss_yyy);

Alert(correlation, " ", bars_number);

ArrayFree(symbol_price)。

ArrayFree(subsymbol_price)です。

// 相関計算ブロックの終了