avventure di un principiante - pagina 11

 
niko:
grazie CB, avrei dovuto notarlo, quindi l'errore era giusto alla fine (130).

Funziona allora?


CB

 

Hey CB, Sta eseguendo le transazioni ma non ho fatto l'esame dettagliato delle transazioni per vedere se la logica è seguita correttamente (sembra essere a prima vista). Quindi questo è il momento in cui dico un enorme 'GRAZIE!!!!' :-)

C'è ancora un bel po' di strada da fare prima che la strategia funzioni con profitto, dato che il codice è solo un modo per automatizzare le operazioni, ho bisogno di fare un po' di lavoro da parte mia per perfezionare la strategia stessa. Sembra che tutto questo sforzo sia stato ripagato, ma sono ancora super perplesso con il codice. Comincerò a fare dei piccoli codici per conto mio per visualizzare i commenti sui miei grafici, e pasticciare con quelli, per aiutarmi a imparare le funzioni e le altre cose che hai usato. Apprezzo molto il tuo aiuto con questo CB, e la tua pazienza mentre continuavo a chiedere la stessa cosa e a fare gli stessi errori più e più volte. Grazie!

 
CB, questo mi ha ricordato qualcosa. Come potrei fare una modifica al tuo codice per permettere a 2 o al massimo 3 trade di essere aperti nella stessa direzione (questa è come una versione 2 del tuo codice). Abbiamo usato l'OP_BUY/OP_SELL per il vecchio codice quindi dovremo cambiare alcune cose. Se mi dici in forma di 'scheletro' cosa fare (es: costruisci una funzione per fare questo...) allora posso provare a codificarlo e riportartelo per la revisione. In questo modo è meglio che se lo codifichi tu stesso, perché posso seguire la tua logica e imparare i pezzi di codifica. Cosa ne pensi? (vedo che avremo una variabile esterna in cui impostiamo quanti scambi ci sono consentiti nella stessa direzione, poi facciamo una funzione per calcolare gli acquisti, un'altra per calcolare le vendite, poi chiamiamo queste due funzioni in start() e controlliamo la variabile esterna anche lì... qualcosa del genere?
 

Sarà facile.

Imposta un parametro che è il numero massimo di ordini aperti. Esternatelo se avete bisogno di cambiarlo frequentemente.

Poi implementate cambiando solo la funzione fnOrderDuplicate() - non dovreste cambiare la funzione start(). Questo aiuterà a mantenere l'architettura esistente dell'applicazione.


CB

 
Cavolo, vorrei che un giorno potessi dire "sarà facile!". ok, lo faccio e vediamo cosa succede! grazie!
 

Hey CB, ho passato tipo 2 ore a cercare di fare quello che hai chiesto nel post sopra, ho guardato altri codici, documentazione, e nessun progresso (non so proprio cosa fare). Amico, continuo a rimanere bloccato così, è così fastidioso, anche con le cose più semplici! Ci deve essere un modo per imparare più facile di come sto andando al momento, come mi sento non sto avendo alcun progresso nell'apprendimento, voi ragazzi state gentilmente scrivendo tutto il codice per me


bool fnOrderDuplicate()
 {
  iDuplicateOrders = 0;                                  //setting orderdup to zero
  iOrders = OrdersTotal()-1;                             //iOrders returns market orders count - 1. So if zero orders, we get -1
  for (int i= iOrders; i>=0; i--)                         // the loop to cycle through total orders
   {
    OrderSelect( i, SELECT_BY_POS, MODE_TRADES);            //select order for function
    if ((OrderType() != OP_BUY) && (OrderType() != OP_SELL))      //if order is NOT op-buy and is NOT op-sell, sCurrentOrderType = other (ie no order)
     sCurrentOrderType = "OTHER";
    if (OrderType() == OP_BUY)                           //if order=buy, sCurrent OrderType = buy
     sCurrentOrderType = "BUY";                          //***7Jul09 ';' was missing at end of line
    if (OrderType() == OP_SELL)                          //***7Jul09: the end ')' was missing.
     sCurrentOrderType = "SELL";                         //if orderfound = sell, sCurrentOrder= sell
    if ((OrderSymbol() == Symbol()) && ( sCurrentOrderType == sSignal))  //if ordersymbolfortheorder= symbolforchart && ScurrentOrder = sSignal(fn_entryrules) 
        iDuplicateOrders++;                              //iDuplicateOrders is added 1
   }
  if ( iDuplicateOrders == 0)                             //if iduporders = 0 then fnOrderDuplicate = false, otherwise it's true.
   return(false);
  return(true);
 }
 
hey CB, qualche aiuto sul punto di cui sopra, come fissare il codice per fare un trade multiplo in 1 direzione?
 
niko:
hey CB, qualche aiuto sul punto precedente, come fissare il codice per fare un trade multiplo in 1 direzione?

Basta cambiare: if (iDuplicateOrders == 0) in: if (iDuplicateOrders<= iMaxDuplicateOrders)

CB

 

Ciao CB, grazie per questo. Con questa opzione non posso regolare quanti ordini aperti sono consentiti in 1 direzione (diciamo che faccio extern iMaxDuplicateOrders = 4;) l'ea eseguirà 4 short, e non distribuire il parametro in modo uniforme (es: 2 short max, 2 longs max). Dovrei provare a fare un duplicato di bool fnOrderDuplicate (es: bool fnOrderDuplicateBuys, e bool fnOrderDuplicateSells) e poi fare riferimento a ciascuno rispettivamente in bool fnShouldWeTrade. Nella mia mente questo potrebbe funzionare, cosa ne pensate?

 
niko:

Ciao CB, grazie per questo. Con questa opzione non posso regolare quanti ordini aperti sono consentiti in 1 direzione (diciamo che faccio extern iMaxDuplicateOrders = 4;) l'ea eseguirà 4 short, e non distribuire il parametro in modo uniforme (es: 2 short max, 2 longs max). Dovrei provare a fare un duplicato di bool fnOrderDuplicate (es: bool fnOrderDuplicateBuys, e bool fnOrderDuplicateSells) e poi fare riferimento a ciascuno rispettivamente in bool fnShouldWeTrade. Nella mia mente questo potrebbe funzionare, cosa ne pensate?


Impostando iMaxDuplicateOrders = 4, il massimo sarà di 4 ordini in ogni direzione, poiché controlliamo la direzione prima di incrementare il contatore.


Credito dove il credito è dovuto. In questo caso è dovuto il contrario. Le mie scuse - ero già deluso dal fatto che non hai fatto tu stesso la modifica. Tutto ciò che doveva essere fatto era cambiare il limite da un singolo ordine a una variabile.


È chiaro dalle annotazioni che stai semplicemente ricreando il codice in prosa senza capire veramente la logica.


CB