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

 

Che tipo di costanti: MA_TALKING_LONG , MA_TALKING_SHORT ?

Come li dichiarate?

 
Vinin:

Prendere in considerazione la visibilità delle variabili e degli array


Li ho impostati su globale... Stesso errore.

FAQ:

Che tipo di costanti: MA_TALKING_LONG , MA_TALKING_SHORT ?

Come li dichiarate?

#define MA_TALKING_LONG                         0                             // Машки расположены к покупке
#define MA_TALKING_SHORT                        1                             // Машки расположены к продаже
#define MA_TALKING_FLAT                        -1                             // Машки указывают на флет
 

mostrare l'intestazione (dichiarazione) di questa funzione GetStateMa() - il problema è lì

cambiarlo in GetStateMa(int signal){} dovrebbe risolverlo

 
FAQ:

mostrare l'intestazione (dichiarazione) di questa funzione GetStateMa() - il problema è lì

Cambiarlo in GetStateMa(int signal){} dovrebbe risolverlo

Comunque, ecco il succo. Un professionista qui ha corretto il mio Expert Advisor, ha funzionato bene. Il mio compito era di aprire 1 solo ordine per 4 segnali diversi e ogni segnale è stato generato e calcolato separatamente. Ha sistemato il mio Expert Advisor, ma ha incasinato la sua logica.

Ho iniziato ad analizzare il suo codice. La sua scrittura è brutale, l'ho esaminata per il secondo giorno.

Prima andava così:

all'inizio:

   int signal[4];
   CalcSignals(signal);

   if (!Trade(signal))
      return (0);

Ed ecco le funzioni per chiarire cosa è cosa:

//+-------------------------------------------------------------------------------------+
//| Получение значений МА на двух соседних барах                                        |
//+-------------------------------------------------------------------------------------+
double GetCurAndPrevMA(int maPeriod, double& prevMA)
{
   prevMA = iMA(NULL, i_trading_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, 1);
   return (iMA(NULL, i_trading_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, 0));
}
//+-------------------------------------------------------------------------------------+
//| Получение положения машек между собой                                               |
//+-------------------------------------------------------------------------------------+
void CalcSignals(int& signal[])
{
   double ema365_1;
   double ema365_0 = GetCurAndPrevMA(365, ema365_1);

   for (int i = 0; i < 4; i++)
   {
      double ema1;
      double ema0 = GetCurAndPrevMA(g_maPeriod[i], ema1);
      signal[i] = SIGNAL_NO;

      if (ema1 < ema365_1 && ema0 > ema365_0)
         signal[i] = SIGNAL_BUY;
      if (ema1 > ema365_1 && ema0 < ema365_0)
         signal[i] = SIGNAL_SELL;
   }
}

In generale, è una cosa divertente vedere che una funzione come void non dovrebbe restituire nulla per definizione, ma tuttavia restituisce il valore di un elemento dell'array signal[i].

Mi chiedo se i programmatori esperti lo usano spesso? O è troppo?

Ora sto cercando di scrivere quello che mi serve vedendo i trucchi che sono presenti in quell'Expert Advisor. Perché lì non possiamo fare a meno degli array.

 
Тhoz:

Comunque, ecco il succo. Il mio Expert Advisor, che ha funzionato bene per me, è stato corretto da un professionista. Il mio compito era di aprire solo 1 ordine da 4 segnali diversi e ogni segnale è stato generato e calcolato separatamente. Ha sistemato il mio Expert Advisor, ma ha incasinato la sua logica.

Ho iniziato ad analizzare il suo codice. La sua scrittura è brutale, l'ho esaminata per il secondo giorno.

Prima andava così:

all'inizio:

Ed ecco le funzioni per chiarire cosa è cosa:

In generale, è una cosa divertente vedere che una funzione come void non dovrebbe restituire nulla per definizione, ma tuttavia restituisce il valore di un elemento dell'array signal[i].

Mi chiedo se i programmatori esperti lo usano spesso? O è troppo?

Ora sto cercando di scrivere quello che mi serve vedendo i trucchi che sono presenti in quell'Expert Advisor. Perché lì non possiamo fare a meno degli array.

Usato frequentemente, segreto in int& , double&
 
Mislaid:
È usato spesso, il segreto inint& ,double&

L'ho già capito, ma credo che sia già una perversione. Perché fare una funzione nulla allora? Non è logico. Hai bisogno di restituire qualcosa... restituiscilo attraverso una funzione di tipo int, double...

 
Si è verificato un errore durante il debug della stampante:
2013.01.06 21:06:32     2011.11.28 00:20  Base150 EURUSD,M5: not enough stack for parameter

Cosa fare?

 
hoz:

L'ho già capito, ma credo che sia già una perversione. Perché fare una funzione nulla allora? Non è logico.

È logico.

Questa funzione non restituisce nulla, esegue operazioni sugli elementi dell'array passato in essa.

 
hoz:

Ecco la mia funzione di modifica degli ordini in sospeso. Quando modifico, imposto un nuovo prezzo e un nuovo stoploss. La funzione funziona parzialmente, ma per qualche motivo il tester sta ottenendo errori 1.

La mia funzione è scritta correttamente?

se((b_mod) && (prezzoB > Ask)) OrderModify(b_ticket,priceB,priceS,0,0,Brown);
if((s_mod) && (priceS < Bid)) OrderModify(s_ticket,priceS,priceB,0,0,Brown);


Qui dovremmo considerare MarketInfo(Symbol(),MODE_STOPLEVEL) cioè

prezzoB >= Ask+ MarketInfo(Symbol(),MODE_STOPLEVEL)*Point

priceS < =Bid- MarketInfo(Symbol(),MODE_STOPLEVEL)*Point

 
PapaYozh:

Questo ha senso.

Questa funzione non restituisce nulla, opera sugli elementi dell'array che le è stato passato.


Quindi, se si passano elementi a una funzione di tipo double oint, questa può anche eseguire le stesse operazioni, ma senza alcuna perversione. Perché complicarsi la vita?