[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 130

 

ma c'è un altro codice nell'EA:

int CloseMarket()
   {
    for (int j=0; j<OrdersTotal(); j++)
      {
       OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()<2)
         {
          CloseOrder(OrderTicket(),OrderLots());
          j--;
         }
      }
   } 
 
alex12:

Ma c'è un altro codice nell'EA:

mettete per esempio Print("close by CloseMarket ", j); in questa funzione e qualcosa di simile in quella precedente che avete postato. eseguitela e guardate nei log per vedere quale di queste stampe appare per analizzare quale si innesca. poi allo stesso modo registrate i valori delle variabili controllate nelle condizioni di esecuzione della chiusura e trovate le ragioni del loro innesco...

 
alsu:
E cosa vi impedisce di mettere l'EA sulla finestra esatta in cui volete disegnare?


Il mio EA funziona meglio su M1, perché è meglio a M1 e apre 1 trade all'apertura della barra M5, inoltre ricarica se le condizioni lo permettono. Uso anche indicatori su M5 e altri TF. Ed è meglio testare su M1 all'apertura della barra, mentre su altri TF con tutti i tick prova male.

Non disegno, vedo solo i risultati dei calcoli fatti dall'EA e visualizzati in somments per assicurarmi che tutto sia in ordine. Grazie per l'attenzione e l'aiuto!

 
borilunad:


Il mio EA funziona meglio su M1, in quanto pesca meglio su M1 e apre 1 trade all'apertura della barra M5, inoltre ricarica se le condizioni lo permettono. E uso gli indicatori su M5 e altri TF. Ed è meglio testare su M1 all'apertura della barra, mentre su altri TF con tutti i tick prova male.

Non disegno, vedo solo i risultati dei calcoli fatti dall'EA e visualizzati in somments per assicurarmi che tutto sia in ordine. Grazie per l'attenzione e l'aiuto!

Su M1, e su M5 i tick sono presi dalla stessa fonte, e si può usare qualsiasi timeframe da qualsiasi grafico, basta sostituire Close[] con iClose, ecc. Per testarlo meglio, dovresti fare dei file fxt migliori dai tick, qui c'è un esempio, ma in generale google, ci sono molte informazioni su questo argomento.
 
alsu:
Sia su M1 che su M5 i tick sono presi dalla stessa fonte, e si può usare qualsiasi timeframe da qualsiasi grafico, basta sostituire Close[] con iClose, ecc. Per testarlo meglio, devi fare dei file fxt migliori dai tick, qui c'è un esempio, ma in generale google, c'è un sacco di informazioni su questo argomento.

La pratica ha dimostrato che è meglio aprire su Op e testare anche meglio, che su tick. Non sono affatto appassionato di zecche. Quando la depo lo permetterà, potrei passare a un TF più alto, che mostrerà risultati migliori in un giorno. Non lascio accordi per la notte per dormire bene. Grazie ancora!
 
smshev:

Print("Close by CloseMarket ", j); in questa funzione e qualcosa di simile in quella precedente che hai postato. Eseguila e cerca nel log i risultati di queste stampanti per analizzare quale si innesca. Poi allo stesso modo registra i valori delle variabili controllate nelle condizioni di chiusura e trova le ragioni del loro innesco...

Grazie.
 
borilunad:

La pratica ha dimostrato che è meglio aprire su Orep e testare meglio, anche, che sulle zecche. E non mi piacciono affatto le zecche. Quando la depo lo permetterà, potrei passare a un TF più alto, che mostrerà risultati migliori entro un giorno. Non lascio accordi per la notte per dormire bene. Grazie ancora!
Non sto dicendo questo, sto dicendo che differenza fa dove è attaccato l'EA? Se è scritto correttamente, non fa differenza dove si trova: anche se è sul grafico della borsa mongola, ma se è impostato per lavorare su EURUSD 1 minuto, lo farà. E non è difficile da programmare, basta cambiare un paio di linee come regola.
 

Caro signor programmatore! Non riesco a disegnare una linea orizzontale dal valore numerico massimo della finestra dell'indicatore MACD.

Codice


#proprietà indicator_separate_window
#proprietà indicator_buffers 3
#proprietà indicator_color1 Lime
#property indicator_color2 Red
//--- buffer
doppio ExtMapBuffer1[];
doppio ExtMapBuffer2[];
doppio topBuffer[];


bool initFinished=false; // aggiungere una variabile che ricordi lo stato di inizializzazione.
// false - l'inizializzazione non è ancora avvenuta.
// true - è stato inizializzato
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzato
//+------------------------------------------------------------------+
int init()
{
//---- indicatori
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_NONE);
SetIndexBuffer(2,topBuffer);
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di iterazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),
limite;

se(barre contate>0)
barre contate..;

limit=Bars-counted_bars;
//----
for(int i=0;i<limit;i++)

{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);

se(initFinished==false)
{
IndicatoreNomeCorto("MACD_max-min");

int win_idx=WindowFind("MACD_max-min");
// trova il numero della nostra sottofinestra dell'indicatore

se(win_idx<0)
{
// se il numero di sottofinestra è -1, c'è un errore
Stampa("Finestra non trovata");
ritorno(0);
}

double top=WindowPriceMax(win_idx);
/trova il valore massimo della scala verticale della sottofinestra specificata del grafico corrente


ObjectCreate("max",OBJ_HLINE,win_idx,0,top);
// disegna una linea orizzontale in una sottofinestra del nostro indicatore

ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);

WindowRedraw();
// ridisegna la finestra per vedere la linea

initFinished=true;
// il disegno è finito

}

topBuffer[i]=top;


}

//----
ritorno(0);
}

//+------------------------------------------------------------------+


Sembra che nella linea

double top=WindowPriceMax(win_idx);

la variabile superiore non ottiene alcun valore e nel

ObjectCreate("max",OBJ_HLINE,win_idx,0,top);

al suo posto (cioè al posto della variabile top) ottengo automaticamente 0 (zero). Quindi, ottengo una linea zero nella finestra richiesta e nel colore richiesto. topBuffer[] è anche vuoto. Se in questa linea al posto della variabile top metto un valore numerico, la linea prende questo valore fisso.

File:
 
IndicatorShortName sarebbe meglio spostarlo in init()
 
alsu:
IndicatorShortName dovrebbe essere spostato in init()
Quando aprite l'indicatore, l'oggetto non appare, dovreste inoltre aprire la finestra con le proprietà dell'indicatore, chiuderla e poi l'oggetto sarà visibile.