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

 
denis77515:

Ciao Mr. professionisti.Non rifiutare un nuovo arrivato alla programmazione, guarda il codice, per vedere se è scritto correttamente. Chi non è troppo pigro per occuparsene. Non posso testarlo nello Strategy Tester perché è multivaluta. File con il codice e gli indicatori allegati all'archivio.


Ho elaborato una singola funzione per voi per creare array collegati di simboli e numero di ordini (posizioni aperte) per comprare e vendere, testate lo script aprendo alcune posizioni su una demo
string Smbl[];
int CntBuy[],CntSell[];
void OnStart()
 {
    if(CountBuySell(Smbl, CntSell, CntBuy))
       for(int i=0; i<ArraySize(Smbl); i++) PrintFormat(" Symbol %s CntBuy %d CntSell %d", Smbl[i], CntBuy[i], CntSell[i]);
 }
//-------------------
bool CountBuySell(string &symb[], int &cnt_sell[], int &cnt_buy[])
{
   int ot,n,N=0,f=0,cb=0,cs=0;
   string symbol;
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         
         ot=OrderType()+1; if(ot>2)  continue;                       // пропускаем лимит ордера
         symbol=""; symbol=OrderSymbol(); if (symbol=="") continue;  // убедились что символ выбран
         f=0; cb=0; cs=0;                                            // обнулили счетчики и флаг символа
         for (n=0; n<N; n++) if (symbol==symb[n]) f=1;               // если в массиве символ OrderSymbol() уже есть, то не будем увеличивать размерность массивов, просто допишем в нижнем цикле еще 1 позицию
         if (f==0)                                                   // такого символа symbol=OrderSymbol() еще не было, увеличим размерность массивов под новый символ и запишем этот символ
         {
            N++; 
            ArrayResize(symb,N); ArrayResize(cnt_buy,N); ArrayResize(cnt_sell,N);
            symb[N-1]=symbol; cnt_buy[N-1]=0.0; cnt_sell[N-1]=0;
         }
         
         if(ot==1) cb++;  // OP_BUY   для выбранного символа
         else      cs++;  // OP_SELL
         
        // перебираем массив и сравним его с выбранным символом. В найденный индекс запишем для данного символа кол-во откр позиций
        // такоим образом для каждого индекса всех 3 массивов будет соответствовать  конкретный символ и количество позиций покупки и продажи для него
         for (n=0; n<N; n++) if (symbol==symb[n]) { cnt_buy[n]+=cb; cnt_sell[n]+=cs;  }
         
      }
   }
   if(N>0) return(1);   // есть открытые позиции
   return(0);           // позиций нет
}
 
evillive:

Sto cercando di scrivere un semplice EA che chiuda tutte le posizioni sul mio conto quando raggiunge i valori di profitto o perdita specificati nella valuta di deposito (ho aperto da diversi simboli), ma chiude le posizioni non appena appaiono (((

Non capisco cosa c'è di sbagliato:



Guarda qui.


extern int profitto = 30;

extern int Magic=0;

int CurProfit;

extern bool CurSymbolOnly = false;


int start() // Funzione speciale start

{

//contatore di profitto di tutti gli ordini

doppio p1;

int i1, kk1=OrdersTotal(), pr1=0;

per (i1=0; i1<kk1; i1++)

{

se(OrderSelect(i1, SELECT_BY_POS, MODE_TRADES))

{

if (!CurSymbolOnly || OrderSymbol()==Symbol())

{

p1=MarketInfo(OrderSymbol(), MODE_POINT);

se (p1==0) if (StringFind(OrderSymbol(), Symbol())<0) p1=0,0001; altrimenti p1=0,01;

se (OrderType()==OP_BUY)

{

pr1+=NormalizeDouble((OrderClosePrice()-OrderOpenPrice())/p1, 0);

}

se (OrderType()==OP_SELL)

{

pr1+=NormalizeDouble((OrderOpenPrice()-OrderClosePrice())/p1, 0);

}

}

}

}

CurProfit=pr1;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

se (profitto<=pr1)

{

ClosePosWithMaxProfitInCurrency();

}

ritorno(0);

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


///chiude dal più caro al più economico

void ClosePosWithMaxProfitInCurrency(string sy="", int op=-1, int mn=-1)

{

doppio pr=0;

int i5, k=OrdersTotal(), np=-1;

if (sy=="0") sy=Symbol();

per (i5=k-1; i5>=0; i5--)

{

se (OrderSelect(i5, SELECT_BY_POS, MODE_TRADES))

{

se ((OrderSymbol()==sy || sy==") && (op<0 || OrderType()==op))

{

se (mn<0 || OrderMagicNumber()==mn)

{

se (pr<OrderProfit()+OrderSwap())

{

pr=OrderProfit()+OrderSwap();

np=i5;

}

}

}

}

}

se (np>=0)

{

se (OrderSelect(np, SELECT_BY_POS, MODE_TRADES))

{

{for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;

if (OrderType()==OP_BUY ) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),9);

if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),9);

}

}

}

}

closeotlojnie();

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//closeotlojnie

void closeotlojnie()

{

for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;

se (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket());

se (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket());

se (OrderType()==OP_BUYLIMIT ) OrderDelete(OrderTicket());

se (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket());

}

}

 
GSB:
Ho elaborato una singola funzione per voi per creare array collegati di simboli e numero di ordini (posizioni aperte) per comprare e vendere, testate lo script aprendo diverse posizioni su una demo


Grazie per il vostro tempo, ma è un po' complicato per me, scusate l'intrusione. Spiegami cosa, dove, come? Come si dice sulle dita.


Non sono mai stato abituato a fare trading su questo tipo di script.

 
GSB, pako, grazie, sono stato distratto per qualche tempo, non notando cose come questa...
 
denis77515:

Grazie per il vostro tempo, ma è un po' complicato per me, scusate l'intrusione. Spiegami cosa, dove, come? Come si dice sulle dita.


L'ho provato e l'ho scambiato manualmente su un conto demo.


Come hai fatto a testarlo su un conto demo se ci sono solo errori? Il codice che è stato presentato non poteva commerciare. Ho aggiunto dei commenti al codice. Devi fare tutto il lavoro da solo, senza conoscenza e senza fatica... Non si può fare trading sulle borse, specialmente sul forex. Il risultato sarà inequivocabile. Oltre ai problemi sopra menzionati, dovreste usare il sistema di trading che avete scelto. Dopo 2-3 mesi i risultati si vedranno, poi deciderete se questo sistema è adatto a voi personalmente e per il trading in linea di principio.
 
Grazie, lavoreremo sodo!
 
Domanda ai moderatori o agli amministratori: posso cambiare il mio nickname? Ho provato a registrarmi su MQL5, ma è risultato che il mio nickname era già usato lì, quindi ho dovuto registrarmi con un altro. Voglio avere lo stesso soprannome lì e qui. Naturalmente, posso ri-registrarmi anche qui, ma ho iniziato a postare qualcosa in Code Base e voglio mantenere la paternità dei miei lavori (e post) semplicemente "cambiando il mio nome". È possibile?
 
Spy:
Domanda ai moderatori o agli amministratori: posso cambiare il mio nickname? Ho provato a registrarmi su MQL5, ma è risultato che il mio nickname era già usato lì, quindi ho dovuto registrarmi con un altro. Voglio avere lo stesso soprannome lì e qui. Naturalmente, posso ri-registrarmi anche qui, ma ho iniziato a postare qualcosa in Code Base e voglio mantenere la paternità dei miei lavori (e post) semplicemente "cambiando il mio nome". È possibile?

Scrivi a Rosha in un messaggio privato. Spero che la troverete. Dichiarare il problema
 

OK, grazie.

 

Avendo gli EAs su una versione precedente di MetaTrader ho aggiornato il terminale. Dopo di che sono tornato al 509. Quindi gli EA sono "stati" in 60... Bild, sono tornati alla versione del terminale su cui erano stati scritti.

La domanda è: cosa fare con quegli EA che smettono di aprire le operazioni nello Strategy Tester dopo essere "tornati" e quelli che non possono più essere controllati (il pulsante di avvio nello Strategy Tester semplicemente non risponde a un clic)?

Motivazione: