[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 239

 
dmmikl86 >> :

Cari utenti del forum!

Ho scritto un indicatore e il problema è che non riesco a disegnare la media mobile (Buf_2), ecco il codice:

Aiutatemi a capire qual è il problema?

E perché dovrebbe essere disegnato se non si entra nel ciclo dopo //a media e i<0 altrimenti non si esce dal ciclo precedente

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

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

Buon pomeriggio)


Scusate l'intrusione, ho già fatto questa domanda, ma non ottengo la risposta( Comunque, durante la settimana, nulla si è mosso


Potete dirmi come scrivere una funzione che piazzi un ordine in sospeso?


Cosa dovrei mettere al posto di Bid o Ask? Ho bisogno di un ordine pendente all'altezza di una delle candele. Ottengo questo valore e come devo inserirlo nella funzione? Questo prezzo potrebbe non essere nel flusso commerciale. Mi chiedo se si potrebbe mettere il codice per mettere un ordine in sospeso e, soprattutto, da dove prendere il suo prezzo di impostazione!

 

Per esempio (esempio di impostazione di un buy stop) :

(non è affatto necessario che il prezzo impostato sia nel flusso delle quotazioni per impostare un ordine pendente.

si può ballare con il prezzo corrente o prendere qualsiasi prezzo, purché si rispetti il livello di stop dal PREZZO CORRENTE AL PREZZO STOP)

( "EURUSD - Tendenze, previsioni e conseguenze" )

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()

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

Invece di

doppio priceBUY=..... ....

inserisci la tua formula

 

Sto scrivendo un indicatore, la cui essenza è la seguente: se una candela è rialzista, la linea dell'indicatore è in alto, ribassista è in basso. bene, il volume viene aggiunto a tutto questo (in modo che ogni candela abbia un peso di volume). E la seconda linea è una media mobile della linea attuale

#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);
  }
//+------------------------------------------------------------------+
problemi: la linea principale disegna i picchi quando si forma un doji, e la media mobile non viene disegnata?
 
dmmikl86 >> :

Sto scrivendo un indicatore, la cui essenza è la seguente: se una candela è rialzista, la linea dell'indicatore è in alto, ribassista in basso. bene, il volume è aggiunto a tutto questo (in modo che ogni candela ha un peso di volume). E la seconda linea è la media mobile della linea attuale

problemi: la linea principale disegna i picchi durante la formazione doji e la media mobile non viene disegnata?


Il blocco di if può essere sostituito con un più efficiente

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] - poiché gli array di indici sono numerati da destra a sinistra. Ora le candele con zero corpi saranno processate correttamente.

Con la linea centrale buf_2 del codice non èaffatto chiaro cosa volesse l'autore.


 
OneDepo >> :

Il blocco if-value può essere sostituito con uno più efficiente

[i + 1] - perché gli array di indici sono numerati da destra a sinistra. Ora le candele con corpo zero saranno elaborate correttamente.

Con la linea centrale buf_2 del codice non èaffatto chiaro cosa volesse l'autore.


voleva che fosse una media mobile con un periodo di 14, basata sul valore dell'indicatore

 
dmmikl86 >> :

voleva che fosse una media mobile con un periodo di 14, tracciata contro il valore dell'indicatore

Allora va così:

//+------------------------------------------------------------------+
//|                                                     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);
  }
//+------------------------------------------------------------------+
 
come posso fare un trade una volta per barra e non aprire altri ordini su questa barra se c'è già un trade su questa barra?
 
Basta guardare questo thread.
 
Vinin >> :
Basta guardare questo thread.

O leggere il compito 27 nel libro di testo di Kovalev. Ci sono esempi di codice e una spiegazione dettagliata di come funziona.