[Scrivere un consulente gratis - pagina 11

 
skylord писал(а) >>

Salve.

Ho appena iniziato a imparare MQL, sto cercando di scrivere un EA...

Sto cercando di scrivere un EA basato sull'indicatore sidus v.2, voglio che apra una posizione nella direzione che ho specificato dall'EA, solo quando nasce una nuova barra, cioè al primo tick dovrebbe controllare se il segnale è sulla barra precedente, e che tipo di ordine - con uno stop e un take. Allegare il file dell'indicatore.

Non ho fortuna nel trovare questo segnale((.

Aiuto, o almeno ditemi come fare ...

Un consulente esperto sull'indicatore Sidus

forse questo ti aiuterà o la ricerca ti aiuterà!

o secondo vento!

 

Grazie vvavva. Ho una buona idea, ma salta e fa molti segnali a sinistra, ma non è quello di cui ho bisogno (

Come posso chiedere a qualcuno come richiedere all'EA lo stato del buffer dell'indicatore sulla barra precedente?

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}
else if (sigCurrent==2 && sigPrevious==1)
{
ExtMapBuffer3[i-1] = Low[i-1]-5*Point;
//ExtMapBuffer4[i] = Bid;
entry=true;
entry_point=Bid;

}
Un EA ha bisogno di una condizione corrispondente come questa

double Up;
double Down;
int res;

Up=iCustom(NULL, 0, "sidus_v.2", 3, 1);
Down=iCustom(NULL,0, "sidus_v.2",2,1);
//---- condizioni di vendita
if(Down==Low)
{
res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",MAGICMA,0,Red);
return;
}
//---- condizioni di acquisto
if(Up==High)
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,",MAGICMA,0,Blue);
return;
}

Ma è sbagliato!!!

Per favore, consigliate come agire in questo caso...

 

Salve.

Sto facendo trading in silenzio, sto usando 4 induks, linee di resistenza e supporto, tendenze, blah, blah, blah... Mi si sono rotti gli occhi sullo schermo, potete aiutarmi a inserire il segnale sonoro sulle frecce (comprare, vendere) e le stesse frecce nella storia con una linea tratteggiata (ritagliata dalla stessa)

File:
zigandzag.mq4  16 kb
 
skylord писал(а) >>

Salve.

Ho appena iniziato a imparare MQL, sto cercando di scrivere un EA...

Sto cercando di scrivere un EA basato sull'indicatore sidus v.2, voglio che apra una posizione nella direzione che ho specificato dall'EA, solo quando nasce una nuova barra, cioè al primo tick dovrebbe controllare se il segnale è sulla barra precedente, e che tipo di ordine - con uno stop e un take. Allegare il file dell'indicatore.

Non ho avuto fortuna nel trovare questo segnale((.

Aiuto, o almeno ditemi come fare ...

Ciao, ho appena eseguito il codice con i miei occhi, scusate sono un terribile lamer, potrei sbagliarmi ovviamente, ma l'indicatore fa overdraw? Cerchiamo di pensare in modo logico

for(int i=0; i<limit; i++)
   {

contare dalla barra zero a tutte le barre della storia, aumentare il contatore.

ExtMapBuffer1[ i]=iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i);
     ExtMapBuffer2[ i]=iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i);
     rsi_sig = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);

Qui è tutto chiaro.

pipdiffCurrent=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);

fanculo il macdak.

if ( pipdiffCurrent>0 && rsi_sig>50) 
     {
       sigCurrent = 1;  //Up
     }
     else if ( pipdiffCurrent<0 && rsi_sig<50)
     {
       sigCurrent = 2;  //Down

Se macdac è maggiore di zero e RSI è maggiore di 50, il sig è 1, e se meno, è 2

Finora tutto bene.

if (sigCurrent==1 && sigPrevious==2)
     {

qui non capisco... se sia macdak è positivo e RSI è maggiore di 50 e macdak è negativo e RSI è inferiore a 50... dato che c'è una condizione nel codice sottostante

sigPrevious=sigCurrent;

allora possiamo equipararli...

e rubare il futuro è una cattiva idea...

ExtMapBuffer3[i-1]

No, sostituiamola con questa, o piuttosto rielaboriamola completamente, dato che conosciamo già la logica:

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
//----
extern int       FastEMA=14;
extern int       SlowEMA=21;
extern int       RSIPeriod=17;
//----
double BuyBuffer[], SellBuffer[];
int pre_signal = 0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
     
//----
      SetIndexBuffer(0, BuyBuffer);
      SetIndexLabel(0, "Buy");
      SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(0, 241);
//----
      SetIndexBuffer(1, SellBuffer);
      SetIndexLabel(1, "Sell");
      SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(1, 242);
//----
      return(0);
  }

int deinit()
  {
      
  }

int start()
  {
  

      int counted_bars = IndicatorCounted();

      
   int limit = Bars - 17;

   if( counted_bars > 17) 
     { 
       limit = Bars - counted_bars; 
     }

      for(int i = limit; i >= 0; i --)
        {
             BuyBuffer[ i] = EMPTY_VALUE;
             SellBuffer[ i] = EMPTY_VALUE;      
             
                
                 double a = iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i+1);
                 double s = iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i+1);
                 
                
                
                 double a1 = iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i);
                 double s1 = iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i);
                 double d1 = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i)-50;
             //----
           if( a< s && a1> s1 && d1>0)
               {
                    BuyBuffer[ i] = Low[ i] - iATR(NULL, 0, 14, i);
                    
               }
             if( a> s && a1< s1 && d1<0)
               {
                    SellBuffer[ i] = High[ i] + iATR(NULL, 0, 14, i);         
                    
               }
        
      
        }
      return(0);
  }

Ora guarda, è un'immagine triste, confrontala:

Anche se posso sbagliarmi ovviamente e l'indicatore non ridisegna, ma perdonami, e forse puoi usare il prezzo di apertura (specialmente in RSI), ma non quello di chiusura, in modo che il segnale appaia sulla barra, dove dovrebbe =(

 

Grazie per la preoccupazione vtoroe_dyxanie )))) Non ho scritto l'indicatore, non lo ridisegna secondo le mie osservazioni. Lo uso dal primo tick della barra successiva quando si è già bloccato. Ecco perché ho bisogno di sapere cosa c'era sulla barra precedente al primo tick. E perché ruba il futuro? Mi sembra che in un dato tick, se c'è una tale corrispondenza, assegna uno a sigCurrent e alla fine della variabile sigPrevious assegna lo stesso sigCurrent:

sigPrevious=sigCurrent;

e poi al prossimo tick se sigCurrent è già 2 e la variabile sigPrevious riempie naturalmente il buffer con 1:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}

E per quanto riguarda questo:

ExtMapBuffer3[i-1]

Io stesso non lo capisco bene...

Ma sembra funzionare bene, le frecce disegnano sulla barra in cui appare il segnale!

Ma quando ho rimosso -1, sono apparse un sacco di sorprese(



 
skylord >> :

Grazie per la preoccupazione vtoroe_dyxanie )))) Non ho scritto l'indicatore, non lo ridisegna secondo le mie osservazioni. Lo uso dal primo tick della barra successiva quando si è già bloccato. Ecco perché ho bisogno di sapere cosa c'era nella barra precedente al primo tick. E perché ruba il futuro? Mi sembra che in un dato tick, se c'è una tale corrispondenza, assegna uno a sigCurrent e alla fine della variabile sigPrevious assegna lo stesso sigCurrent:

sigPrevious=sigCurrent;

e poi al prossimo tick se sigCurrent è già 2 e la variabile sigPrevious riempie naturalmente il buffer con 1:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}

E per quanto riguarda questo:

ExtMapBuffer3[i-1]

Io stesso non lo capisco bene...

Ma sembra funzionare bene, le frecce disegnano sulla barra in cui appare il segnale!

Ma quando ho rimosso -1, ci sono state molte sorprese(
.



Ma ha un altro effetto collaterale. A volte, quando le condizioni sono soddisfatte, dà un segnale ma non disegna frecce. Ma quando lo metto di nuovo su un grafico, tutte le frecce tornano al loro posto. C'è un modo per farlo compilare di nuovo su un grafico o per aggiornare di nuovo i suoi buffer?

 
skylord писал(а) >>

Perché ruba il futuro? Sembra assegnare uno a sigCurrent su un dato tick se c'è una tale corrispondenza, e assegna lo stesso sigCurrent alla variabile sigPrevious alla fine:

sigPrevious=sigCurrent;

e poi al prossimo tick se sigCurrent è già 2 e la variabile sigPrevious riempie naturalmente il buffer con 1:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}



Il tuo vero, disattento me...

Circa: "Lo uso dal primo tick della barra successiva quando è già fissato. Ecco perché ho bisogno di sapere al primo tick cosa c'era nella barra precedente. "E mi chiedo davvero se non possiamo usare

doppio iCustom( .... int shift)

l'aiuto onnisciente dice che

turno - Indice del valore ottenuto dal buffer dell'indicatore (spostamento relativo alla barra corrente del numero specificato di periodi indietro).

Mi chiedo se si può scrivere in questo modo (me lo sono chiesto anch'io)

per (i=0; i<limite;i++){

se (iCustom(NULL, 0, "sidus_v.2", 3, i+1)<0 && iCustom(NULL, 0, "sidus_v.2", 3, i)>0)

....

dal momento che ooooopsie Wise forum utenti difficilmente condiscendere a due nerd, lasciato a migliorare le mie abilità da soli, per esso può tornare utile.

 
vtoroe_dyxanie писал(а) >>

È vero, sono disattento...

Circa: "Lo uso a partire dal primo tick della barra successiva, quando si è già bloccato. Ecco perché ho bisogno di sapere al primo tick cosa c'era nella barra precedente. "E mi chiedo davvero se non possiamo usare

doppio iCustom( .... int shift)

riferimento onnisciente dice che

turno - Indice del valore ottenuto dal buffer dell'indicatore (spostamento relativo alla barra corrente del numero specificato di periodi indietro).

Mi chiedo se si può scrivere in questo modo (me lo sono chiesto anch'io)

per (i=0; i<limite;i++){

se (iCustom(NULL, 0, "sidus_v.2", 3, 1)<0 && iCustom(NULL, 0, "sidus_v.2", 3, 0)>0)

....

come oooooovery saggi partecipanti al forum sono improbabili per condiscendere ai due nubs, lasciati a migliorare le loro abilità per conto proprio, per esso può tornare utile.

No non può =(

Merda, allora come risolvere questo problema? Beh, visto che ne hai già parlato: https://www.mql5.com/ru/forum/117268 lo terremo d'occhio =)

 
vtoroe_dyxanie писал(а) >>

Non si può fare =(

Amico, allora come si risolve questa questione? Beh, visto che hai già iniziato un thread: 'Come scoprire la direzione da un EA' terremo d'occhio =)

>> Farò un po' di tracking per l'azienda!?)

 
vtoroe_dyxanie писал(а) >>

Non si può fare =(

Amico, allora come si risolve questa questione? Beh, visto che hai già iniziato un thread: 'Come conoscere la direzione da un EA' terremo d'occhio =)

>> hey! ti ricordi che ti ho chiesto aiuto? se non è troppo difficile, puoi dirmi di più? quello che hai fatto per me è quello che ho scritto ora (volevo che l'indicatore mostrasse i timeframe più vicini in una finestra) questo è quello che????

File:
test1.mq4  6 kb