任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 198

 
Atlis:

下午好。

请告知如何实施以下措施。

价格在1.9047和1.9080之间移动(数字是任意的)。如果下一根蜡烛的开盘价超出了这个范围--发出警报。如果没有--等待下一根蜡烛。就这样,直到价格离开这个范围。

预先感谢你。


   if (Open[0]<1.9047) Alert("Цена ниже заданного диапазона");
   if (Open[0]>1.9080) Alert("Цена выше заданного диапазона");
这只是一个概念。如果满足条件,每一个刻度 都会有警报。
 

这里有一段代码,其中的数据随后被用于分析。

   if (CurTime() == tm2)              //tm1 и tm2 - заданное время
   {
   //ObjectCreate("line2",OBJ_VLINE,0,tm1,0);
   price1=iHigh(Symbol(),PERIOD_M30,1);
   //ObjectCreate("highLine",OBJ_HLINE,0,0,price1);
   price2=iLow(Symbol(),PERIOD_M30,1);
   //ObjectCreate("lowLine",OBJ_HLINE,0,0,price2);
   Alert("price1=",price1);
   Alert("price2=",price2);
   }

也就是说,进一步的代码将看起来像这样。

 if (Open[0]<price2) Alert("Цена ниже заданного диапазона");
 if (Open[0]>price1) Alert("Цена выше заданного диапазона");

而这里的问题是:我们应该如何放置,放在哪里?如果在条件内,将不打印警报,如果在条件外,警报将在每个刻度 上打印。

我为我的问题措辞不正确而道歉。

 
Atlis:

这里有一段代码,其中的数据随后被用于分析。

也就是说,进一步的代码将看起来像这样。

而这里的问题是:我们应该如何放,放在哪里?如果在条件内,将不打印警报,如果在条件外,警报将在每个刻度上打印。

我为我的问题措辞不正确而道歉。

如果你把时间检查条件放在里面,只有当价格超出范围限制时才会出现价格警报
 
谢谢,我想我已经解决了这个问题。但还有一个问题:现在,警报从给定的时间间隔开始输出,当超出范围时,直到 "停止 "为止。有什么办法在第一个值满足条件时停止这种 "搜索 "吗?
 
Atlis:
谢谢你,我已经把它整理出来了。这里还有一个问题:现在的警报是从指定的时间间隔开始,当超过这个范围,直到 "停止 "时才产生警报。当第一个值满足条件时,我能否以某种方式停止这种 "搜索"?

那么,你需要了解在一段时期内一直真实存在的主要条件。例如--比较时间。在发出所有警报后,你需要给你与之比较的变量分配一个新的值,即当前时间。寻找一个定义新栏的函数。它的构造概念应该对你有帮助。

在这里 读过吗?

 

我如何知道下挂单 时与市场的最小距离?

 
Elektronik:

我如何知道下挂单时与市场的最小距离?

int level=MarketInfo(Symbol(), MODE_STOPLEVEL)。

如果StopLevel为零,那么很可能level=MarketInfo(Symbol(), MODE_SPREAD)*2。

阿尔帕里肯定是用双倍差价作为StopLevel。

要确定距离,请阅读这里

 

谢谢artmedia70

 
artmedia70:

好了,很久没有答案了,我给你一个提示:当从isCloseLastPosByStop()函数返回真值时,再返回一个值,即找到的最后位置的手数。

如何做?通过引用向函数传递一个变量,在这个变量中,你将在函数本身中写入手数大小。要做到这一点,你需要稍微修改函数isCloseLastPosByStop()

如果你什么都不懂,那就找一个能返回最后一次平仓的手数的函数。或者你可以自己做一个。并使用它,但这比将批号值与真值一起传递更费事。

我已经改变了这个函数,使其不再是True函数,而是返回一个变量lot,在这个函数中我写了lot的大小。

一切都在编译,但订单却没有打开。

2013.10.23 20:57:46 2011.02.24 16:25 GMT EURUSD,M5:OrderSend error 4051

2013.10.23 20:57:46 2011.09.22 22:20 WEDNING EURUSD,M5: OrderSend函数 的无效手数

if(isCloseLastPosByStop ()== lot )         //если последний ордер закрылся по стопу
{
P=lot*2;                                      //открыть ордер объемом = объему закрытому по стопу ордеру умноженному на 2                                  
OrderSend(Symbol(),OP_SELL,P,Bid,1,Ask+1500*Point,Ask-300*Point,"jfh",123 );
}
else                                         //если последний ордер закрылся не по стопу
{

P=0.1;  
OrderSend(Symbol(),OP_SELL,1,Bid,P,Ask+1500*Point,Ask-300*Point,"jfh",123 );   //открыть ордер обычным объемом 0.1
}
   return(0);
  }
//============================================================  
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp,lot, osl;                                             // добавил переменную - количество лотов в оредере
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl)
    lot=OrderLots( ) ;                              //добавил вычисление количества лотов в ордере который закрылся по стопу.
    return(lot);                                    // вместо возвращаемого функцией значения True вставил переменную lot со значением количества лотов
  }
  return(False);
}

请告诉我我的错误是什么。

谢谢你。

 
solnce600:

我改变了这个函数,使其返回的不是True,而是一个变量lot,其中我把lot大小写在了函数本身。

所有编译,但订单没有在日记中打开说。

2013.10.23 20:57:46 2011.02.24 16:25 PM EURUSD,M5:OrderSend error 4051

2013.10.23 20:57:46 2011.09.22 22:20 WEDNING EURUSD,M5:OrderSend函数的无效手数

请告知我的错误是什么。

谢谢你。


通过stop确定最后关闭位置 的函数有一个bool类型,而你试图返回的是double类型。相应地,它返回0或1。

我写道,我们应该在其中增加一个变量的引用传递。

//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy, int op, int mn, double &ll) {
   double   pt;
   int      t, dg, i, j=-1, k=OrdersHistoryTotal()-1;

   for (i=k; i>=0; i--) {
     if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderMagicNumber()!=mn)   continue;   // если магик не тот, переходим к следующему
         if (OrderSymbol()!=sy)        continue;   // если символ не тот, переходим к следующему
         if (OrderType()!=op           continue;   // если тип не тот, переходим к следующему
         if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            j=i;
            }
         }
      }
   if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
      dg=MarketInfo(OrderSymbol(), MODE_DIGITS);      // количество знаков в цене символа ордера
      pt=MarketInfo(OrderSymbol(), MODE_POINT);       // размер пункта инструмента в валюте котировки ордера
      if (MathAbs(OrderClosePrice()-OrderStopLoss()<0.5*pt)) { // Если закрыт по стопу
         ll=OrderLots();                              // записываем количество лотов в ордере, закрытом по стопу
         return(true);                                // возвращаем истину
         }
      }
   return(False);                                     // возвращаем ложь (позиции нету, либо не по стопу)
}
//+----------------------------------------------------------------------------+

现在检查一下最后一个Buy,比如说。

//+----------------------------------------------------------------------------+
double Lot=MarketInfo(Symbol(), MODE_MINLOT);            // задаём минимальное значение переменной
if (isCloseLastPosByStop(Symbol(), OP_BUY, Magic, Lot)) {// в переменную Lot будет записано значение лота закрытой позиции
   // Если последний закрытый Buy закрыт по стопу
   Lot= //... эта переменная содержит размер лота закрытой позиции, выполняете нужные вычисления с этой переменной
   }
//+----------------------------------------------------------------------------+

像这样...