[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 239

 
dmmikl86 >> :

¡Estimados usuarios del foro!

He escrito un indicador y el problema es que no puedo dibujar la media móvil (Buf_2), aquí está el código:

Ayúdame a entender cuál es el problema.

Y por qué se dibujaría si no se entra en el bucle después de /promedio e i<0 sino no se sale del bucle anterior

 i++; // поставьте здесь увеличение на один и всё заработает или присвойте i=0; напрямую ноль
//====================================================================
// average
int n=0;
   while( i>=0) 
      {  
       //----
       while( n<= average){
         Buf_2[ i]= Buf_1[ i- n];
         n++;
         }
       
       i--;
       //----
      }

//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Buenas tardes)


Perdón por la intromisión, ya he hecho esta pregunta, pero no obtener la respuesta( De todos modos, durante la semana, nada se ha movido en


¿Pueden decirme cómo escribir una función que coloque una orden pendiente?


¿Qué debo poner en lugar de Oferta o Demanda? Necesito una orden pendiente en el High de una de las velas. Obtengo este valor y cómo debo introducirlo en la función? Este precio puede no estar en el flujo comercial. Me pregunto si podríais poner el código para poner una orden pendiente y, sobre todo, de dónde sacar su precio de ajuste.

 

Por ejemplo (ejemplo de fijación de un stop de compra) :

(no es necesario en absoluto que el precio fijado esté en el flujo de cotizaciones para establecer una orden pendiente.

puede bailar con el precio actual o tomar cualquier precio, siempre y cuando se adhiera al nivel de parada desde el PRECIO ACTUAL HASTA EL PRECIO DE PARADA)

( 'EURUSD - Tendencias, previsiones y consecuencias' )

extern int      Magic = 77777;
extern int      StopLoss=400;
extern int      TakeProfit=120;
extern double   Lots=0.1;

static int prevtime = 0;
//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>


//=======================================================
int start()
{
if(Time[0] == prevtime)   return(0);//ждём появления нового бара
   prevtime = Time[0];//если появился новый бар , включаемся
   

//-----------------------------------------------------------------------
if ( NumberOfOrders(NULL,OP_BUYSTOP, Magic)<1 )  {//если нет открытых бай- поз.
if   ( NumberOfPositions(NULL,OP_BUY, Magic)<1)  {//если нет ордеров байстоп
double priceBUY=iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,50,0));//-задаем цену
// установки  ордера по максимуму из посл. 50-ти свечей
double SL=0;double TP=0;//выставляем стопы
if( StopLoss>0)   SL= priceBUY-Point* StopLoss;
if( TakeProfit>0) TP= priceBUY+Point* TakeProfit;  
//ставим ордер 
ticket=OrderSend(Symbol(),OP_BUYSTOP, Lots, price,5, SL, TP,"байстоп", Magic,0,Blue);
if( ticket < 0) { Print("Ошибка открытия ордера BUY #", GetLastError()); 
               Sleep(10000);   return (0); }
}}
//--------------------------------------------------------------------------

Аналогично ставится селл-стоп


//----------------------------------------------------------------------------
return (0);
 //-----------------Конец функции int start()----
}//int start()

//--------ставим пользовательские функции -------------

En lugar de

double priceBUY=..... ....

introduzca su fórmula

 

Estoy escribiendo un indicador, cuya esencia es la siguiente: si una vela es alcista, la línea del indicador es alcista, bajista. pues bien, a todo esto se le añade el volumen (para que cada vela tenga un peso de volumen). Y la segunda línea es una media móvil de la línea actual

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red

extern int average=14;
//---- buffers
double Buf_1[], Buf_2[];
double sum_b;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0, Buf_1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1, Buf_2);
   
   sum_b=0.0;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    i, 
          Counted_bars=IndicatorCounted();

int n=0;
//----
//====================================================================
// график тела с объемом

i=Bars- Counted_bars-1;           // Индекс первого непосчитанного
   while( i>=0) 
      {  
       //----
       if (Close[ i]>Open[ i]) {
         sum_b = sum_b + (Close[ i]-Open[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
         }
         
       if (Close[ i]<Open[ i]) {
         sum_b = sum_b - (Open[ i]-Close[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
         }
         
       if (NormalizeDouble(Close[ i],Digits)==NormalizeDouble(Open[ i],Digits)) {
         Buf_1[ i] = Buf_1[ i-1];
         }
       
       // average  
       while( n<= average){
         Buf_2[ i]= Buf_1[ i- n];
         n++;
         }

       i--;
       //----
      }
//====================================================================


//----
   return(0);
  }
//+------------------------------------------------------------------+
problemas: la línea principal dibuja picos cuando se forma un doji, y la media móvil no se dibuja?
 
dmmikl86 >> :

Estoy escribiendo un indicador, cuya esencia es la siguiente: si una vela es alcista, la línea del indicador es alcista, bajista. pues bien, a todo esto se le añade el volumen (para que cada vela tenga un peso de volumen). Y la segunda línea es la media móvil de la línea actual

problemas: la línea principal dibuja picos durante la formación de doji y la media móvil no se dibuja?


El bloque de ifs puede ser sustituido por un bloque más eficiente

if (Close[ i]>Open[ i]) {
         sum_b = sum_b + (Close[ i]-Open[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
}
else if (Close[ i]<Open[ i]) {
         sum_b = sum_b - (Open[ i]-Close[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
}
else {  //       if (NormalizeDouble(Close[i],Digits)==NormalizeDouble(Open[i],Digits)) {
         Buf_1[ i] = Buf_1[ i + 1];
}

[i + 1] - ya que las matrices de índices se numeran de derecha a izquierda. Ahora los candelabros con cuerpos cero serán procesados correctamente.

Con la línea central buf_2 del código no queda nada claro lo que el autor quería.


 
OneDepo >> :

El bloque if-value puede ser sustituido por uno más eficiente

[i + 1] - porque las matrices de índices se numeran de derecha a izquierda. Ahora los candelabros con cuerpo cero serán procesados correctamente.

Con la línea central buf_2 del código no está nada claro lo que el autor quería.


quería que fuera una media móvil con un periodo de 14, basado en el valor del indicador

 
dmmikl86 >> :

quería que fuera una media móvil con un período de 14, trazada contra el valor del indicador

Entonces es así:

//+------------------------------------------------------------------+
//|                                                     dmmikl86.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red

extern int BarsCount = 1000;
extern int average=14;

//---- buffers
double Buf_1[], Buf_2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
    if ( average < 1)
        average = 1;

    //---- indicators
    SetIndexStyle(0,DRAW_LINE);
    SetIndexBuffer(0, Buf_1);
    SetIndexStyle(1,DRAW_LINE);
    SetIndexBuffer(1, Buf_2);
    //----
    return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
    int i, n;

    //====================================================================
    // график тела с объемом
    double s, sum_b = 0;

    int limit = BarsCount;
    if ( limit > Bars)
        limit = Bars;

    for ( i = limit; 0 <= i; i--) {

        if (Close[ i]>Open[ i]) {
            sum_b += (Close[ i]-Open[ i])*Volume[ i];
            Buf_1[ i] = sum_b;
        }
        else if (Close[ i]<Open[ i]) {
            sum_b -= (Open[ i]-Close[ i])*Volume[ i];
            Buf_1[ i] = sum_b;
        }
        else {
            Buf_1[ i] = Buf_1[ i + 1];
        }

        // SMA calculation
        if ( i + average < limit) {
            s = 0;
            for ( n = 0; n < average; n++) {
                s += Buf_1[ i+ n];
            }
            Buf_2[ i] = s/ average;
        }

    }

    return(0);
  }
//+------------------------------------------------------------------+
 
¿Cómo puedo hacer una operación una vez por barra y no abrir más órdenes en esta barra si ya hay una operación en esta barra?
 
Sólo hay que ver este hilo.
 
Vinin >> :
Sólo hay que ver este hilo.

O leer la tarea 27 en el libro de texto de Kovalev. Hay ejemplos de código y una explicación detallada de su funcionamiento.