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

 
TarasBY:

关于这句话。

最近,DT经常在符号名称中添加不同的前缀(EURUSDm--例如)--在提及符号的市场环境时,应考虑到这些。

P.S. ...而对于标准的 "EURUSD",StringSubstr("EURUSD",6)将不是零而是""。

非常感谢你,伊戈尔!我不知道DT和信的事。它可能是 "m "的一个迷你账户。

你知道日元 的系数是多少吗 对于其他货币,英镑0.625欧元0.7751937984

这个想法是,当你翻译货币 时,系数会随着汇率的变化而浮动。那么为什么要取常数呢?
 
Chiripaha:

尼古拉,你正在学习编程和创建程序,这非常好。但问题是,你并没有完全就程序中的某一晦涩案例寻求帮助,但你实际上概述了编写程序的TOR。

在我看来,你所展示的,就机器人而言,比喻为一堆杂乱无章的零部件。这一点也不对。

所以你不能在这里指出一个具体的错误,因为一切都需要以完全不同的方式重新进行。- IMHO,我并不假装比这更多。

但这并不是生气的理由。继续学习如何写作。在那里,正如他们所说的,而不是你,当然,可以 "吃"(做工作),但你自己并没有从中变得丰衣足食(即不学习)。所以请继续。如果一个人走了另一个人的路。

试着用不同的方法再写一次,解决这个问题。- 这对我来说很有效。


谢谢你的批评。告诉我,实施起来是否现实?
 
NICK_R:
谢谢你的批评。这样做到底是否现实?

当然是这样。但这并不完全是一项简单的任务。这不是很困难,但也不容易。- 它正好适合学习。
 
Chiripaha:

非常感谢你,伊戈尔!我不知道DC和信的事。它必须是一个迷你账户--为字母 "m"。

你知道日元 的系数是多少吗 其他货币有英镑-0.625欧元-0.7751937984

这个想法是,当你转换货币时,系数会随着汇率的变化而浮动。那么为什么要取常数呢?

谢尔盖,这些数字对我来说没有任何意义,所以我对这个问题没有答案。

而符号书写中的前缀可能有意义,也可能没有意义。

 
TarasBY:

谢尔盖,这些数字对我没有任何意义,所以我对这个问题没有答案。

而符号书写中的前缀可能有意义,也可能没有意义。

好的。谢谢你!
 

各位同事下午好

你能告诉我如何摆脱循环(在代码中以红色标示)吗?该指标的发展速度慢得可怕。

#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  DarkGray
#property  indicator_color2  PowderBlue
#property  indicator_width1  2

//---- basic fan indicator parameters

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

    double  price_up_start, price_up_end, AO_up;
    double  price_dn_start, price_dn_end, AO_dn;
    datetime time_up, time_dn, AO_time_up, AO_time_dn;
    double Vol_AO_up, Vol_AO_dn;
    int shift_up, shift_dn, dn_koaf, up_koaf, dn_koaf_round, up_koaf_round;
    
//+------------------------------------------------------------------+
//| 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;

   for(int i=0; i<limit; i++)   // -------------------------------------------- Основной цикл
   {
     
 //---- Awesom + 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;
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;
}

//----------------------------- Блок поиска значений -----------------------------------------//
 
 //-- Поиск Low & Time & Min_AO 
  if (AOBuffer3[i] < 0)
  {
 price_up_end = 0; AO_up = 0;  
 price_dn_start = Low[i]; if (price_dn_end == 0) price_dn_end = Low[i]; 
 if (price_dn_start <= price_dn_end) {price_dn_end = price_dn_start; time_dn = Time[i]; shift_dn = iBarShift(NULL, 0, time_dn);}
 if (AOBuffer3[i] <= AO_dn) {AO_dn = AOBuffer3[i]*0.2+AOBuffer3[i]; AO_time_dn = Time[i];}
 dn_koaf=dn_koaf_round;
 up_koaf_round++;
  }   
  
  //-- Поиск High & Time & Max_AO  
  if (AOBuffer3[i] > 0)
   {
  price_dn_end = 0; AO_dn = 0;  
  price_up_start = High[i];
  if (price_up_start >= price_up_end) {price_up_end = price_up_start; time_up = Time[i]; shift_up = iBarShift(NULL, 0, time_up);}
  if (AOBuffer3[i] >= AO_up) {AO_up = AOBuffer3[i]*0.2+AOBuffer3[i]; AO_time_up = Time[i];}
  up_koaf=up_koaf_round;
  dn_koaf_round++;
   }   
 //--------------------------------- Выставляем значения --------------------------------------------//
    
   Vol_AO_up = 0; Vol_AO_dn = 0;
  if (shift_up > shift_dn)
    {
 for (int dn_br = shift_dn; dn_br <= shift_up; dn_br++)            //-------------- Перебор значений внутри основного цикла
          {
    Vol_AO_up += Volume[dn_br]; 
    SetText("Awesome_super_volumes"+up_koaf, DoubleToStr(Vol_AO_up,0), AO_time_dn, AO_dn, Blue);
          }   
  }
 
 if (shift_dn > shift_up)
    {
 for (int up_br = shift_up; up_br <= shift_dn; up_br++)            //-------------- Еще один перебор значений внутри основного цикла
          {
    Vol_AO_dn += Volume[up_br]; 
    SetText("Awesome_super_volumes"+dn_koaf, DoubleToStr(Vol_AO_dn,0), AO_time_up, AO_up, Red);
          }   
    }
 } 
           
//---- done

   return(0);
  }
//+------------------------------------------------------------------+
void SetText(string name, string Vl, datetime t1, double p1, color c)
 {
  ObjectCreate(name,OBJ_TEXT,WindowFind("Awesome_super_volumes"),0,0,0,0);
  ObjectSetText(name, Vl, 6, "Arial Black", c);
  ObjectSet(name, OBJPROP_TIME1 , t1);
  ObjectSet(name, OBJPROP_PRICE1, p1);
  ObjectSet(name, OBJPROP_COLOR, c); 
  }

谢谢你!


 
Fox_RM:

各位同事下午好

你能告诉我如何摆脱循环(在代码中以红色标示)吗?该指标的发展速度慢得可怕。

谢谢你!

不过,我还是要给你这个,也许是个愚蠢的想法。但也许我会想出一个更合理的办法。

就任务而言,你需要最后搜索一些条形图上的数据,然后在第一次搜索时将数据值写入一些数组(或缓冲区--我不太擅长)。

在第一次搜索完成后,从这个数组(缓冲区)中获取必要的值,为第二次搜索获取数据。

只是不特别确定这是否对速度有帮助。但我对刹车的原因也不太了解。在这方面,我很难说得更有资格。

可能有什么优点和缺点。缺点是,在这种情况下,你不是在网上估计酒吧的情况,而是在事后,当数据已经有点没用了。但是...这被以下事实所抵消:事实上,当你重新计算旧的数据时,你不再需要它在线。而当实际的当前数据到达时,它将立即被第2个枚举所处理。因此,在这种情况下,不应该有任何相关性的损失。另外--它将解决你的任务:摆脱超标中的超标。: ))

我可能忽略了一些东西。批判性地接受我的想法。那么,最好的批评者就是实践。你只需要写下并反复检查什么和怎么做就可以了。我想是的。

 

实际上没有区别,只是获得A和B控制点的过程略有不同。我已经用数组试过了。

那么在A和B之间,我也必须在小节中循环。我看不出有别的办法,所以我才问。

也许有人能给我一个提示。也许代码编写的逻辑有问题?

 
Fox_RM:

实际上没有区别,只是获得A和B控制点的过程略有不同。我已经用数组试过了。

那么在A和B之间,我也必须在小节中循环。我看不出有别的办法,所以我才问。

也许有人能给我一个提示。也许代码编写的逻辑有问题?

是的,没错--无论如何我们都要对溢出的部分做一个循环。因此,没有办法避免它。而最有可能的是,问题需要以不同的方式提出--是什么导致了制动,如何摆脱它?
 
Fox_RM:

各位同事下午好

你能告诉我如何摆脱循环(在代码中以红色标示)吗?该指标的发展速度慢得可怕。

谢谢你!

你可以在这个地方对指标进行分组--这将是对指标的一个小的优化。

if (Show_Volume==true)
{
double nSum = Volume[i]*Point*coaf;
   if (AOBuffer3[i]<=0)ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]>0)ExtMapBuffer1[i] = -nSum;
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;
}

像这样。

if (Show_Volume==true)
{
 double nSum = Volume[i]*Point*coaf; double Vol_Arr[];  // Не знаю в этом случае можно через запятую переменные прописывать? - double nSum = Volume[i]*Point*coaf, Vol_Arr[];

 if (AOBuffer3[i]<=0) {ExtMapBuffer1[i] =  nSum; Vol_Arr[i] =  Volume[i]*Point*coaf;}
 if (AOBuffer3[i]>0)  {ExtMapBuffer1[i] = -nSum; Vol_Arr[i] = -Volume[i]*Point*coaf;}
}

在这里,它是。

AO_dn = AOBuffer3[i]*0.2+AOBuffer3[i];
// и тут
AO_up = AOBuffer3[i]*0.2+AOBuffer3[i];

你可以把它改成。

AO_dn = AOBuffer3[i]*1.2;
     // и
AO_up = AOBuffer3[i]*1.2;

然后,你有 "文本 "堆积在指标中。在你放置新的文本之前,你必须删除旧的文本。这真的会减慢指标的速度--也许这就是原因。因 为你得到的 这些文本 的数量与所选参数上的刻度一样多。

如果有人告诉我如何最好地在代码中实现这一点--因为我自己也在请求类似的编码帮助。