[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 331

 

一定是缓冲器又出了问题。请看一看。

任务如下。

1)LSMA的计算。如果[i]>[i+1] - 颜色为绿色,如果[i]<[i+1] - 颜色为红色。有了这个,一切就都清楚了。

2) 我需要找到一系列绿色和红色数值的长度,并将它们存储在一个数组中。这是我还没有设法自己解决的问题。

//+------------------------------------------------------------------+
//|                                                   LSMA_Stat2.mq4 |
//|                                                       silhouette |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "silhouette"
#property link      "http://www.metaquotes.net"

#property copyright "silhouette"
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green
#property indicator_color3 Red
//+------------------------------------------------------------------+
double BufferYellow[],BufferGreen[], BufferRed[];
int GreenSeries[], RedSeries[], g=0, r=0, gc=0, rc=0;
string Symb;

int init()
  {
   Symb=Symbol();
   
   SetIndexBuffer(0,BufferYellow);
   SetIndexBuffer(1,BufferGreen);
   SetIndexBuffer(2,BufferRed);
   
   SetIndexStyle(0,DRAW_LINE,EMPTY,2);
   SetIndexStyle(1,DRAW_LINE,EMPTY,2);
   SetIndexStyle(2,DRAW_LINE,EMPTY,2);  
   return(0);
  }

int deinit()
  {

   return(0);
  }

int start()
  {
   double tmp1, tmp2, LSMA;
   
   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars-1;
   if (limit>1) 
      limit=Bars-1;
      
   for(int i=limit; i>0; i--)
    {
     tmp1=iMA(Symb,Period(),34,0,MODE_SMA,0,i);
     tmp2=iMA(Symb,Period(),34,0,MODE_LWMA,0,i);
     LSMA=3.0*tmp2-2.0*tmp1;
      
     BufferYellow[i]=LSMA;
     BufferGreen[i]=LSMA;
     BufferRed[i]=LSMA;

     if(BufferYellow[i]>BufferYellow[i+1])
      {
       BufferRed[i]=EMPTY_VALUE;
      }
     else if(BufferYellow[i]<BufferYellow[i+1])
      {
       BufferGreen[i]=EMPTY_VALUE;
      }
     else
      {
       BufferRed[i]=EMPTY_VALUE;
       BufferGreen[i]=EMPTY_VALUE;
      }                        
      
     if(BufferGreen[i]!=EMPTY_VALUE && BufferRed[i]==EMPTY_VALUE)
      {
       g++;
      }
     if(BufferGreen[i]==EMPTY_VALUE && BufferRed[i]!=EMPTY_VALUE)
      {
       r++;
      }
     if(BufferGreen[i]==EMPTY_VALUE && BufferRed[i]==EMPTY_VALUE)
      {
       if(BufferGreen[i+1]!=EMPTY_VALUE)
        {
         GreenSeries[gc]=g;
         gc++;
         g=0;
        }
       if(BufferRed[i+1]!=EMPTY_VALUE)
        {
         RedSeries[rc]=r;
         rc++;
         r=0;
        }
      }              
    }
   return(0);
  }
 
silhouette:

一定是缓冲器又出了问题。请看一看。

任务如下。

1)LSMA的计算。如果[i]>[i+1] - 颜色为绿色,如果[i]<[i+1] - 颜色为红色。有了这个,一切就都清楚了。

2) 我需要找到一系列绿色和红色数值的长度,并将它们存储在一个数组中。这是我还没有设法自己解决的问题。


这个 指标有什么不满意的呢?
 
Vinin:

你为什么不喜欢这个 指标?

维宁,其实我是按照你的样本做的,但重点不同:对我来说,重要的不是计算方法本身(不管是最简单的MA),而是第2点中问题的解决方法。

我需要得到一个数组,存储绿色或红色系列的长度,以便进一步分析。

 
请告知。有2个虚拟的平衡图(用于卖出和买入订单),在现实生活中它们可能会有很大的分歧。我怎样才能把它们翻译成任何相对单位,以便能够对这些图形的交叉时刻进行计时。
 
silhouette:

维宁,其实我是按照你的样本做的,但重点不同:对我来说,重要的不是计算方法本身(不管是最简单的MA),而是第2点中问题的解决方法。

我需要得到一个数组,存储绿色或红色系列的长度,以便进一步分析。


为什么你需要一个数组?
 
Vinin:

为什么你需要一个数组?
用于后续的统计分析。例如,在Excel中。
 

有一个用于鼠标交易的库 https://www.mql5.com/ru/code/9671

我完全没有运气连接它,请帮助。

我把所有我需要的文件下载到专家文件夹,然后进行编译,但指标仍然是黑色窗口,没有数据。

显然是某种幼稚的错误,但我24小时都找不到它。


 
TheXpert:

没有必要夹带任何东西。归档文件已经包含了所有的文件,你需要做的就是把归档文件解压到终端文件夹,然后进行编译。

只有指标文件被编译,库(mqh)不需要被编译。试着放一个新的终端并在上面练习。

 

你能给我一个提示吗?在终端中有一个按钮 "MQL4.community",点击它可以打开Word的相应页面,但当我试图点击任何链接时,就会弹出一个窗口,说我的电脑有限制!这是怎么回事????

你是如何处理的呢?谢谢你。

 
void start()
  {
  double tickvalue = MarketInfo(Symbol(), MODE_TICKVALUE);
  double profitbuy, profitsell;
  
  for(int i = OrdersTotal()-1; i >= 0;i--)
    {
    if(!OrderSelect(i,SELECT_BY_POS)) continue;
    if(OrderSymbol()!=Symbol() || OrderType() >= 2) continue;
    if(OrderType() == 0)
      profitbuy +=((Bid - OrderOpenPrice())/Point*tickvalue*OrderLots())+OrderCommission()+OrderSwap();
    if(OrderType() == 1)
      profitsell+=((OrderOpenPrice() - Ask)/Point*tickvalue*OrderLots())+OrderCommission()+OrderSwap();
    }
  
  Comment(profitbuy+profitsell);
  }
В чем прикол, не могу правильно рассчитать суммарный профит для всех ордеров по одной паре, в терминале пишет одно, а у меня получается другое?

Итак, мои домыслы, своп в терминале нужно нормализовать обязательно, там точность больше двух бывает - это проверил, но как нормализовать - для каждого ордера или суммарно? Непонятно в общем...
Я уже всяко перепробовал, минимальная разница доходила до 0.02 центов, но это все равно не то, что нужно.

Вопрос, как мне мой код подогнать под работу функции - AccountProfit()?