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

 

大家好!

我研究了一个月的MQL4专家顾问,决定写一个专家顾问。 由于缺乏经验,我不想写一个新的,决定使用书中的tradingexpert.mq4模板。

该策略的精髓如下:"拉里-威廉姆斯 "高点和低点的三条系统,为高点和低点绘制两个三天的EMA,卖出

对高点买入,对低点买入。

在模板中,在全局变量 部分,我删除了extern double Rastvor =28.0;这一行(实际上不需要),也从交易标准中删除了它。

将全局变量中的MA值改为3。

Extern int Period_MA_1= 3; // Period MA 1
extern int Period_MA_2= 3; // Period MA 2

在交易标准部分,它是。

//--------------------------------------------------------------- 5 --
   // Торговые критерии
   MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_LWMA,PRICE_TYPICAL,0); // МА_1
   MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_LWMA,PRICE_TYPICAL,0); // МА_2
 
   if (MA_1_t > MA_2_t + Rastvor*Point)         // Если разница между
     {                                          // ..МА 1 и 2 большая
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (MA_1_t < MA_2_t - Rastvor*Point)         // Если разница между
     {                                          // ..МА 1 и 2 большая
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
//--------------------------------------------------------------- 
已成为。

//--------------------------------------------------------------- 5 --
//交易标准
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_HIGH,0); // MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_LOW,0); //MA_2

如果(PRICE_HIGH * Point >= MA_1_t * Point)
{
Opn_S=true。
Cls_B=true。
}

如果(PRICE_LOW * Point <= MA_2_t * Point)
{
Opn_B=true; //开放标准。买入
Cls_S=true; // 关闭标准。Sell
}
//---------------------------------------------------------------

现在问题的关键是:系统只打开卖单,但不愿意买。可能的错误是什么?

很可能在其他地方有错误,请不要苛责,而是帮助提供建议)

 
Forexman77:


//--------------------------------------------------------------- 5 --
//交易标准
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_HIGH,0); // MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_LOW,0); //MA_2

如果(PRICE_HIGH * Point >= MA_1_t * Point)
{
Opn_S=true。
Cls_B=true。
}

如果(PRICE_LOW * Point <= MA_2_t * Point)
{
Opn_B=true; //开放标准。买入
Cls_S=true; // 关闭标准。Sell
}
//---------------------------------------------------------------

现在问题的关键是:系统只打开卖单,但不愿意买。可能的错误是什么?

很可能我在其他地方有错误。 请不要评判,而是帮助我提出建议)。



这是什么? PRICE_LOW和PRICE_HIGH。它们是整数常数,其值为0或1,最高为6。

你必须使用iHigh(Symbol(),Period(),i)来获得第i条的最大BID值,使用iLow(Symbol(),Period(),i)来获得第i条的最小BID值。

如果在当前条形上翻滚,那么:如果( iHigh(Symbol(),Period(),0) >= MA_1_t) 而不需要将MA乘以Point。

 

大家下午好!

请告诉我这是什么问题。

我在Awesome 标准指标上附加了一个音量指标(Volume)。

我想组织计算总波量(从低价到高价计算,并对应于真棒的最小和最大值)。见图1。

ǞǞǞ

什么是错误,数值没有被计算在内。

下面是代码本身。

#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Red
#property  indicator_color2  SteelBlue
#property  indicator_width1  2

//---- basic fan indicator parameters

extern bool Show_AOLine_2=true;
extern int SlowEMA3=34;
extern int EMA=2;
extern bool Show_Volume=true;
extern double coaf=1.5;
extern bool Show_Vol_line=true;
//---- indicator buffers
double AOBuffer3[];
double ExtMapBuffer1[];


double VLUP;
   double prhgh_e=0, prhgh_s, prlw_e=0, prlw_s;
    datetime tmhgh, tmlw;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   //---- drawing settings
   
  string name_ind = "Awesome_super_volumes";
   IndicatorShortName("Awesome_super_volumes");
   
   
//---- AO_fan line 2 (basic)
   if(Show_AOLine_2 ==true){Show_AOLine_2=DRAW_LINE; }
   else 
    {Show_AOLine_2=DRAW_NONE; }
   SetIndexBuffer(0,AOBuffer3);
   SetIndexStyle(0,Show_AOLine_2);
   SetIndexLabel(0,"basic line");   

   SetIndexBuffer(1,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexLabel(1,"Volume");
   
  //---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
int start()
  {
  
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current;
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

//---- AO_fan line 2 (basic) buffer
   for(int i=0; i<limit; i++)
   {
     
 //---- AO_fan basic line + Volumes
     
      AOBuffer3[i]=iMA(NULL,0,EMA,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,SlowEMA3,0,MODE_SMA,PRICE_MEDIAN,i);
if (Show_Volume==true)
{
double nSum = Volume[i]*Point*coaf;
   if (AOBuffer3[i]<=0)ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]>0)ExtMapBuffer1[i] = -nSum;
}
if (Show_Vol_line==true)
{
double Vol_Arr[];


  if (AOBuffer3[i]<=0)Vol_Arr[i]=Volume[i]*Point*coaf;
  if (AOBuffer3[i]>0)Vol_Arr[i] = -Volume[i]*Point*coaf;}
//---- dispatch values between 2 buffers
   }
   
  //-- Поиск High & Time  
  if (AOBuffer3[i]>=0)
  {
  prhgh_s = High[i];
  if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];}
  }   
   
  //-- Поиск Low & Time  
  if (AOBuffer3[i]<=0)
  {
  prlw_s = Low[i];
  if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];}
  } 
  
  // -- Пересчет баров от High до Low
  int colbr = iBarShift(NULL,0,tmhgh)-iBarShift(NULL,0,tmlw);     
  
  int shift=iBarShift(NULL,0,tmlw);
  
 for (i=0; i<=colbr; i++)
{VLUP += MathAbs(iVolume(NULL,0, shift+i));}
       
  SetText("Awesome_super_volumes"+Time[i], DoubleToStr(VLUP,0), tmhgh, 0.0010, Black);     
 
//-- Эти значения должны отображаться в окне Awesome
  SetText2("Волна1",DoubleToStr(VLUP,0),980,10,Gray,10); 
  SetText2("Волна2",TimeToStr(tmlw,0),980,25,Gray,10); 
  SetText2("Волна3",TimeToStr(tmhgh,0),980,40,Gray,10);
  SetText2("Волна4",DoubleToStr(colbr,0),980,55,Gray,10);  
  
  
      
//---- done
   return(0);
  }
//+------------------------------------------------------------------+
void SetText(string name, string Vl, datetime t1, double p1, color c)
 {
 // if (ObjectFind(name)!=-1) ObjectDelete(name);
  ObjectCreate(name,OBJ_TEXT,WindowFind("Awesome_super_volumes"),0,0,0,0);
  ObjectSetText(name, Vl, 10, "Times New Roman", c);
  ObjectSet(name, OBJPROP_TIME1 , t1);
  ObjectSet(name, OBJPROP_PRICE1, p1);
  ObjectSet(name, OBJPROP_COLOR, c); 
  }
  
//--Ввeл дополнительную процедуру для отображения значений на чарте. Ее не должно быть.
  void SetText2(string name, string text, int xdist, int ydist, color c, int size) 
 {                                                                                    
  ObjectCreate(name,OBJ_LABEL,0,0,0,0,0);     
  ObjectSet(name, OBJPROP_XDISTANCE, xdist);
  ObjectSet(name, OBJPROP_YDISTANCE, ydist);    
  ObjectSetText(name,text,7,"Arial Black",c);
 }
 
Sepulca:


这是什么? PRICE_LOW和PRICE_HIGH。它们是整数常数,值为0或1,最多为6。

你应该使用iHigh(Symbol(),Period(),i)来获得第i条的最大BID值,使用iLow(Symbol(),Period(),i)来获得第i条的最小BID值。

如果在当前条形上翻滚,那么:如果( iHigh(Symbol(),Period(),0) >= MA_1_t) 而不需要将MA乘以Point。

非常感谢!!!。它的作用!!!。
 

伙计们,谁能告诉我这个代码有什么问题呢?

 
Fox_RM:

伙计们,谁能告诉我这个代码有什么问题呢?


if (Show_Vol_line==true)
{
double Vol_Arr[]; // ошибки: 1. Размещение  2. Область видимости


  if (AOBuffer3[i]<=0)Vol_Arr[i]=Volume[i]*Point*coaf;
  if (AOBuffer3[i]>0)Vol_Arr[i] = -Volume[i]*Point*coaf;}
//---- dispatch values between 2 buffers
   }
   
 
VladislavVG:


我不太明白。但在音量显示 方面没有问题。在计算体积方面存在问题。在这里的某个地方。

 //-- Поиск High & Time  
  if (AOBuffer3[i]>=0)
  {
  prhgh_s = High[i];
  if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];} // -- tmhgh - выводил это значение оно = 0;

  }   
   
  //-- Поиск Low & Time  
  if (AOBuffer3[i]<=0)
  {
  prlw_s = Low[i];
  if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];}
  } 
  
  // -- Пересчет баров от High до Low
  int colbr = iBarShift(NULL,0,tmhgh)-iBarShift(NULL,0,tmlw);    tmlw - тоже = 0; Почему?
  
  int shift=iBarShift(NULL,0,tmlw);
  
 for (i=0; i<=colbr; i++)
{VLUP += MathAbs(iVolume(NULL,0, shift+i));}
       
  SetText("Awesome_super_volumes"+Time[i], DoubleToStr(VLUP,0), tmhgh, 0.0010, Black);     
 
asdfgh001:

下午好!

我的问题会有点离题。

请告诉我,是否有可能在某处找到将TA的形状切成CSV文件的方法?我可以使用txt、xls或任何其他可以用程序处理的格式。

在各种TA文章、教科书中都有TA人物的例子,当然是作为普通图片。有没有人在H1-H4期间保存了或多或少的大套TA符号作为一些货币对的历史片段,例如?

我上网搜索了一下,没有找到。当然,我们可以手动浏览历史,标记形状,将这段历史导出为.csv;重复所需的次数,最后收集形状基础。但如果有人已经做过了,希望能节省时间。

提前感谢 :)


为什么你需要CSV文件的形状?编写一个形状库...自己写,这样你就能理解它们,而不是借用别人的。很多并不意味着更好!
 
Fox_RM:


我不太明白。但在显示体积方面没有问题。在数量计算 方面存在一个问题。在这里的某个地方。


1.阵列需要被放置--也就是分配内存。否则,根本没有地方可以存储这些值;)。

2.当你收到一个新的刻度线时,你的均匀放置的阵列将被重新定位/重新初始化。这与范围有关。数组必须是 "静态 "类型的,以防止这种情况发生。

阅读一些关于编程基础知识的文章。

HZ 计数的问题是我向你指出了阵列使用的错误。

 
VladislavVG:


1.一个数组必须被定位,换句话说,必须分配内存。否则,就没有地方可以存储数值了;)。

2.当你收到一个新的刻度线时,你的均匀放置的阵列将被重新定位/重新初始化。这与范围有关。数组必须是 "静态 "类型的,以防止这种情况发生。

阅读一些关于编程基础知识的文章。

HZ 计数的问题是我向你指出了阵列使用的错误。

也就是说,按照我的理解Vol_Arr[] 应该被初始化为一个全局数组


这个问题当然是一个空问题,但是。

1.那为什么在指标中能正确地显示交易量。

2.在计算时,我访问了AOBuffer3[] 而不是Vol_Arr[]。

谢谢你!