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

 
Ivan Butko:

どのような条件を追加すればよいか、どのように実装すればよいか(簡単であれば)、ご存知の方がいらっしゃいましたら教えてください。

できるのですが、仕組みを確認するのは面白くないので、概要を説明します。

void OnTick()
{  static int ticket = -1;
   while(!IsStopped() &&ticket<0)
   {  if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())
      {  
         RefreshRates();
         ticket = OrderSend("EURUSD", OP_SELL, 0.01, Bid, 3, 0, 0, "", 0, 0, clrRed);
         if(ticket > 0) break; 
      }
   Sleep(123); 
   }
}
 
Igor Makanu:

できるけど、どう動くか確認するのは面白くないので、スケッチしてみただけです。

イゴール ありがとうございます。そして、確認する必要はありません、もちろん自分でやります。

ダニを待たずにできる方法はないでしょうか?

そこで、「プッシュ」を押すと、すぐに開口要求が出るようにしました。

ターミナル(チャートの左上)にあるクイックオープニングディールの標準的な「売買」ボタンのようなものです。それを押すと、瞬時にセルが開く。必要なのは、ティックを待つことなく、単一の取引ではなくバスケットの注文を開くことです。

2つの実装がある(と私は考えている)。
1) チャート上にバスケットを開くボタン(のようなもの)のどちらかを設置する。
2)またはExpert Advisorを使用します。アドバイザーの方が、(問題があれば)開封依頼を繰り返せるので、便利そうです。



アップデイト

あなたのコードは、新しいティックで開き、クールな、ありがとう)動作します。


アップデイト

また、コピー機には "ms "というパラメータがあり、チェック時間を設定することができることを思い出しました。また、マスターがオープンディールを持っている場合、1msのスレーブからディールオープンのリクエストを送信することができます。すなわち、即時開封が可能であること

 
Igor Makanu:

できるのですが、どう動くか確認するのは面白くないので、スケッチで紹介します。

イゴール、目で見て確認してください。このオープニングは、新しいティックを待たずに、瞬時に行われるのでしょうか?

int OnInit()

{

//---

静的 int ticket = -1;

while(!IsStopped() &&ticket<0)

{ if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())

{

RefreshRates()。

ticket = OrderSend("EURUSD", OP_SELL, 0.01, Bid, 3, 0, 0, "", 0, clrRed);

if(ticket > 0) break;

}

スリープ(1)。

}

//---

return(INIT_SUCCEEDED);

}

------------------

そして、意図したとおりに動作しているようです・・・。
 
Ivan Butko:



それ以外は、意図したとおりに動作しているようですが...。

がベストな選択ではないのですが・・・。ならせめて

#property strict
int ticket = -1;
int OnInit()
{  if(ticket < 0) SendMyOrder();
   return(INIT_SUCCEEDED); 
}
//+------------------------------------------------------------------+
void OnTick()
{
   if(ticket < 0) SendMyOrder();
}
//+------------------------------------------------------------------+
void SendMyOrder()
{  while(!IsStopped() && ticket < 0)
   {  if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())
      {  RefreshRates();
         ticket = OrderSend("EURUSD", OP_SELL, 0.01, Bid, 3, 0, 0, "", 0, 0, clrRed);
         if(ticket > 0) break; 
      }
      Sleep(123); 
   } 
}
//+------------------------------------------------------------------+

しかし、最初のオプションは、チャート上に投げ、「スタンバイ」する必要があると思われるときに自動売買ボタンを押せば、明確に機能するはずです。

トレードをしたいのであれば、そのように書くべきでしょう。

void OnTick()
{
   if(ticket < 0) SendMyOrder();
   if(ticket > 0) ExpertRemove();
}
 
Igor Makanu:

がベストな選択ではないのですが・・・。ならせめて

しかし、最初のオプションは、チャート上に投げ、「スタンバイ」する必要があると思われるときに自動売買ボタンを押せば、明確に機能するはずです。

トレードをしたいのであれば、そのように書くべきでしょう。

お疲れ様
 

素晴らしいヴァリアントのテストは続いています。ウラジミールとイゴールの変種は、かなり速いことがわかった。実際にやってみると、Expert Advisorを使ったときよりも、クイックバイボタンをクリックしたときのほうが、トレードが早く成立することがわかった。もう一つ不思議なのは、Expert Advisorでどのペアを1つずつ開くかを指定すると、1つずつ非常にゆっくりと開くことです...そして、各チャートに7つのExpert Advisorを設定すると(より負荷なく)、逆に、すべての取引が順番ではなく、注文間の遅延なく瞬時に開きます(それでも、最初は半秒か1秒のギャップがあります)。

チャート上のボタンを 試したい、マニュアルを見つけたが、座標とかの説明しかない。ディールを開くには、"button "スクリプトのどこにコードを書けばいいのでしょうか?チャート上でそれをクリックすると、取引が開始されました。MT標準のクイック売買ボタンのように。

あるいは、注文のバスケットを開くためにトレードパネルをアップグレードする方法は?

 
よろしくお願いします
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2019.10.14
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Ivan Butko:

チャート上のボタンを 試したい、マニュアルを見つけた。

マニュアルは探さず、ボタンを描きました )))

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
input string   sym1 = "EURUSD";
input string   sym2 = "GBPUSD";
input string   sym3 = "USDCAD";
input string   sym4 = "USDJPY";
input string   sym5 = "AUDUSD";
#include <Controls\Button.mqh>
CButton ButtonSend;

string sym[5];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   sym[0] = sym1;
   sym[1] = sym2;
   sym[2] = sym3;
   sym[3] = sym4;
   sym[4] = sym5;
   ButtonSend.Create(0, "ButtonSend" + _Symbol, 0, 10, 50, 100, 90);
   ButtonSend.Color(clrRed);
   ButtonSend.Text("Kill Forex!");
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   static int ticket[5] = {-1, -1, -1, -1, -1 };
   if(ticket[0] > 0 && ticket[1] > 0 && ticket[2] > 0 && ticket[3] > 0 && ticket[4] > 0) return;
   if(ButtonSend.Pressed())
     {
      ButtonSend.Pressed(false);
      Print("Start OrderSend()");
      while(!IsStopped())
        {
         if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())
           {
            RefreshRates();
            for(int i = 0; i < 5; i++)
              {
               if(sym[i] == "") ticket[i] = INT_MAX;
               if(ticket[i] > 0) continue;
               ticket[i] = OrderSend(sym[i], OP_SELL, 0.01, SymbolInfoDouble(sym[i],SYMBOL_BID), 3, 0, 0, "", 0, 0, clrRed);
              }
           }
         if(ticket[0] > 0 && ticket[1] > 0 && ticket[2] > 0 && ticket[3] > 0 && ticket[4] > 0)  break;
         Sleep(123);
        }
     }
  }
//+------------------------------------------------------------------+

シンボルの設定は""になる場合は、このシンボルで0.01ロットを開かないでください、ロットの設定は、誰が行うになります見ていない、学ぶ方法についてのトピックとして、行っていない、必要に応じて自分自身を添付してみてください;)

 
Igor Makanu:

マニュアルは探さず、ボタンを描きました ))))

シンボルが""に設定されている場合は、このシンボルの0.01ロットを開いていない、ロットの設定は、誰が行うになります見ていない、学ぶ方法についてのトピックとして、行っていない、必要に応じて自分自身を添付してみてください;)。

イゴールさん、どうもありがとうございました!迅速かつ的確な回答でした。

やってみる

 
Igor Makanu:

不思議なことに、あるEAでは、指定した通貨ペアごとに次々とトレードを開いていくのですが...。を時間差で表示します。そして、異なる通貨ペア(シンボル(0))の5つのチャートに置くと、オートトレードを押したときに5つのトレードが同時に瞬時に開く。

何が原因なのか、どうすれば直るのか、提案してもらえますか?1つのEAと1つのチャートにすべてを集約する(オリジナル版のように複数のEAで「オートトレード」を起動したときと同じように、チャート上のボタンで すべてのペアを素早く開くことができるようにする)。