[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 403

 
mersi:
下载历史,问题就会消失

你如何下载它?
 
kolyango:

我的理解是正确的。

具体实施与你的条件有很大关系。

一个标志只是一个变量,其中存储着状态。粗略地说,它可以被提高或降低。在此基础上,实施你的逻辑。

 
w_ersoc:

您能告诉我们如何为专家顾问编写一个正确的条件,以便在指定的时间框架内新的条形图打开时触发一次吗?:(

你可以想出不同的变体,它经常使用这种条件。

int start()
static datetime dtBar;
//.................
if(Time[0]==dtBar) return(0);//…проверим открытие новой свечи
dtBar=Time[0]; //(тот же Бар-возврат)(новый-продолжение...)
// 
 
splxgf:

具体实施与你的条件有很大关系。

一个标志只是一个变量,条件被储存在其中。粗略地说,它可以被提高或降低。在此基础上,实施你的逻辑。


那么,我的观点对吗?

我的理解是正确的。

1.如果条件1被满足,那么Flag_SSSR1被赋予一个真值,我们立即开始检查条件2

2. 如果条件2被满足,那么真值被分配给标志Flag_CCP2;如果不满足,那么它是一个假标志,在下一个刻度上

我们不再检查条件1,而是直接进入条件2,以此类推,直到条件2得到满足,并且它的值为真。

3.然后我们检查condition3和Flag_USSR2(在USSR2中我们到底检查什么,是真还是假,还是什么?)

这是否正确?在测试器中没有一个交易...虽然如果是正确的话应该有。什么是错的......?

static bool Val_max, Cl_dn, Val_min; //static or global
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int
   i, j, total,
   cnt,
   OrderBuy,
   OrderSell,
   Magic,
   Ticket,                                      // Номер ордера
   Total=0,                                     // Количество ордеров в окне
   Tip=-1;                                      // Тип выбран. ордера (B=0,S=1)      
   double
   Open_0,
   ask,
   bid,
   Price,                                       // Цена выбранного ордера
   SL,                                          // SL выбранного ордера
   TP,                                          // TP выбранного ордера
   Lot;                                         // Колич. лотов в выбран.ордере
   Open_0=Open[0];                             // Цена откр. формирующегося бара
   ask=Ask;                                    // Текущая цена покупки
   bid=Bid;                                    // Текущая цена продажи
   string
   Symb;                                        // Название финанс. инструмента
   Symb=Symbol();                               // Название фин.инстр.
double Value_max=1.0000;
double Value_min=0.9980;
double Open_1= Open[1];
double Close_1= Close[1];
//----

//--------------------------------------------------------------- 4 --

double Val=iCustom(NULL, 0, "HMR MULTI Indicator",0,0);   
if (Val >= Value_max) Val_max=true;                  // 
if (Open_1 > Close_1) Cl_dn=true;
if (Val <= Value_min && Cl_dn==true) Val_min=true;
if (Val_max==true && Cl_dn==true && Val_min==true)
  {
   for (j = 0; j < OrdersTotal(); j++)
    {
     OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol() == Symbol())
      {
      if (OrderType() == OP_SELL) return(0);
      }
    }

   OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),2,Bid+400*Point,Bid-400*Point,"",3,Red);  // Открытие SELL
   Val_max=false; Cl_dn=false; Val_min=false;
  }

//----
   return(0);
  }
 

你好!

我设定了一个目标,将同时开仓的 数量限制在1个。

用变量Open/Close level = 3/2乘以Point,放在open/close位置条件下,我试图解决这个任务,但没有成功。

请帮助我解决这个问题 :)

 
kolyango:


这是正确的做法吗?在测试器中没有一个交易...虽然如果是正确的话应该有。怎么了......?

现在,再次用正常语言完整地写出这些条件,你就可以纠正代码了...信号的好处是,它们应该有一个到期日和取消。
 
skyjet:

你好!

我已经设定了一个目标,将同时开放的头寸限制在1个。

如果(OrdersTotal()> 0)返回。

或者用符号进行变体,抛出挂单。

 

也就是说,在我的版本中

如果(OrdersTotal()> 1)返回。

?

 
splxgf:
现在,再次用正常语言完整地写出这些条件,你就可以纠正代码了...信号的好处是,它们应该有一个到期和取消的期限。

所有这些条件可能不会同时出现(可能是在一小时、两小时或三小时之后),所以我们需要使指标一达到1.0000,这个条件就不会在每个tick上被检查,而要等到有一个bar以下跌收盘,之后这两个条件就不会在每个tick上被检查,而要等到指标达到0.9980或以下。一旦所有条件得到满足,我们就开出一个市场订单,卖出 0.1手,止损400便士,获利400便士。
 
skyjet:

也就是说,在我的版本中

如果(OrdersTotal()>1)返回。

?

最好还是第一种选择,在试图打开一个订单之前下单(OrderSend)。