这有什么不对吗? - 页 5

 
sss2019:


哇,谢谢你,我认为这种方法更有通用性。

顺便问一下,如何在EA中声明订单已被打开,据我所知,OrderSend只发送订单票。也许,这可以用OrderSelect来实现?


在初始化块之前,我们声明一个变量,它将携带订单票。比如说。

int 票。

在start()函数中,在调用OrderSend() 之前,我们写道。

票=-1。

由于OrderSend()函数返回订单的票据,那么我们检查Ticket变量是否大于0,那么订单就已经下达了。否则,我们就没有订单--见OrderSend参考--那里写到,如果不能设置订单,该函数将返回值=(-1),而不是一个刻度。在下一个嘀嗒声中,由于该变量首先被初始化为值=-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:

是否可以同时开几个订单?比如说像这样?


你不能一下子就做完。

只有连续的。