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

 
xtonic:

Indovinelli serali di Metha:

Ho importato delle citazioni dall'archivio delle citazioni, dice in 1 minuto: Database: 0 / 3665972, la finestra è vuota - cosa può significare?

Quando apro il grafico standalone EURUSD,M1 - mostra grandi lettere: "Pending Update" - cosa può significare?

Sto eseguendo un test - TestGenerator: nessun dato storico 'EURUSD1'.

Ricaricare il terminale. Se tutto è stato fatto correttamente, dovrebbe apparire.

 

dove leggere come viene disegnato un indicatore con i seguenti parametri

SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1, color1)

SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, color2)

Non capisco perché a volte disegna a volte no - capisco che se disegnate una linea normale DRAW_LINE - il valore del buffer dell'indicatore imposterà l'asse y, ma il numero dell'elemento corrisponde al numero di barre sul grafico

perché il segmento orizzontale sulla barra appare quando due buffer di indicatori sono sulla stessa barra, ma quando uno dei buffer di indicatori è EMPTY_VALUE - niente, e non capisco la logica di colorazione

 
ToLik_SRGV:

Ricaricare il terminale. Se tutto è stato fatto correttamente, dovrebbe apparire.


Ho già fatto tutto questo, ho anche riavviato il sistema, questo è il punto.

 
xtonic:


Ho già fatto tutto questo, ho anche riavviato il sistema, questo è il punto.


Avete importato citazioni da dove?

Se tu potessi spiegare esattamente cosa stai facendo, passo dopo passo, allora avresti più probabilità di ottenere aiuto qui.

 

Brava gente, abbiate pietà - non posso ottenere: comprare/vendere dopo un altro picco di CCI lisciato.

Ho provato a dichiarare il secondo buffer (ha più senso per me), nessun errore, log - silenzioso, stampa, probabilmente come una capra - non capisco niente.

 // Торговые критерии
   double c1b[];
   ArrayResize(c1b,PeriodB);
   double c1b_1[];
   ArrayResize(c1b_1,AvgB);
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   {
   c1b_1[i]=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i);
   }
   }
   
   double c1s[];
   ArrayResize(c1s,PeriodS);
   double c1s_1[];
   ArrayResize(c1s_1,AvgS);
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   {
   c1s_1[i]=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i);
   }
   }

if (NormalizeDouble(c1b_1[i],4)<NormalizeDouble(c1b_1[i+2],4)&&NormalizeDouble(c1b_1[i+2],4)>NormalizeDouble(c1b_1[i+3],4))
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1s_1[i],4)>NormalizeDouble(c1s_1[i+2],4)&&NormalizeDouble(c1s_1[i+2],4)<NormalizeDouble(c1s_1[i+3],4))
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

L'allegato contiene l'intero Expert Advisor. Dopo aver testato in visualizzazione, il CCI viene disegnato sia in questa che nella vecchia versione (il file allegato è tracciato), ma quello lisciato no e quindi i trade non vengono aperti.

Vecchia variante:

// Торговые критерии
   double c1b[];
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   }
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,1);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,3);
   
   double c1s[];
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   }
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,1);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,3);

if (NormalizeDouble(c1b_1,4)<NormalizeDouble(c1b_2,4)&&NormalizeDouble(c1b_2,4)>NormalizeDouble(c1b_3,4))
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

Capisco che nessuno ha il tempo di pulire gli altri, consigliatemi almeno dove esattamente inserire la Stampa e dove cercare il feedback nel diario o nei log e a cosa dovete prestare attenzione.

File:
21.mq4  15 kb
 

Buon pomeriggio!

Ho una domanda sulla chiusura parziale, perché ogni società di intermediazione ha le sue regole. Non capisco come fare la contabilità degli ordini correttamente:

Il problema: abbiamo bisogno di trovare un tick di un ordine appena piazzato in questo particolare TS senza usare un mago.

1) Ho notato che un ordine parzialmente chiuso ha un commento, si dovrebbe essere in grado di leggere il commento // Non sono sicuro che tutte le società di brokeraggio scrivono commenti

2) ricerca per data di apertura dell'ordine // non so se funzionerà per tutte le società di intermediazione

3) cerca un nuovo tick subito dopo una chiusura parziale e controlla il volume, ecc. per vedere se è l'ordine giusto

4) qualcos'altro

 
wenay:

come fare meglio il conteggio degli ordini:

leggete l'aiuto lì:
comment - Ordina il testo del commento. L'ultima parte del commento può essere cambiata dal server commerciale.

magic - Il numero magico dell'ordine. Può essere usato come identificatore definito dall'utente.

La magia è un buon modo per aiutarvi

Per cercare un ordine, fai come segue

if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {

.......

 
Craft:

Si prega di consigliare dove esattamente Print dovrebbe essere inserito e dove cercare il feedback nel registro o nei file di registro e a cosa bisogna prestare attenzione.

Stampate dove volete controllare la situazione (per esempio, se fate un ordine - stampate il fatto dell'immissione o un errore di immissione dell'ordine nel giornale).

Se non siete sicuri che la vostra funzione possa essere chiamata, cioè la condizione di chiamata della funzione non sarà mai soddisfatta, aggiungete il Print all'input della funzione.

Stampa letta nel terminale nella scheda "Esperti

 
IgorM:

dove leggere come viene disegnato un indicatore con i seguenti parametri

SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1, color1)

SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, color2)

Non capisco perché a volte disegna a volte no - capisco che se disegnate una linea normale DRAW_LINE - il valore del buffer dell'indicatore imposterà l'asse y, ma il numero dell'elemento corrisponde al numero di barre sul grafico

quali sono i parametri nel buffer dell'indicatore quando il suo tipo è DRAW_HISTOGRAM? perché quando due buffer dell'indicatore finiscono su una barra, appare un segmento orizzontale sulla barra, ma quando uno dei buffer dell'indicatore è uguale a EMPTY_VALUE - niente, e non capisco la logica di colorazione

Lostile di DRAW_HISTOGRAM non è fondamentalmente diverso dagli altri stili di disegno delle linee, l'asse X è rappresentato dai numeri delle barre, l'asse Y - dai valori della matrice degli indicatori, ma come si dice, c'è una sfumatura.
Prendiamo un semplice indicatore come esempio:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_width1 2
double SIMPLE[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0, SIMPLE);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   for(int shift = Bars-IndicatorCounted()-1; shift >= 0; shift--){
      SIMPLE[shift] = 1;
   }
}
//+------------------------------------------------------------------+

Una matrice di indicatori, finestra separata, a tutti gli elementi viene assegnato il valore 1. Gettalo sul grafico, e cosa vediamo (Figura 1 a sinistra):

La "Finestra dati" mostra le letture dell'indicatore, ma non c'è niente nella sua finestra. Questa è la sfumatura, MT4 non sa che 1 è quanto alto? Quanto in alto dovrebbe essere disegnata la barra? Non ha nulla da cui attingere, cioè, in parole povere, non c'è un prezzo di divisione per le barre. Come avete notato, non c'è un parametro separato che imposta l'altezza delle barre, la loro altezza è impostata automaticamente, relativamente agli altri elementi. Lasciateci aiutare MT4 e impostare il prezzo di divisione, possiamo farlo programmaticamente:

#property indicator_minimum 0
#property indicator_maximum 2

Puoi semplicemente fissare i minimi (diciamo 0) e i massimi (diciamo 2) nelle impostazioni dell'indicatore.
E tutto va immediatamente a posto (Fig. 2, a destra), ora il terminale sa quanto in alto deve essere disegnata la barra, 1 è nel mezzo tra 0 e 2 :))) In questo esempio, la matrice dell'indicatore ha un valore (specialmente per mostrare la "sfumatura") e dobbiamo indicare al terminale quanto o poco sia. Se sostituiamo i dati dell'array con 1, per esempio Close[shift], il terminale non imposterà alcun vincolo rigido e disegnerà un'immagine "ala MAKD".

Un quadro un po' diverso se si disegna l'istogramma non in una finestra separata, ma in generale. Lasciamo il valore di Close[shift] per la prima matrice di indicatori, basta cambiare il parametro:

#property indicator_chart_window

Otteniamo di nuovo la stessa immagine (Fig. 3, a sinistra). I valori sono presenti ma non visualizzati.

Il terminale ha bisogno di una base per il calcolo automatico dell'altezza della barra, e poiché i minimi e i massimi non possono essere fissati nella finestra generale, apparirà la seconda serie di indicatori. Aggiungiamo la seconda linea e la impostiamo a 0.

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_width1 2
#property indicator_color2 Red
#property indicator_width2 2
double SIMPLE[];
double SIMPLE2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0, SIMPLE);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1, SIMPLE2);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   for(int shift = Bars-IndicatorCounted()-1; shift >= 0; shift--){
      SIMPLE[shift] = Close[shift];
      SIMPLE2[shift] = 0;
   }
}
//+------------------------------------------------------------------+

Gli array di indicatori iniziano a essere visualizzati uno rispetto all'altro. E tutto sarà come dovrebbe essere (Fig 4, a destra). Le colonne sono disegnate da SIMPLE[shift] a SIMPLE2[shift].

E infine, c'è il codice dell'indicatore che riempie le candele, blu se è su e rosa se è giù. Di nuovo due matrici per ogni colore (il disegno è dalla casa alla fine (da Open a Close)).

//+------------------------------------------------------------------+
//|                                                       SIMPLE.mq4 |
//|                        Copyright © 2010,Анатолий Сергеев  |
//|                                            mql.sergeev@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Анатолий Сергеев"
#property link      "mql.sergeev@yandex.ru"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_width1 2
#property indicator_color2 Blue
#property indicator_width2 2
#property indicator_color3 Pink
#property indicator_width3 2
#property indicator_color4 Pink
#property indicator_width4 2
double Blue_home[];
double Blue_end[];
double Pink_home[];
double Pink_end[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0, Blue_home);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1, Blue_end);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(2, Pink_home);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexBuffer(3, Pink_end);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   for(int shift = Bars-IndicatorCounted()-1; shift >= 0; shift--){
      if(Close[shift] > Open[shift]){
         Blue_home[shift] = Open[shift];
         Blue_end[shift] = Close[shift];
      }else{
         Pink_home[shift] = Open[shift];
         Pink_end[shift] = Close[shift];
      }
   }
}
//+------------------------------------------------------------------+

 
IgorM:
leggere la guida lì:
comment - Testo del commento dell'ordine. L'ultima parte del commento può essere cambiata dal server commerciale.

magic - Il numero magico dell'ordine. Può essere usato come identificatore definito dall'utente.

Usa la magia per aiutarti

Per controllare un ordine, fate come segue:

if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {

.......



Compito: devi trovare il segno di spunta di un ordine appena apparso per questo particolare TS senza usare una magia .
Motivazione: