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

 
boris.45:
Come posso mettermi in contatto con voi? Ho molte domande e vorrei qualche consiglio.
Quando fai una domanda a qualcuno, clicca su "rispondi" nell'angolo in basso a destra del post della persona a cui ti stai rivolgendo. Altrimenti la gente si chiederà a chi è rivolta la tua domanda... :)
 
Potete dirmi se è possibile inviare un comando di disconnessione all'EA dallo script?
 
granit77:
Sostituirei un interruttore con un array già pronto, perché assegnare ogni volta dei valori predefiniti?

Grazie, ma potresti essere più specifico? Perché i valori predefiniti qui sono timeframes, ma il codice che segue i casi per i diversi indicatori sarà diverso... Probabilmente, è più facile stendere un po' più di codice... :) In generale sono molto lento oggi - non ho potuto dormire ieri sera e sono ancora nel limbo...

int AnaliseFunc (string sy, int tf)
{
   
   CurAsk   =MarketInfo(Symbol(),MODE_ASK);
   CurBid   =MarketInfo(Symbol(),MODE_BID);
   OpnPrice =iOpen(NULL,PERIOD_M5,0);
   OpnPrice1=iOpen(NULL,PERIOD_M5,1);
   ClsPrice1=iClose(NULL,PERIOD_M5,1);
         
   if (sy=="" || sy=="0") sy=Symbol();
double
   BB_1  =iCustom(sy,tf,"BB_MA",13,1,1,1),
   BB_2  =iCustom(sy,tf,"BB_MA",13,1,1,2),
   BB_3  =iCustom(sy,tf,"BB_MA",13,1,1,3),
   AO1   =iAO(sy,tf,1),
   AO2   =iAO(sy,tf,2),
   AO3   =iAO(sy,tf,3),
   AC1   =NormalizeDouble(iAC(sy,tf,1),8)*1000,
   AC2   =NormalizeDouble(iAC(sy,tf,2),8)*1000,
   AC3   =NormalizeDouble(iAC(sy,tf,3),8)*1000,
   AC4   =NormalizeDouble(iAC(sy,tf,4),8)*1000,
   AC5   =NormalizeDouble(iAC(sy,tf,5),8)*1000,
   SpMan1=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,1),
   SpMan2=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,2),
   DeM_1 =iDeMarker(sy,tf,14,1),
   DeM_2 =iDeMarker(sy,tf,14,2),
   Mom_1 =iMomentum(sy,tf,14,PRICE_CLOSE,1),
   Mom_2 =iMomentum(sy,tf,14,PRICE_CLOSE,2),
   Mom_3 =iMomentum(sy,tf,14,PRICE_CLOSE,3);
   
//---------------- Проверка на разворот BB_MA -------------------------------------------------------   
   
   if (BB_1>BB_2 && BB_2<=BB_3 && BB_1<0)                               // Найден разворот BB вверх
      {
      switch (tf)
         {
            case 1:     TrBBTurnUP_M1 =true;  TrBBTurnDN_M1=false;      // Флаг разворота вверх на М1
            case 5:     TrBBTurnUP_M5 =true;  TrBBTurnDN_M5=false;      // Флаг разворота вверх на М5
            case 15:    TrBBTurnUP_M15=true;  TrBBTurnDN_M15=false;     // Флаг разворота вверх на М15 
            case 30:    TrBBTurnUP_M30=true;  TrBBTurnDN_M30=false;     // Флаг разворота вверх на М30 
            case 60:    TrBBTurnUP_H1 =true;  TrBBTurnDN_H1=false;      // Флаг разворота вверх на H1
            case 240:   TrBBTurnUP_H4 =true;  TrBBTurnDN_H4=false;      // Флаг разворота вверх на H4
            case 1440:  TrBBTurnUP_D1 =true;  TrBBTurnDN_D1=false;      // Флаг разворота вверх на D1
            case 10080: TrBBTurnUP_W1 =true;  TrBBTurnDN_W1=false;      // Флаг разворота вверх на W1
            case 43200: TrBBTurnUP_MN =true;  TrBBTurnDN_MN=false;      // Флаг разворота вверх на MN
         }
      }
   if (BB_1<BB_2 && BB_2>=BB_3 && BB_1>0)                               // Найден разворот BB вниз
      {
      switch (tf)
         {
            case 1:     TrBBTurnUP_M1 =false;  TrBBTurnDN_M1=true;      // Флаг разворота вниз на М1
            case 5:     TrBBTurnUP_M5 =false;  TrBBTurnDN_M5=true;      // Флаг разворота вниз на М5
            case 15:    TrBBTurnUP_M15=false;  TrBBTurnDN_M15=true;     // Флаг разворота вниз на М15 
            case 30:    TrBBTurnUP_M30=false;  TrBBTurnDN_M30=true;     // Флаг разворота вниз на М30 
            case 60:    TrBBTurnUP_H1 =false;  TrBBTurnDN_H1=true;      // Флаг разворота вниз на H1
            case 240:   TrBBTurnUP_H4 =false;  TrBBTurnDN_H4=true;      // Флаг разворота вниз на H4
            case 1440:  TrBBTurnUP_D1 =false;  TrBBTurnDN_D1=true;      // Флаг разворота вниз на D1
            case 10080: TrBBTurnUP_W1 =false;  TrBBTurnDN_W1=true;      // Флаг разворота вниз на W1
            case 43200: TrBBTurnUP_MN =false;  TrBBTurnDN_MN=true;      // Флаг разворота вниз на MN
         }
      }
//---------------------- Проверка на разворот Momentum -----------------------------------------------
   
   if (Mom_1>Mom_2 && Mom_2<=Mom_3 && Mom_1<100.0)
      {
      switch (tf)
         {
            case 1:     TrMomTurnUP_M1 =true;  TrMomTurnDN_M1=false;      // Флаг разворота вверх на М1
            case 5:     TrMomTurnUP_M5 =true;  TrMomTurnDN_M5=false;      // Флаг разворота вверх на М5
            case 15:    TrMomTurnUP_M15=true;  TrMomTurnDN_M15=false;     // Флаг разворота вверх на М15 
            case 30:    TrMomTurnUP_M30=true;  TrMomTurnDN_M30=false;     // Флаг разворота вверх на М30 
            case 60:    TrMomTurnUP_H1 =true;  TrMomTurnDN_H1=false;      // Флаг разворота вверх на H1
            case 240:   TrMomTurnUP_H4 =true;  TrMomTurnDN_H4=false;      // Флаг разворота вверх на H4
            case 1440:  TrMomTurnUP_D1 =true;  TrMomTurnDN_D1=false;      // Флаг разворота вверх на D1
            case 10080: TrMomTurnUP_W1 =true;  TrMomTurnDN_W1=false;      // Флаг разворота вверх на W1
            case 43200: TrMomTurnUP_MN =true;  TrMomTurnDN_MN=false;      // Флаг разворота вверх на MN
         }
      }
      
   if (Mom_1<Mom_2 && Mom_2>=Mom_3 && Mom_1>100.0)
      {
      switch (tf)
         {
            case 1:     TrMomTurnUP_M1 =false;  TrMomTurnDN_M1=true;      // Флаг разворота вверх на М1
            case 5:     TrMomTurnUP_M5 =false;  TrMomTurnDN_M5=true;      // Флаг разворота вверх на М5
            case 15:    TrMomTurnUP_M15=false;  TrMomTurnDN_M15=true;     // Флаг разворота вверх на М15 
            case 30:    TrMomTurnUP_M30=false;  TrMomTurnDN_M30=true;     // Флаг разворота вверх на М30 
            case 60:    TrMomTurnUP_H1 =false;  TrMomTurnDN_H1=true;      // Флаг разворота вверх на H1
            case 240:   TrMomTurnUP_H4 =false;  TrMomTurnDN_H4=true;      // Флаг разворота вверх на H4
            case 1440:  TrMomTurnUP_D1 =false;  TrMomTurnDN_D1=true;      // Флаг разворота вверх на D1
            case 10080: TrMomTurnUP_W1 =false;  TrMomTurnDN_W1=true;      // Флаг разворота вверх на W1
            case 43200: TrMomTurnUP_MN =false;  TrMomTurnDN_MN=true;      // Флаг разворота вверх на MN
         }
      }
//---------------------- Проверка DeMarker на перепроданность/перекупленность ---------
Vedete - c'è un codice assolutamente identico, ma sta già controllando i criteri di trading di altri indicatori... Voglio solo stipare tutti i controlli di tutti gli indici utilizzati nell'EA in un unico blocco analitico, in modo da calcolare i loro valori una volta per tick, metterli in variabili e quindi utilizzare i valori delle variabili per le decisioni di trading. Non so come organizzarlo usando un array di valori predefiniti...
 
artmedia70:

Grazie, ma potresti essere più specifico? Perché i valori predefiniti qui sono timeframes, ma il codice che segue i casi per i diversi indicatori sarà diverso... Probabilmente, è più facile stendere un po' più di codice... :) Non sto pensando bene oggi - non ho potuto dormire la scorsa notte e sono ancora nel limbo...

Vedete - c'è un codice assolutamente identico, ma controlla già i criteri commerciali di altri indiretti... Voglio solo stipare tutti i controlli di tutti gli indici usati nell'EA in un blocco analitico e poi calcolerà i loro valori una volta per tick, li metterà in variabili e userà i valori delle variabili per le decisioni di trading. Non so come organizzarlo usando un array di valori predefiniti...




Forse hai solo bisogno di selezionare una priorità di calcolo, cioè sembra che tu abbia

Se (BB_1<0 ) è la prima condizione obbligatoria dopo la quale non c'è bisogno di calcolare altre BB_, bene, fate un if composto e fate i necessari calcoli BB_ nel secondo if, a condizione che il primo if sia stato fatto, e se ... else è piuttosto efficace, mentre voi avete solo if

Sono d'accordo, il codice può diventare più grande e meno leggibile, ma le prestazioni saliranno

 
IgorM:


forse avete solo bisogno di prendere la priorità di calcolo, cioè come avete

Se (BB_1<0 ) è la prima condizione obbligatoria, dopo la quale non c'è bisogno di calcolare altri BB_, allora fate un if composto e fate i calcoli necessari di BB_ nel secondo if, sempre che il primo if sia stato soddisfatto, e se . else è piuttosto efficace, mentre voi avete solo if

Sono d'accordo che il codice può diventare più grande in numero di linee e meno leggibile, ma le prestazioni saliranno.

Grazie, Igor, vedrò cosa succede. Non è quello che avevo in mente... Mi ricordo nei primi tempi dell'informatizzazione, nel 1991-94, non ricordo esattamente... Facevo programmazione in linguaggio assembly per lo ZX Spectrum... che era terribilmente lento e limitato a 64Kb di memoria... Quindi c'era un comando al processore per lavorare con l'area di memoria dello schermo per emettere rapidamente 16386Kb in quell'area. Il comando CPU documentato è stato il più veloce di tutti, lavorando con un grande set di dati. Non c'è molto che possiamo fare, ma... hanno trovato un modo per quadruplicare la velocità di uscita. C'erano comandi per lavorare con lo stack e venivano eseguiti molto più velocemente. Ecco come hanno fatto: hanno spostato lo stack in un'area inutilizzata della memoria che va subito dopo lo schermo, hanno riempito quell'area con dati grafici e poi, avendo spostato lo stack sullo schermo, hanno rapidamente saltato lo schermo preparato in memoria nell'area dello schermo con un comando che ha riempito lo stack... Solo un miracolo per quei tempi, ma per Spectrum era magia...

Anche qui, mi interessano i modi non convenzionali di lavorare... Sai, tipo vedere quali comandi vengono eseguiti in quanti cicli di clock e costruire qualcosa di simile... Cosa potrebbe sostituire i comandi di confronto logico, forse la sottrazione o qualcos'altro nella stessa vena....

 
artmedia70:

E qui sono interessato ai metodi di lavoro non standard... Come cercare quali comandi vengono eseguiti in quanti cicli di clock e costruire qualcosa di simile... Cosa potrebbe sostituire i comandi di confronto logico, forse la sottrazione o qualcosa del genere....


Penso che non lo troverai in mql - i principi di mql sono molto simili a java con sintassi C, prova a vedere quale è più veloce eseguire case o if, mi ricordo quando ho visto in turbopascal che if è più veloce
 
artmedia70:
Benvenuti qui.
 
Oper:
Sai se è possibile inviare un comando per disabilitare l'EA dallo script?

È possibile. Io, per esempio, controllo il mio EA con degli script che impostano le variabili globali in un certo stato. Gli stati di queste variabili

vengono analizzati nell'Expert Advisor e vengono eseguiti i comandi necessari.

 
Buon pomeriggio.
 
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexArrow(2,241); 
Potete dirmi come impostare correttamente la dimensione della freccia, e perché aumenta di dimensione quando si resettano le impostazioni del colore ma diminuisce quando si ricompila?
Motivazione: