[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 441

 

Ciao a tutti!

Non riesco a caricare correttamente il deposito nel rapporto di trading. )) Io faccio questo:

#define RA 10000

if(Trade_Report == TRUE && !IsOptimization())
   {  int      pos;
      int      handle;
      int      Days;
      double   Swap_M;
      double   Profit_M;
      double   Swap_P;
      double   Profit_P;

      double   Source_LP[RA], LP_01[RA], LP_02[RA], LP_03[RA], LP_04[RA], LP_05[RA], LP_06[RA];
      double   Source_LP_02[RA], LP_01_02[RA], LP_02_02[RA], LP_03_02[RA], LP_04_02[RA], LP_05_02[RA], LP_06_02[RA];
      double   Source_SP[RA], SP_01[RA], SP_02[RA], SP_03[RA], SP_04[RA], SP_05[RA], SP_06[RA];
      double   Source_SP_02[RA], SP_01_02[RA], SP_02_02[RA], SP_03_02[RA], SP_04_02[RA], SP_05_02[RA], SP_06_02[RA];
      double   Load_Depo[RA]; 
   
      handle = FileOpen("OrdersReport.csv",FILE_CSV|FILE_WRITE);
   
      if(handle > 0)
                {//1
            FileWrite(handle,"Time Close"+","+"Lots"+","
                              +"Swap($)"+","+"Profit($)"+","+"Swap(p)"+","+"Profit(p)"+","+"Load Depo"+","
                              +"SOURCE_LP"+","+"LP#01"+","+"LP#02"+","+"LP#03"+","+"LP#04"+","+"LP#05"+","+"LP#06"+","
                              +"SOURCE_SP"+","+"SP#01"+","+"SP#02"+","+"SP#03"+","+"SP#04"+","+"SP#05"+","+"SP#06");
            for(pos = 0; pos < OrdersHistoryTotal(); pos++)
               {  OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY); //2
               
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_Source_LP && OrderCloseTime() == TimeCurrent()) { Source_LP[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP01 && OrderCloseTime() == TimeCurrent()) { LP_01[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP02 && OrderCloseTime() == TimeCurrent()) { LP_02[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP03 && OrderCloseTime() == TimeCurrent()) { LP_03[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP04 && OrderCloseTime() == TimeCurrent()) { LP_04[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP05 && OrderCloseTime() == TimeCurrent()) { LP_05[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP06 && OrderCloseTime() == TimeCurrent()) { LP_06[pos] = OrderProfit(); }
                     
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP && OrderCloseTime() == TimeCurrent()) { Source_SP[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP01 && OrderCloseTime() == TimeCurrent()) { SP_01[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP02 && OrderCloseTime() == TimeCurrent()) { SP_02[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP03 && OrderCloseTime() == TimeCurrent()) { SP_03[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP04 && OrderCloseTime() == TimeCurrent()) { SP_04[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP05 && OrderCloseTime() == TimeCurrent()) { SP_05[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP06 && OrderCloseTime() == TimeCurrent()) { SP_06[pos] = OrderProfit(); }
                  
            //--- Вычисление загрузки депозита ---//
                  int              Amount_LD;
                  datetime         CurrentCloseTime = OrderCloseTime();
                  static datetime  CloseTime;                  
                  
                  if(CurrentCloseTime != CloseTime)
                     { Amount_LD = 1;
                       Load_Depo[pos] = (Amount_LD*(OrderLots()*1000)/AccountBalance())*100;
                       CloseTime = OrderCloseTime(); }
                  else if(CurrentCloseTime == CloseTime)
                          { Amount_LD++;
                            Load_Depo[pos] = (Amount_LD*(OrderLots()*1000)/AccountBalance())*100;
                            CloseTime = OrderCloseTime(); }
            //---------------------------------------------------------------------------------------------------------------------
                     
                  Swap_M     =  OrderSwap();
                  Profit_M   =  OrderProfit();
                  Swap_P     = (OrderSwap()/10)/OrderLots();
                  Profit_P   = (OrderProfit()/10)/OrderLots()+(OrderSwap()/10)/OrderLots();
                     
                  if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                     {   FileWrite(handle,TimeToStr(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+","+DoubleToStr(OrderLots(),2)+"," //3
                                          
                                          +DoubleToStr(OrderSwap(),2)+","+DoubleToStr(Profit_M+Swap_M,2)+","+DoubleToStr(Swap_P,2)+","
                                          +DoubleToStr(Profit_P,2)+","+DoubleToStr(Load_Depo[pos],2)+","
                                          
                                          +DoubleToStr(Source_LP[pos],2)+","+DoubleToStr(LP_01[pos],2)+","+DoubleToStr(LP_02[pos],2)+","
                                          +DoubleToStr(LP_03[pos],2)+","
                                          +DoubleToStr(LP_04[pos],2)+","+DoubleToStr(LP_05[pos],2)+","+DoubleToStr(LP_06[pos],2)+","
                                             
                                          +DoubleToStr(Source_SP[pos],2)+","+DoubleToStr(SP_01[pos],2)+","+DoubleToStr(SP_02[pos],2)+","
                                          +DoubleToStr(SP_03[pos],2)+","
                                          +DoubleToStr(SP_04[pos],2)+","+DoubleToStr(SP_05[pos],2)+","+DoubleToStr(SP_06[pos],2));  } //3
               }  FileClose(handle); //2
         }//1

Di conseguenza, inizialmente non viene calcolato correttamente. I valori nell'array Load_Depo cambiano costantemente e hanno bisogno che anche le posizioni aperte siano considerate. Mostratemi un esempio, qualcuno, se avete un minuto libero. ))

 
demlin:
Onestamente, non lo capisco, è così complicato)))
Nemmeno gli esempi dello script di prova aiutano?
 
FreeSerfer:

Grazie, il punto è chiaro, mi dispiace che non sono molto bravo con il linguaggio di programmazione.

Supponiamo:

Blu - numero 0 - segnale di acquisto

Rosso - numero 1 - segnale di vendita

e un'altra domanda, la freccia può lampeggiare mentre sta formando una barra sopra la quale può bloccarsi e dare un segnale. Le operazioni dovrebbero essere aperte dopo la formazione del segnale

Qualcuno può implementare questo nel codice?

Stai studiando la programmazione o cerchi qualcuno che lo faccia per te?

Victor ha già spiegato che bisogna usare la funzione iCustom(). Leggete nell'aiuto di MetaEditor. Lì è abbastanza dettagliato. Per evitare uno "sbattimento" - usate in iCustom() i dati della prima barra invece di zero - è già stato completamente formato.

Quando inizierai a scrivere qualcosa da solo, sarai felice di ricevere aiuto e correzione qui...

 
artmedia70:

Stai imparando a programmare o stai cercando qualcuno che lo faccia per te?

Victor vi ha già chiarito che dovete usare la funzione iCustom(). Leggete nell'aiuto di MetaEditor. Lì è abbastanza dettagliato. Per sbarazzarsi delle "chiacchiere" - usate i dati della prima barra invece della barra zero in iCustom() - è già stata completamente formata.

Quando cominci a scrivere qualcosa da solo, allora ti aiuteranno qui con piacere e correggeranno qualsiasi cosa...

Mi scrivo da solo, anche se è difficile per me, e l'unica cosa che rimane è il collegamento dell'Expert Advisor all'indicatore, anche se grazie a Victor sarà presto risolto con i miei sforzi. In ogni caso, grazie a tutti coloro che hanno risposto e mostrato la direzione in cui muoversi.
 
peshihod:

Ci possono essere innumerevoli opzioni. È meglio scegliere quelli semplici. Per esempio:


int Orderov;
int Tip;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int i,k;

Orderov=OrdersTotal();

for(i=0;i<Orderov;i++)
{
OrderSelect(i,SELECT_BY_POS);

switch( OrderType() )
{
case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;

case OP_BUYLIMIT:
//Задача для ордера типа OP_BUY
break;

/////------ и т.д.




}
}

return(0);
}

Aiuto.... Rispondere alla domanda ..............

Questa è la parte che si attiva ad ogni tick

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


E dovrebbe essere attivato solo con ogni nuovo ordine aperto, una volta.

Forse è necessario aggiungere qualche contatore, per zecche, maghi o altri identificatori di ordini?

----------------------------------------------------------------------------------------

Dobbiamo creare una variabile Orderov?
Posso farlo in questo modo?

for(i=0;i<OrdersTotal();i++)

Hai bisogno di una variabile "k" nello script?

int i,k;

 
Zhunko:
Che anche gli esempi dello script di prova non aiutano?
Grazie per il feedback, ho aggirato il problema in un modo diverso e più semplice ))
 
semiromid:

Questa è la parte che si attiva ad ogni tick

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


E dovrebbe essere attivato solo una volta per ogni nuovo ordine aperto.

Forse ci dovrebbe essere un contatore allegato, per zecche, maghi o altro identificatore di ordine?

----------------------------------------------------------------------------------------

Dobbiamo fare una variabile Orderov?
Possiamo farlo in questo modo?

for(i=0;i<OrdersTotal();i++)

Lo script ha bisogno di una variabile "k" ?

Hai sbagliato tutto.

Stai cercando di comporre poesie in tedesco senza conoscere una parola. Sono stato chiaro?

Leggete il riferimento, imparate tutte le funzioni e le proprietà del linguaggio. Ci vorranno un paio di mesi. Utilizzi gli esempi che sono inclusi nell'installazione di MetaTrader4. Poi parleremo. Non sai ancora di cosa stiamo parlando.

 
peshihod:

Hai sbagliato tutto.

Cercare di comporre poesie in tedesco senza conoscere una sola parola. Sono stato chiaro?

Leggete il riferimento, imparate tutte le funzioni e le proprietà del linguaggio. Ci vorranno un paio di mesi. Utilizzi gli esempi che sono inclusi nell'installazione di MetaTrader4. Poi parleremo. Non sai ancora di cosa stiamo parlando.


Sono un principiante nella programmazione e non ho insegnanti. E se è difficile per voi rispondere alle domande che sono importanti per me, non avreste potuto scrivermi nulla.

E mi rivolgo a te come te, in realtà.....

 
semiromid:


Sono un principiante nella programmazione e non ho insegnanti. Se è difficile per voi rispondere alle domande che sono importanti per me, non avreste potuto scrivermi nulla.

E mi rivolgo a te come te, in realtà.....


Mi dispiace.

Ho scritto che non si può imparare a nuotare a riva.

 
peshihod:


Mi scusi.

Ho scritto che non si può imparare a nuotare a riva.


A volte bisogna fare domande per capire qualcosa.

int Orderov;
int Tip;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int i,k;

Orderov=OrdersTotal();

for(i=0;i<Orderov;i++)
{
OrderSelect(i,SELECT_BY_POS);

switch( OrderType() )
{
case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;

case OP_BUYLIMIT:
//Задача для ордера типа OP_BUY
break;

/////------ и т.д.




}
}

return(0);
}

Aiuto.... Rispondere alla domanda ..............

Questa è la parte che fa scattare ogni tic.

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


Dovrebbe essere attivato solo una volta ogni volta che viene aperto un nuovo ordine.

Forse devo allegare dei contatori, per zecche, maghi o altri identificatori di ordini, o forse degli array? Non so cosa c'entri, non posso andare avanti finché non lo capisco.

----------------------------------------------------------------------------------------

Dobbiamo fare una variabile Orderov?
Posso farlo in questo modo?

for(i=0;i<OrdersTotal();i++)

Lo script ha bisogno di una variabile "k"?

int i,k;

Motivazione: