何がいけないんですか? - ページ 5

 
sss2019:


わーありがとうございます!この方法の方が汎用性が高い気がします。

ところで、OrderSendはオーダーチケットのみを送信するとのことですが、EAではどのようにオーダーがオープンされたことを宣言するのでしょうか?もしかしたら、OrderSelectを使って実装できるかもしれませんね。


初期化ブロックの前に、オーダーチケットを格納する変数を宣言しておきましょう。例えば、こんな感じです。

int チケット

start()関数の中で、OrderSend()を呼び出す 前に、こう記述しています。

チケット=-1。

OrderSend()関数は注文のチケットを返すので、Ticket変数が0より大きければ、注文が成立していることを確認します。そうでなければ、注文はありません。OrderSendのリファレンスを参照してください。そこには、注文を設定できない場合、この関数はティックではなく値=(-1)を返すと書かれています。次のティックでは、最初にvalue = -1で初期化され、オーダーが設定されていないため、コードは終了するまで変数は負のままです。そして、これは新しい注文が入るまで続きます。

 
苦労しているので、例を示していただけませんか。
 
sss2019:
苦労しているので、例を示していただけませんか。
#property copyright ""
#property link      ""

int Ticket;
//+------------------------------------------------------------------+
//|                  Блок инициализации                              |
//+------------------------------------------------------------------+
int init(){
        return(0);
}
//+------------------------------------------------------------------+
//|                  Блок деинициализации                            |
//+------------------------------------------------------------------+
int deinit(){
        return(0);
}
//+------------------------------------------------------------------+
//|                  Старт работы советника                          |
//+------------------------------------------------------------------+
int start(){
        Ticket=(-1);
        
        if(если есть торговый сигнал){
                Ticket=OrderSend();
        }
        if(Ticket>0){// тикет более нуля - ордер встал
                // выполняем какие-то действия
        }
        return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+
 

なぜTicket=(-1);が括弧内にあるのですか?

注文が開いてるのにチケットが-1ってどういう了見だ。

//+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern int MaFastPeriod = 30;
extern int MaSlowPeriod = 90;
extern int StopLoss = 25;
extern int TakeProfit = 50;

int Ticket;
int init()
  {

  }



int deinit()
  {

  }

int start()
  {
  Ticket=(-1);
  double MyPoint = Point;
   if(Digits == 3 || Digits == 5)
      {
      MyPoint = Point * 10;
      }
      
double MaFast0 = iMA(Symbol(),0,MaFastPeriod,0,MODE_EMA,PRICE_CLOSE,0);
double MaSlow0 = iMA(Symbol(),0,MaSlowPeriod,0,MODE_EMA,PRICE_CLOSE,0);
   
   if(OrdersTotal() == 0 && MaFast0 > MaSlow0 && Ticket==(-1))
      {
      Ticket=OrderSend(Symbol(),0,0.1,Ask,30,Ask-StopLoss*MyPoint,Ask+TakeProfit*MyPoint,"CommentA",0,0,Green);
      return(Ticket);
      }
  Alert("Ticket = ",Ticket); 
   return(0);
  }
 
なぜ書くのですか? だから、プログラムはそれ以上進まず、アラートも表示されないのです
return(Ticket);?
 
アラートウィンドウは、ポジションを開く ためのシグナルが全くなかった場合にのみポップアップし、必然的に-1が表示されることが判明しました。
 
つまり、一度注文がTicket変数に番号を割り当てたら、returnで出力する必要はなく、次のtickでさらに変数が削除されることはないのですね。
 

同時に複数の注文を出すことは可能ですか?例えば、こんな感じです。

if(условие выполнено)
{
OrderSend()
OrderSend()
OrderSend()
}
 
sss2019:

同時に複数の注文を出すことは可能ですか?例えば、こんな感じです。

最初のリクエストはサーバーで処理され、次のリクエストはエラーになるため、そのように動作しない場合があります。エラー 処理を施した独自のオーダーを使用するのがよいでしょう。
 
sss2019:

同時に複数の注文を出すことは可能ですか?例えばこんな感じ?


一度に全部は無理です。

連続のみ。