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

 
hoz:

目前,任务如下:fastMa 已经向上越过了slowMa......。所以我们正在寻找购买的地方。然后我们等待价格,即Ask(因为我们考虑买入)达到fastMa( 嗯,我想不会有准确的值,我们需要+-一些偏差,这由i_thresholdFromMa 改变,一旦价格达到fastMa +- i_thresholdFromMa ,专家顾问应该在(fastMa + buyHear * pt) 设置BUYSTOP

我想出的办法在一个终端中不起作用,在另一个终端中也不一定起作用。总的来说是有问题的。

这里是buyHear函数的最后一个变体。

以下是输入参数。

在截图上可以看到错误(在OrderSend()中,价格被送入红色魔杖上方,而截图上看到的订单低于....)。

已经离开几天了...我想知道--同样的参数,在图表上抛出的魔杖是否与计算中使用的魔杖一样?也许那就是狗被埋葬的地方?

(我仍然没有时间深入研究代码并把它拆开)。

我会做一个函数,比如说。

//-----------------------------------------------------------------------------+
double ma(int MAperiod, int MAmethod, int MAshift) {return (iMA(Symbol(), Period(), MAperiod, 0, MAmethod, PRICE_OPEN,MAshift));}
//-----------------------------------------------------------------------------+

并调用它来获得参数

 

你好,能否请你指点迷津?买入的指标信号已经触发,我只有在确认接下来的两根蜡烛向上时才会开单。

 
Top2n:

你好,能否请你指点迷津?一个指标信号触发了买入,我只有在确认接下来的两根蜡烛向上时才开单。


所以要检查最后两根蜡烛的涨幅和两个柱子前的开单条件,同时要检查。
 
Roger:

因此,请检查最后两个蜡烛图,以及同时在两个柱子后面开立订单的条件。

我如何做呢?

 if (bay_min == true) сработал сигнал на покупку ждем подтверждение
  
 if (Open[1]<Close[1] && Open[2]<Close[2] )
   
 if (Bars(2).............


如果是这样,信号被触发后等待确认,只有在一个柱状物上升或下降2个柱状物后才会触发。

我们需要它记住信号上的条形图,信号后的条形图,比较它们是否是上升或下降的,然后.....

 
Top2n:

我如何做呢?


如果信号起作用,我们就等待确认,但在条形图上升或下降之后。

它应该记住信号上的条形,信号后的条形,比较它们是上升还是下降,然后.....。

显示你如何得到bay_min。
 
Top2n:

我如何做呢?


如果信号起作用,我们就等待确认,但在条形图上升或下降之后。

它应该记住信号上的条形,信号后的条形,比较它们是上升还是下降,然后.....。



if (bay_min == true)   datetime T=Time[0] //сработал сигнал на покупку запоминаем время  бара

if(iBarShift(NULL,0,T)==2) //по времени, сигнал был на 2 баре
   {   
  if (Open[1]<Close[1] && Open[2]<Close[2] )   //и эти бары бичьи 
     { 
    // что-то делаем
     }
   }
   
// я думаю, как-то так.
 
向专家顾问提问

我正在编写一个简单的专家顾问,遇到了很多问题。

条件是

我记住了当前条形图的收盘价,并将其输入到变量Startprice中,如果前4个条形图是在滑动条形图中。


如果条件得到满足,那么就画一个图标,显示该条的收盘价,即Startprice。

我得到的结果是,图标被画出来了,但只有一次,而我每次都需要它。

在0.00001处,条形图的收盘价与Startprice的价格不一致。 为什么,我该如何解决?

试过四舍五入和修剪到5位数都没有帮助(

在日志中使用打印我称之为Startprice的值,只显示4位数以下的数字。

如何实现与终端的数据窗口中一样的精度?

这个小数点的问题也适用于滑块本身。如果你通过打印调用它的值,你就不能在日志中得到超过4位数的数据。



#property copyright "Zuly"


 extern int MA_Period = 50; //периуд Ма
extern int MA_Method =MODE_SMA;     //Метод усреднения скользящего среднего. Может быть любым из значений методов скользящего среднего (Moving Average):
                              //*MODE_SMA 
                              
 extern int Maximum_History = 0;         //Ограничение истории для расчетов, если 0 то расчет всей истории
 
   
    
   //начало кода советника
int start()


{      
    double MA4;                                // Значение МА на 4 баре 
    
    double Startprice;
    
   { 
   MA4=iMA(NULL,0,MA_Period,0,MA_Method,PRICE_CLOSE,4); 
 
   
                       if  (Low[4]< MA4 && MA4 < High[4]) //условия если 4-я свеча лежит в скользящей
  
  {    
  
   Startprice=Close[0];
  
    //   Startprice=NormalizeDouble(Close[0],5); // пробуем округлить до 5-го знака, не помогло 
 
    //  Startprice=MathFloor(Close[0]*100000)/100000; // пробуем обрезать до 5-го знака не помогло
      
  
  
     
      //Print (Startprice); // распечатаем Startprice
     
      
   datetime TmR1=Time[0]; // запоминаем время текущего бара? 

   

   
       ObjectCreate("Rep1",OBJ_ARROW, 0, TmR1, Startprice); // создаем обьект 
      ObjectSet("Rep1", OBJPROP_COLOR, White); // устанавливаем обьект на график
       ObjectSet("Rep1", OBJPROP_ARROWCODE,71); 
      
     return(0); 
 
 
 
}} }    
   
测试参数和时间
 
使用DoubleToStr(number,Digits)来输出。你可以不写数字,而写你想要的精确度。在图标名称中加入你要设置图标的时间吧。
 
artmedia70:
使用DoubleToStr(number, Digits)进行输出。你可以写出你想要的精确度,而不是Digits。在图标名称中加入你要设置图标的时间吧。


如果是这样

Startprice=DoubleToStr(Close[0],5);

它不工作,它责备'='--不兼容的类型 C:\fortest\experts\sve.mq4 (34, 14)

我怎样才能正确书写?

谢谢你的答复,我已经为这个问题纠结了一个星期了 )

 
artmedia70:
使用DoubleToStr(number, Digits)。而不是数字,你可以输入你想要的精度。在你设置图标的地方,将条形时间加入图标的名称中。

但对于输出,我理解打印机只打印4位或更少的数字。

那么如果打印(DoubleToStr(Startprice,5)); //打印 Startprice

它给出了5。

但这里是如何添加酒吧的时间。

这一行并没有加上酒吧的时间?

  datetime TmR1=Time[0];