[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 270

 
hoz:


我不是说不需要fi_Ticket 这个参数,而是说为什么默认情况下它被设置为0(零)。我就会这样做。

我再复制一下源代码。

该功能允许通过一个工具(不与订单绑定,例如,在开立订单之前)和相同的,但与特定订单(当它后面有一个订单)一起获得交易信息。为了方便使用该功能,使用了默认值。fi_Ticket的 负值在初始化交易库时使用。

P.S. 首先,要注意变量的名称,更确切地说,要注意其前缀。具有初始b 的变量,如bs_symbol,从库中全局声明。大多数全局变量 是在b-PSI@Base中声明的。

 

请看EA代码,搞不清楚原因是什么....。在第一次启动时,它可以立即打开交易,但在关闭后,它停止工作,直到下一个终端重新启动或开/关允许EA进行交易...与江恩2.0指标一起工作

extern string     s0                = "Setup: Main";
extern int        Magic             = 1121;
extern double     lots              = 0.1;
extern int        StopLoss          = 70;
extern int        TakeProfit        = 140;
extern bool       UseTrail          = true;
extern bool       TrailWhileMinus   = false;
extern int        Trail             = 70;

extern string     s1                = "Setup: GANN indicator";
extern bool UseBeginDate = false;
extern string BeginDate = "2010.01.01 00:00";
extern int nBarsBack = 120;//250;
extern string prices = "0=close, 4=median, 5=typical";
extern int Price_Mode = 5;
extern bool Show_GridMatrix = false;
extern bool Show_GannGrid = false;
extern bool Show_HiloArrows = true;
extern bool Show_PriceArrows = true;
extern bool Show_Comments = false;
extern string ____MainGrid____ = "ooo";
extern color MainGrid_Color = Silver;//Green;//Sienna;
extern int MainGrid_Style = STYLE_DOT;
extern int MinMaxGrid_Style = STYLE_SOLID;
extern int MainGrid_Width = 1;
extern int fontSize = 8;
extern bool Draw_AllGrids = false;
extern bool Draw_AdditionalGrids = false;
extern string ____GannGrid____ = "ttt";
extern color GannGrid_Color = Silver;//Gray;
extern int GannGrid_Style = STYLE_DOT;
extern int GannGrid_Width = 177;
extern string ____Default_GridParameters____ = "Recomanded GridInterval 35 or 36";
extern int MainGrid_Intervals = 3677;   //default=35(!)
extern double GannGrid_Interval = 8.0;//with default 8.5 is the time interval not OK; and 9 is too large
extern int Text_Shift = 50;

//s1, UseBeginDate, BeginDate, nBarsBack, prices, Price_Mode, Show_GridMatrix, Show_GannGrid, Show_HiloArrows, Show_PriceArrows, Show_Comments, ____MainGrid____, MainGrid_Style, MinMaxGrid_Style, MainGrid_Width, fontSize, Draw_AllGrids, Draw_AdditionalGrids, ____GannGrid____, GannGrid_Style, GannGrid_Width, ____Default_GridParameters____, MainGrid_Intervals, GannGrid_Interval, Text_Shift

int               slip              = 3;

int Ticket[1000];

void deinit() 
{
   SemaphoreDeinit("TRADECONTEXT");

   return(0);
}


int start()
{
   static datetime TimeFlag = 0;
   datetime        TimeLast = Time[0];
   if(TimeFlag < TimeLast)
   {
      TimeFlag = TimeLast;
      
      int GANN = GetSignal_GANN();
      
      AnalyzeSignals(GANN);
      
      if(UseTrail == true) TrailAllOrders();
   }
   return(0);
}



void AnalyzeSignals(int GANN)
{
   static int ticket = 0;
   int sig = -1;
   bool res;
   
   ticket = RefreshTicket(ticket);
   
   if(GANN == OP_BUY)
      sig = OP_BUY;
   else if(GANN == OP_SELL)
      sig = OP_SELL;   

   if(ticket != 0)
   {
      OrderSelect(ticket, SELECT_BY_TICKET);      
      int type = OrderType();
      
      if(sig == OP_BUY && type == OP_SELL)
      {
         SemaphoreTake("TRADECONTEXT"); 
         res = OrderClose(ticket, OrderLots(), Ask, slip);
         SemaphoreReturn("TRADECONTEXT");
         if(!res) {Alert("OrderClose Error: ", GetLastError());}
         else ticket = 0;
      }
   
      else if(sig == OP_SELL && type == OP_BUY)
      {
         SemaphoreTake("TRADECONTEXT"); 
         res = OrderClose(ticket, OrderLots(), Bid, slip);
         SemaphoreReturn("TRADECONTEXT");
         if(!res) {Alert("OrderClose Error: ", GetLastError());}
         else ticket = 0;
      } 
   }   
   
   
   if(ticket == 0)
   {   
      double _lot = lots;
   
      if(sig == OP_BUY)
      {
         SemaphoreTake("TRADECONTEXT"); 
         ticket = OrderSend(Symbol(), OP_BUY, _lot, Ask, slip, Bid - StopLoss*Point, Bid + TakeProfit*Point, NULL, Magic);
         SemaphoreReturn("TRADECONTEXT");
         if(ticket < 0) {Alert("OrderSend Error: ", GetLastError());}
      }
   
      else if(sig == OP_SELL)
      {
         SemaphoreTake("TRADECONTEXT");
         ticket = OrderSend(Symbol(), OP_SELL, _lot, Bid, slip, Ask + StopLoss*Point, Ask - TakeProfit*Point, NULL, Magic);
         SemaphoreReturn("TRADECONTEXT");
         if(ticket < 0) {Alert("OrderSend Error: ", GetLastError());}
      }
   }
}

int RefreshTicket(int ticket)
{
   bool res;
   
   if(ticket <= 0)
      return(0);
   else
   {
      res = OrderSelect(ticket, SELECT_BY_TICKET);
      if(!res)
         return(0);
      else if(OrderCloseTime() != 0)
         return(0);
   }
   
   return(ticket);      //all ok, ticket still valid
}

int GetSignal_GANN()
{
   //Alert("!!: ", s1, ";", UseBeginDate, ";", BeginDate, ";", nBarsBack, ";", prices, ";", Price_Mode, ";", Show_GridMatrix, ";", Show_GannGrid, ";", Show_HiloArrows, ";", Show_PriceArrows, ";", Show_Comments, ";", ____MainGrid____, ";", MainGrid_Color, ";", MainGrid_Style, ";", MinMaxGrid_Style, ";", MainGrid_Width, ";", fontSize, ";", Draw_AllGrids, ";", Draw_AdditionalGrids, ";", ____GannGrid____, ";", GannGrid_Color, ";", GannGrid_Style, ";", GannGrid_Width, ";", ____Default_GridParameters____, ";", MainGrid_Intervals, ";", GannGrid_Interval, ";", Text_Shift);

   double ga_up = iCustom(NULL, 0, "Gann v2.0", s1, UseBeginDate, BeginDate, nBarsBack, prices, Price_Mode, Show_GridMatrix, Show_GannGrid, Show_HiloArrows, Show_PriceArrows, Show_Comments, ____MainGrid____, MainGrid_Color, MainGrid_Style, MinMaxGrid_Style, MainGrid_Width, fontSize, Draw_AllGrids, Draw_AdditionalGrids, ____GannGrid____, GannGrid_Color, GannGrid_Style, GannGrid_Width, ____Default_GridParameters____, MainGrid_Intervals, GannGrid_Interval, Text_Shift, 
                                          4, 0);
  
   double ga_dn = iCustom(NULL, 0, "Gann v2.0", s1, UseBeginDate, BeginDate, nBarsBack, prices, Price_Mode, Show_GridMatrix, Show_GannGrid, Show_HiloArrows, Show_PriceArrows, Show_Comments, ____MainGrid____, MainGrid_Color, MainGrid_Style, MinMaxGrid_Style, MainGrid_Width, fontSize, Draw_AllGrids, Draw_AdditionalGrids, ____GannGrid____, GannGrid_Color, GannGrid_Style, GannGrid_Width, ____Default_GridParameters____, MainGrid_Intervals, GannGrid_Interval, Text_Shift, 
                                          6, 0); 

   Print("ga_up = ", ga_up);
   Print("ga_dn = ", ga_dn);
   
   if(ga_up > 0.0)
      return(OP_BUY);
   else if(ga_dn > 0.0)
      return(OP_SELL);
   else
      return(-1);   
}


int TrailAllOrders()
{
   int i, total;
   
   total = CreateTicketArray(OP_BUY, Magic);
   for(i=0; i<total; i++)
      TrailingStop(Ticket[i]);

   total = CreateTicketArray(OP_SELL, Magic);
   for(i=0; i<total; i++)
      TrailingStop(Ticket[i]);
}

void TrailingStop(int ticket)
{
   int res;
   OrderSelect(ticket, SELECT_BY_TICKET);
   
   if(OrderType() == OP_BUY)
      if(TrailWhileMinus == true || Bid-OrderOpenPrice()>Point*Trail)         //не тралим, пока не можем достичь безубытка первым переносом стопа   
         if(Bid - OrderStopLoss() > Trail*Point)
         {
            SemaphoreTake("TRADECONTEXT");
            res = OrderModify(OrderTicket(), 0, Bid - Trail*Point, OrderTakeProfit(), 0);
            SemaphoreReturn("TRADECONTEXT"); 
            if(res<0)
               Alert("TrailingStop OrderModify Error: ", GetLastError());
        }
         
   if(OrderType() == OP_SELL)
      if(TrailWhileMinus == true || OrderOpenPrice()-Ask>Point*Trail)         //не тралим, пока не можем достичь безубытка первым переносом стопа
         if(OrderStopLoss() - Ask > Trail*Point)
         {
            SemaphoreTake("TRADECONTEXT");
            res = OrderModify(OrderTicket(), 0, Ask + Trail*Point, OrderTakeProfit(), 0);
            SemaphoreReturn("TRADECONTEXT");        
            if(res<0)
               Alert("TrailingStop OrderModify Error: ", GetLastError());
         }
}

int CreateTicketArray(int dir, int SysID)
{
   int total=OrdersTotal(), i, c=0; if (total<=0) return (0);
        for(i=0;i<total;i++) { OrderSelect(i, SELECT_BY_POS); if ((OrderType()==dir) && (OrderMagicNumber()==SysID)) { Ticket[c] = OrderTicket(); c++; } }
        return (c);
}

//------------------------------------------SEMAPHORE------------------------------------------

int critical = 0; 

void SemaphoreTake(string SEM)
{ 
   if(GlobalVariableCheck(SEM) == false)
      GlobalVariableSet(SEM, 0);
  
   while(1==1)
   {
      if(GlobalVariableSetOnCondition(SEM, 1.0, 0.0))         //получили доступ
      {
         critical = 1;
         Print("SEMAPHORE \"", SEM, "\" TAKEN. CURRENT VALUE: ", GlobalVariableGet(SEM));
         break;      //выходим из цикла ожидания доступа
      }
      else
      {
         Print("ATTEMPT TO CAPTURE SEMAPHORE \"", SEM, "\" FAILED. SEMAPHORE BUSY. WAITING 0.1 SEC. CURRENT VALUE: ", GlobalVariableGet(SEM));
         Sleep(100);
      }
   }
} 

void SemaphoreReturn(string SEM)
{
   GlobalVariableSet(SEM, 0.0);
   Print("SEMAPHORE \"", SEM, "\" RETURNED. CURRENT VALUE: ", GlobalVariableGet(SEM));
   critical = 0;
}

void SemaphoreDeinit(string SEM)    //Вставить в ф-ю  deinit()
{
   if(critical == 1)
   {
      GlobalVariableSet(SEM,      0.0);    //на случай, если советника убивают, пока он в процессе посылки запроса
   }  
}
 
chief2000:
这里有一个来自文档的例子,这个命令将帮助你--弄清楚它是如何工作的,改变参数。

高[iHighest(NULL,0,MODE_HIGH,20,4)]。
Low[iLowest(NULL,0,MODE_LOW,10,10)]。


谢谢你
 
chief2000:
这里有一个来自文档的例子,这个命令将帮助你--弄清楚它是如何工作的,改变参数。

高[iHighest(NULL,0,MODE_HIGH,20,4)]。
Low[iLowest(NULL,0,MODE_LOW,10,10)]。


对不起,我的答复晚了,我的电脑出了问题。
 
chief2000:
这里有一个来自文档的例子,这个命令将帮助你--弄清楚它是如何工作的,改变参数。

高[iHighest(NULL,0,MODE_HIGH,20,4)]。
Low[iLowest(NULL,0,MODE_LOW,10,10)]。


对不起,我的答复晚了,我的电脑出了问题。
 
al7bar:

请看EA代码,搞不清楚原因是什么....。在第一次启动时,它可以立即打开交易,但在关闭后,它停止工作,直到下一个终端重新启动或开/关允许EA进行交易...与江恩2.0指标一起工作

没有看到明显的逻辑错误。请一步一步地打印代码。交易程序与票据变量的价值相联系。首先,追踪其变化。还要注意全局变量"TRADECONTEXT "的值- 其值必须为0。
 
TarasBY:

这个功能允许你获得一个工具的交易信息(不与订单挂钩,例如,在开立订单之前),同样的,但与一个特定的订单(伴随它时)。为了方便使用该功能,使用了默认值。fi_Ticket的 负值在初始化交易库时使用。

P.S. 首先,注意变量名称,或者更准确地说,它们的前缀。具有初始b 的变量,如bs_symbol,从库中全局声明。大多数全局变量是在b-PSI@Base中声明的。


伊戈尔,我理解。但问题是,按照我的理解,要获得某个符号的市场信息,我们根本不需要把它与订单联系起来。如果有文书,就不需要命令......完全没有必要。毕竟,你只需要工具的名称来获得市场信息。你不同意吗?

我问的这个变量bs_symbol 是在包含b-PSY@Base.mqh, 这里是字符串,第一次提到。

  bs_Symbol,                            // текущий инструмент

但是,没有任何东西被分配给它。然后。

if (fs_Symbol != bs_Symbol || fi_Ticket < 0)

有一种说法。

fs_Symbol != bs_Symbol

应该理解为:fs_Symbol !=0 对吗?

TarasBY:

P.S. 首先,注意变量的名称,或者更准确地说,它们的前缀。具有初始b 的变量,如bs_symbol,从库中全局声明。大多数全局变量是在b-PSI@Base中声明的。


嗯,我通常用g_ 表示全局变量(来自global 这个词)。 你用l(例如li_cnt)表示局部变量吗?
 

朋友们!我需要帮助来微调一个EA。

我们有代码可以在某些条件 下打开一个订单。条件的执行可以在每一个刻度上进行,因为它被放在int start() 的主体中。

我们需要。

1.在执行一个条件(和打开一个订单)后,我们应该暂停新的订单,暂停n 个小节。例如,如果我的专家顾问是在时间框架M30上,我需要通过3个小时,那么暂停应该是6条。

2.该程序应在策略测试器中 工作。

需要什么代码?以及在什么地方插入才是正确的。

int start()
  { 
   ...

   if (...)                                                          //условие
      {
       OrderSend(Symbol(),OP_BUY,lot,Ask,0,0,0,"Order BUY",0,0);     //открытие ордера
       ...
      }

   ...
  }
 
hoz:


伊戈尔,我理解。但问题是,按照我的理解,要想获得某一特定工具的市场信息,你根本不需要把它与订单联系起来。如果有文书,就不需要命令......完全没有必要。毕竟,你只需要工具的名称来获得市场信息。你不同意吗?

我问的这个变量bs_symbol 是在包含b-PSY@Base.mqh, 这里是字符串,第一次提到。

但是,没有任何东西被分配给它。然后。

有一种说法。

应该理解为:fs_Symbol !=0 对吗?


我通常用g_ 表示全局变量(来自global 一词),用l(如li_cnt)表示局部变量?

你仍然有很多东西要学。到目前为止,你的假设并不真实。我的函数可以同时为不同的目的服务(为了减少代码本身),特别是fGet_MarketInfo()。一切都经过反复的思考,没有什么需要改变的!

例如,从一个实验开始:在EA主体中声明一个全局变量,并尝试从链接库中调用这个变量。尝试将结果与以b 开头的变量名相联系,例如bs_symbol。

P.S. 我不需要被检查:你要么使用我的图书馆,要么不使用。如果有什么东西(我的一些图书馆)不能正确工作--请告诉我,我会纠正它。并提出问题--"为什么会这样呢?- 你需要更多的知识,因为 "明显不在表面"。

 
TarasBY:

你仍然有很多东西要学。到目前为止,你的假设并不真实。我的函数可以同时为不同的目的服务(为了减少代码本身),特别是fGet_MarketInfo()。一切都经过反复的思考,没有什么需要改变的!

我了解那里的情况。但不清楚为什么要这样实施。

TarasBY:

例如,从一个实验开始:在EA主体中声明一个全局变量,并尝试从链接库中调用这个变量。尝试将结果与以b 开头的变量名相联系,例如bs_symbol。

反正你不能以原始形式使用你的库,也就是说,所有东西都被绑定在那里。每一个功能都在一包其他人的身上...

TarasBY:

P.S. 我不需要被检查:你要么使用我的图书馆,要么不使用。如果有什么东西(我的一些图书馆)不能正常工作--让我知道,我会解决它。并提出问题--"为什么会有这样的效果?- 你需要更多的知识,因为 "明显性不在于表面"。

我并不是要以任何方式测试它...事实上,毫无疑问,它写得很有能力。只是我不太明白所有的事情,这就是为什么我说我不认为......我看,我想...但我并不是什么都明白。这就是为什么我问。

P.S. 对于bs_symbol我还是不明白。