文章 "针对初学者以 MQL5 编写“EA 交易”的分步指南" - 页 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:
   {
     // 日期 2 到达时关闭位置
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket, ... ) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}

当日期 1 出现时,我们打开一个仓位,当日期 2 出现时,我们关闭它,之后我们什么也不做,直到重新启动。

[删除]  
Grenjohn:

有些东西已经停止与图表连接,请告诉我将 sl 和 tp 价格正常化意味着什么?

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

非常感谢大家的帮助和耐心等待,但不幸的是,到目前为止,它还不起作用!?

我想添加一个智能交易系统,但它没有被添加!?

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:
   {
     // 日期 2 到达时关闭位置
     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:

非常感谢大家的帮助和耐心等待,但不幸的是,到目前为止,它还不起作用!?

我想添加一个智能交易系统,但它没有被添加!?


这意味着您创建的不是智能交易系统,而是一个指标。

通过向导 创建一个新的EA,然后只替换 OnStart 函数的代码和所有全局变量/外部参数。

[删除]  
komposter:

这意味着您创建的不是智能交易系统,而是一个指标。

通过向导 创建一个新的EA,只替换 OnStart 函数的代码和所有全局变量/外部参数。

最有可能的情况是,他创建了一个智能交易系统,但使用的是 OnStart() 函数,该函数只适用于脚本。
[删除]  
Grenjohn:

非常感谢大家的帮助和耐心等待,但不幸的是,到目前为止,它还不起作用!?

我试图添加一个智能交易系统,但它没有被添加!?


在 MQL4 中创建一个新的智能交易系统,复制现有代码并替换以下行

void OnStart()

替换为

void OnTick()

这是为了以防万一,您想创建 一个智能交易系统。如果您想创建一个脚本,请创建一个新脚本,然后完全复制现有代码,不做任何更改(尽管在基于时间的交易中,脚本没有任何意义)。

 
来自文章:
Новый бар характеризуется величиной тикового объема, равной 1, если он больше 1, то выполнение функции OnTick завершается.

符合上述描述的代码在哪里?是我不明白,还是代码中没有这样的内容?