記事"MQL5でExpert Advisorを書くための初心者向けステップバイステップガイド"についてのディスカッション - ページ 12

 

お許しください。当時はこのボタンの使い方がわからなかったのですが、今はわかるような気がします。

extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.2;
int ticket;
void OnStart()
{
datetime date1=D'2014.10.28.13.22.13';
 if(OrdersTotal()==0)
 {
 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
 }
 if (OrdersTotal()==1 && Hour( )==13 && Minute( )==23 && Seconds ( )>=00)
 {
 bool select1=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
 bool close1=OrderClose(ticket,Lots,Bid,20,Green);
 }
 return(0);
}
 
Grenjohn:

お許しください。当時はこのボタンの使い方がわからなかったのですが、今はわかるような気がします。

それは条件についてだ:

if( OrdersTotal() == 0 )

指定した日付date1が発生したかどうかのチェックが欠けているのです。もし未決済の注文がなければ、最初のティックですぐに注文を出す必要があります!つまり、ここと同じことをする必要があります、

if (OrdersTotal()==1 && Hour( )==13 && Minute( )==23 && Seconds ( )>=00)

ただし、正しい日、時、分、秒(数秒)を指定してください。

そしてもう一つ。価格slとtpは正規化されている必要があります。

 

SLとTPの価格を正常化するとはどういうことですか?

extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.3;
int ticket;
void OnStart()
{
datetime date1=D'2014.10.28.15.08.30';
 if(OrdersTotal()==0 && Hour( )==15 && Minute( )==08 && Seconds( )>=30)
 {
 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
 }
 if (OrdersTotal()==1 && Hour( )==15 && Minute( )==09 && Seconds( )>=00)
 {
 bool select1=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
 bool close1=OrderClose(ticket,Lots,Bid,20,Green);
 }
 return(0);
}
 
Grenjohn:

このボタンの使い方がよくわからなかったのですが、今はわかったような気がします。

extern datetime date1=D'2014.10.28 13:22:13';
extern datetime date2=D'2014.10.29 13:22:13';
extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.2;
int ticket = 0;

void OnStart()
{
 static int flag = 0;

 switch ( flag )
 {
   // 0 - ポジションなし
   case 0:
   {
     // date1の時刻になったら、ポジションをオープンする。
     if ( TimeCurrent() >= date1 )
     {
       if ( ticket <= 0 )
       {
         ticket = OrderSend( ... );
       }
       if ( ticket > 0 )
       {
         flag = 1;
       }
     }
     break;
   }
   // 1はポジション
   case 1:
   {
     // date2の時刻が来たらポジションを閉じる
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket, ... ) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}

date1が発生したらポジションをオープン し、date2が発生したらポジションをクローズします。

 
Grenjohn:

それはチャートに参加することを停止し、それはSLとTPの価格を正規化するために何を意味するのか教えてください何か?

https://www.mql5.com/ja/docs/convert/normalizedouble
Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

皆さん、本当にありがとうございます。

Expert Advisorを追加しようとしているのですが、追加されません。

extern datetime date1=D'2014.10.29 22:29:10';
extern datetime date2=D'2014.10.29 21:30:00';
extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.30;
int ticket = 0;
void OnStart()
{
 static int flag = 0;

 switch ( flag )
 {
   // 0 - ポジションなし
   case 0:
   {
     // date1の時刻になったら、ポジションをオープンする。
     if ( TimeCurrent() >= date1 )
     {
       if ( ticket <= 0 )
       {
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
       }
       if ( ticket > 0 )
       {
         flag = 1;
       }
     }
     break;
   }
   // 1はポジション
   case 1:
   {
     // date2の時間が来たらポジションを閉じる
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket,Lots,Bid,20,Green) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}


 
Grenjohn:

皆さん、本当にありがとうございます。

Expert Advisorを追加しようとしているのですが、追加されません。


Expert Advisorではなく、インジケーターを作成したことになります。

ウィザードから 新しいEAを 作成し、OnStart関数のコードとすべてのグローバル変数/外部パラメータのみを置き換えてください。

 
komposter:

これはエキスパートアドバイザーではなく、インジケーターを作成したことを意味します。

ウィザードから 新しいEAを 作成し、OnStart関数のコードとすべてのグローバル変数/外部パラメータのみを置き換えてください。

おそらく、Expert Advisorを作成したが、スクリプト専用のOnStart()関数を使用したのでしょう。
 
Grenjohn:

皆さん、本当にありがとうございます。

Expert Advisorを追加しようとしているのですが、追加されません。


MQL4で新しいExpert Advisorを作成し、既存のコードをコピーして、次の行を置き換えます。

void OnStart()

をクリックしてください。

void OnTick()

これはExpert Advisorを作成 する場合です。スクリプトを作成したい場合は、新しいスクリプトを作成し、そこにある既存のコードを変更せずに完全にコピーしてください(時間ベースの取引の場合、スクリプトの意味はありませんが)。

 
記事より
Новый бар характеризуется величиной тикового объема, равной 1, если он больше 1, то выполнение функции OnTick завершается.

この説明を満たすコードはどこにありますか?それとも、そのようなコードは存在しないのでしょうか?