Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 322

 

Me puedes decir como hacer que el indicador no muestre la corriente sino el valor máximo de las últimas Per barras, he usado Osma como ejemplo, pero muestra la corriente en el Probador de Estrategias cuando el gráfico está en movimiento y cuando solo lo pones en el gráfico, nada:

//---- 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:
Lo entiendo. Pero, ¿cómo podemos programar esta variable ("spread especificado")? Claro, puedo crear una variable Spread y cambiarla cada vez que cambie el spread en el tester. Digamos que Spread(TestGenerator) o que hay alguna función, o que de alguna manera se puede hacer tal función, ¡no puede ser que no se pueda! А?


Hay una dispersión establecida, cuando se hace la prueba,

pero con la mayoría de los CC es variable. Si quieres, tenlo en cuenta en el probador. En general, pruebe los Asesores Expertos en las condiciones más desfavorables. Es decir, con la máxima dispersión, con posibles retrasos en la apertura de la orden, etc.

 
Sepulca:


Hay una dispersión especificada, cuando se hace la prueba,

pero con la mayoría de los CC es variable. Si quieres, tenlo en cuenta en el probador. En general, pruebe los Asesores Expertos en las condiciones más desfavorables. Es decir, con la máxima dispersión, con posibles retrasos en la apertura de la orden, etc.

¡Entiendo y hago todo! ¡Sólo quería reflejar el spread que puse en el prog, porque en el tester el Ask suele estar distorsionado, luego lo encuentro a través de Bid+spread! ¡Ver rama MarketInfo no funciona en el probador! ¡Entonces sabrás qué es lo que está mal! Preguntado allí, ¡y nadie! ¡Por lo tanto, se trasladó aquí, allí respondió, para que usted y otros gracias!
 
Colegas: Por favor, ayúdenme a incorporar una función ya hecha en un EA
 

Esta es la función

bool isFlagHistoryPos(int mn=-1) {

datetime t;

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

int, j=-1, k=Total de pedidos();

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

if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {

if (OrderSymbol()==Symbol()) {

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

if (mn<0 || OrderMagicNumber()==mn) {

si (t<OrderCloseTime()) {

t=OrderCloseTime();

j=i;

}

}

}

}

}

}

if(OrderSelect(j, SELECT_BY_POS,MODE_HISTORY)) {

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

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

if(MathAbs(ocp-otp)/Point<=TPpoint) return(true);

}

return(false);

Se adjunta el propio Asesor Experto

/* Descompilado por Vinin */

 
borilunad:
Sí, lo entiendo y lo hago todo. ¡Sólo quería que el spread que estoy configurando se reflejara en el prog, ya que el Ask suele estar distorsionado en el tester, y luego lo encuentro a través de Bid+spread! ¡Ver rama MarketInfo no funciona en el probador! ¡Entonces sabrás qué es lo que está mal! Preguntado allí, ¡y nadie! ¡Por lo tanto, se trasladó aquí, allí respondió, para que usted y otros gracias!

Mierda, Boris. Ya he escrito antes. Pues bien, puedes imitar un spread flotante directamente en el Asesor Experto. Qué me impide añadir un número aleatorio en el rango del spread flotante a la oferta, y abrirlo con órdenes de stop. Y cerrar por valor, no por órdenes de detención. Es más complicado que establecer una extensión estática mayor, pero si realmente lo necesitas, puedes hacerlo. Al mismo tiempo, establece la dispersión mínima en el probador.

Es que... una línea de pensamiento.

 
artmedia70:

Mierda, Boris. Ya he escrito antes. Bueno, haz un spread flotante simulado en tu EA. Qué te impide añadir un número aleatorio en el rango de spread flotante a la oferta y abrir con órdenes de stop. Y cerrar por valor, no por órdenes de detención. Es más complicado que establecer una extensión estática mayor, pero si realmente lo necesitas, puedes hacerlo. Al mismo tiempo, en el probador, ajuste la dispersión mínima.

Esto es sólo ... Una forma de pensar.

Gracias Artem, ¡eso es más sabio en el buen sentido! Lo haré.
 

Ayuda con el problema, por favor) Escribí un Asesor Experto que funciona cruzando ondas, pero cuando trato de probarlo, la terminal emite un pitido y no prueba nada (el código del compilador le gusta. ¿Cómo hacer para que al menos se muestre algo?

#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:

Ayuda con el problema, por favor) Escribí un Asesor Experto que funciona cruzando ondas, pero cuando trato de probarlo, la terminal emite un pitido y no prueba nada (el código del compilador le gusta. ¿Cómo hacer para que al menos se muestre algo?

¡¿Alguna vez miras lo que has escrito?!

Algo me dice que "aquí es donde está el problema":

     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:

Ayuda con el problema, por favor) Escribí un Asesor Experto que funciona en el cruce de agitar, pero cuando trato de probarlo, el terminal emite un pitido y no prueba nada (código compilador le gusta. ¿Cómo hacer para que al menos algo para mostrar?

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

¿Dónde lo tocará, eh? Sí y basta con comprobar el mago, manual sin mago.


Bueno, y, como ya se ha escrito más arriba, los macerados no se solapan...