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

 

你能告诉我如何使指标显示的不是当前值,而是最后每条的最大值,我用Osma作为例子,但是当图表在移动时,它在策略测试器中显示的是当前值,而当你把它放在图表上时,什么都没有。

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 1
#property   indicator_color1  Silver
#property   indicator_width1  2
//---- indicator parameters

extern int Per=12;
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double     OsmaBuffer1[];
double     OsmaBuffer[];
double     MacdBuffer[];
double     SignalBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 2 additional buffers are used for counting.
   IndicatorBuffers(4);
//---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexDrawBegin(0,SignalSMA);
   IndicatorDigits(Digits+2);
//---- 3 indicator buffers mapping
   SetIndexBuffer(0,OsmaBuffer1);
   SetIndexBuffer(1,OsmaBuffer);
   SetIndexBuffer(2,MacdBuffer);
   SetIndexBuffer(3,SignalBuffer);
   
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Average of Oscillator                                     |
//+------------------------------------------------------------------+
int start()
  {
   
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd counted in the 1-st additional buffer
   for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd additional buffer
   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- main loop
   for(i=0; i<limit; i++)
      OsmaBuffer[i]=MacdBuffer[i]-SignalBuffer[i];
//---- done
   for(i=0; i<limit; i++)
    {
     for(int b=0; b<Per; b++)
      {
       OsmaBuffer1[i] =OsmaBuffer[ ArrayMaximum(OsmaBuffer,Per,b)];
      }
    } 
  return(0);
  }
Всё разобрался, перемудрил просто))), достаточно этого:
for(i=0; i<limit; i++)
    {
     OsmaBuffer1[i] = OsmaBuffer[ ArrayMaximum(OsmaBuffer,Per,i)];
    } 
 
borilunad:
我明白!但是,我们如何对这个变量("指定价差")进行编程?当然,我可以创建一个变量Spread,并在我每次改变测试器中的spread时改变它。说,Spread(TestGenerator)或者有一些函数,或者你能以某种方式做出这样的函数,不可能是你不能!А?


在测试时,有一个固定的分布。

但对于大多数DC来说,它是可变的。如果你愿意,可以在测试器中考虑到这一点。一般来说,在最不利的条件下测试专家顾问。也就是说,有最大的点差,有可能延迟开单,等等。

 
Sepulca:


在测试时,有一个特定的传播。

但对于大多数DC来说,它是可变的。如果你愿意,可以在测试器中考虑到这一点。一般来说,在最不利的条件下测试专家顾问系统。也就是说,有最大的点差,有可能延迟开单,等等。

我理解并做了所有的事情!只是想反映我在程序中设置的价差,因为在测试器中Ask经常被扭曲,然后通过Bid+spread找到它!看到分支MarketInfo在测试器中不工作!然后你就会知道什么是错的了!问过那里,没有人!因此,在这里感动,在那里回应,为此你和其他人感谢你!
 
同事们!请帮助我把一个现成的功能装入EA中
 

以下是该函数

bool isFlagHistoryPos(int mn=-1) {

datetime t;

int gd = MarketInfo(Symbol(),MODE_DIGITS);

int i, j=-1, k=OrdersHistoryTotal();

for (i=0; i<k; i++) {

如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){

如果(OrderSymbol()==Symbol()){

如果(OrderType()==OP_BUY || OrderType()==OP_SELL) {

如果(mn<0 || OrderMagicNumber()==mn) {

如果(t<OrderCloseTime()){

t=OrderCloseTime()。

j=i。

}

}

}

}

}

}

如果(OrderSelect(j, SELECT_BY_POS,MODE_HISTORY)){

double ocp=NormalizeDouble(OrderClosePrice(),gd)。

double otp=NormalizeDouble(OrderTakeProfit(),gd)。

如果(MathAbs(ocp-otp)/Point<=TPpoint)返回(true)。

}

return(false)。

专家顾问本身附在后面

/* 由Vinin反编译 */

 
borilunad:
是的,我理解并做了所有的事情!我只是想让我设置的价差在程序中得到反映,因为Ask在测试器中经常被扭曲,然后通过Bid+spread找到它!看到分支MarketInfo在测试器中不工作!然后你就会知道什么是错的了!问过那里,没有人!因此,在这里感动,在那里回应,为此你和其他人感谢你!

妈的,鲍里斯。我以前写过。那么,你可以在专家顾问中直接模仿浮动点差。是什么阻止了我将浮动价差范围内的一个随机数字加入到买入价中,并用止损单打开它。并按价值收盘,而不是按止损单收盘。这比设置更大的静态传播要复杂,但如果你真的需要,你可以做到这一点。同时,在测试器中设置最小传播。

只是......。一条思路。

 
artmedia70:

妈的,鲍里斯。我以前写过。那么,就在你的EA中做一个模拟的浮动差价。有什么能阻止你在买入时加入一个浮动价差范围内的随机数字,并以止损单开盘。并按价值收盘,而不是按止损单收盘。这比设置更大的静态传播要复杂,但如果你真的需要,你可以做到这一点。同时,在测试器中,设置最小传播。

这只是...一种思维方式。

谢谢你,Artem,这是在一个好的方向上更明智的做法!。我会这样做的!
 

请帮助解决这个问题)我写了一个专家顾问,通过交叉挥舞来工作,但当我试图测试它时,终端发出哔哔声,没有测试任何东西(编译器代码喜欢它。 如何使它至少有东西显示?

#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"


#property indicator_chart_window
#property indicator_buffers 1
#property  indicator_color1 Red
//---- indicator parameters
extern int RPeriod=13;
extern int RPrice=PRICE_CLOSE;
extern int RMethod=MODE_EMA;
//для желтой
extern int YPeriod=30;
extern int YPrice=PRICE_CLOSE;
extern int YMethod=MODE_EMA;
extern int Magic=17051994;
//профит и лось
extern int TakeProfit=150;
extern int StopLoss=30;
extern double lot=0.1;
double movingred,movingellow,SL,TP,movingred2,movingellow2;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
int kolpos=0,pos;  
     movingred=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingellow=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingred2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
     movingellow2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
         
        for(pos=0;pos <OrdersTotal();pos++)//считаю ордера чтобы советник не трогал в ручную выставленные ордера
        {
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic )
            {
            kolpos++;
            }
        }
        if (kolpos==0)
         {
              //условвие для покупок продаж
              if(movingred2>movingellow2 && movingred<movingellow && Volume[0]<5)//продаем 
                  {
                    OrderSend(Symbol(),OP_SELL,lot,Bid,10,Bid+StopLoss*Point,Bid-TakeProfit*Point,NULL,Magic,0,Green);
                  }
              if(movingred2<movingellow2 && movingred>movingellow && Volume[0]<5)//покупаем
                  {
                    OrderSend(Symbol(),OP_BUY,lot,Ask,10,Ask-StopLoss*Point,Ask-TakeProfit*Point,NULL,Magic,0,Red);
                  }
          }
   return(0);
  }
 
LBatters:

请帮助解决这个问题)我写了一个专家顾问,通过交叉挥舞来工作,但当我试图测试它时,终端发出哔哔声,没有测试任何东西(编译器代码喜欢它。 如何使它至少有东西显示?

你曾经看过你写的东西吗?

有些东西告诉我,"这就是问题所在"。

     movingred=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingellow=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingred2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
     movingellow2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
 
LBatters:

请帮助解决这个问题)我写了一个专家顾问,可以在穿越挥舞上工作,但当我试图测试它时,终端发出哔哔声,没有测试任何东西(编译器代码喜欢。 如何使他至少有东西可以显示?

//считаю ордера чтобы советник не трогал в ручную выставленные ордера

他将在哪里碰它,嗯?是的,它足以检查魔术师,手册没有魔术师。


而且,如上文所述,捣碎的东西不会重叠......