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

 
Top2n:
Non capisco.

Conoscere le bandiere.
 
quali paesi) Per favore, scrivi quali sono le bandiere. Quali sono le chiavi da inserire nel motore di ricerca e leggerle.
 
Se intendi falso vero, non vedo come puoi aprire un solo ordine alla volta.
 
Puoi dirmi come un EA apre una griglia di ordini? Ho scritto una funzione che rileva l'ordine con il prezzo più alto e quello più basso. Ma ho anche bisogno di informazioni sul secondo ordine con il prezzo più basso o il più alto.
 
Top2n:
Se intendi falso vero, allora non capisco come sia possibile aprire esattamente un ordine.
Perché non controllare "c'è già una posizione aperta del tipo che dovrebbe essere aperta dal segnale?
Se esiste già, allora non aprirlo.

Se non c'è una posizione di questo tipo sul mercato, allora apritela.

Bene, insieme a questo controllo, potete anche controllare qualsiasi altra condizione. Per esempio: se c'è già una posizione di questo tipo, ma è passato un certo tempo da quando è stata aperta, si può aprire un'altra posizione... ecc. ecc...

 
DimaMA:
Puoi dirmi come un EA apre una griglia di ordini? Ho scritto una funzione che determina l'ordine con il prezzo più alto e quello più basso. Ma ho bisogno di più informazioni sul secondo ordine con il prezzo più basso o il più alto. qui in generale il 2° e non l'ultimo. suggerisci una funzione.

Esegue un ciclo di tutti gli ordini e li memorizza in un array bidimensionale. Nella prima dimensione dell'array, registrate l'ora in cui l'ordine è stato piazzato, e nella seconda dimensione, registrate il suo biglietto. Ordina l'array secondo l'ordine di collocazione della data (secondo la prima dimensione) in ordine decrescente. Il secondo elemento dell'array nella prima dimensione conterrà la data di installazione del penultimo ordine (il secondo dalla fine), e la seconda dimensione conterrà il biglietto dell'ordine necessario. Si seleziona l'ordine da questo biglietto e... Potete farci quello che volete.


Una volta ho scritto una funzione per calcolare il Breakeven per la quantità N-esima di ultime posizioni per un EA personalizzato. Il calcolo deve essere fatto per le ultime posizioni, a partire dalla penultima. Si può guardare come è implementato e ricavarne qualcosa:

//+----------------------------------------------------------------------------+
// Уровень безубытка по символу для N последних позиций, начиная с предпоследней
double LevelPreWLforNpos(int op, int mn1, int mn2, int num) { 
   double lots=0;
   double sum=0;
   int n=0;
   int mass[1][2];
   ArrayInitialize(mass,0);
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)  continue;
         if (OrderType()!=op)    continue;
         if (OrderMagicNumber()==mn1 || (OrderMagicNumber()==mn2 || OrderMagicNumber()<0)) {
            n++;
            if (n>ArrayRange(mass,0)) ArrayResize(mass, n);
            mass[n-1][0]=OrderOpenTime();
            mass[n-1][1]=OrderTicket();
            }
         }
      }
   ArraySort(mass,WHOLE_ARRAY,0,MODE_DESCEND);
   if (ArrayRange(mass,0)>num+1)  ArrayResize(mass,num+1);
   for (i=1; i<ArrayRange(mass,0); i++) {
      if (OrderSelect(mass[i][1],SELECT_BY_TICKET)) {
         if (OrderCloseTime()==0) {
            if (OrderType()==OP_BUY) {
               lots+=OrderLots();
               sum+=OrderLots()*OrderOpenPrice();
               }
            if (OrderType()==OP_SELL) {
               lots-=OrderLots();
               sum-=OrderLots()*OrderOpenPrice();
               }
            }
         }
      }   
   double price=0;
   if (lots!=0) price=sum/lots;  
   return(NormalizeDouble(price,dg));
}
//+----------------------------------------------------------------------------+
 
Top2n:
Se intendi falso vero, non vedo come puoi aprire un solo ordine alla volta.


Sì, è quello che voglio dire. Vedi il tutorial qui. Avrete qualche condizione in più, come scrivete: "Attenzione domanda!) E come fare per farlo aprire una volta per (sig1) può essere così sig1-open BAY, il prossimo comando, sig0-admit inclusion. trall (non importante), il prossimo comando ancora, sig1-open second BAY." - non è un sacco di volte? Sembra che non ne abbiate bisogno... In generale, gioca con le bandiere.

 
Roman.:


Sì, intendo loro. Vedi il tutorial qui. Avrete qualche condizione in più, come scrivete: "Attenzione domanda!) E come fare per farlo aprire una volta per (sig1) mentre può essere così sig1-open BAY, il prossimo comando, sig0-admit on. trawl (non importa), il prossimo comando ancora, sig1-open second BAY" - non è molte volte? Sembra che non ne abbiate bisogno... In generale, gioca con le bandiere.

Per caso Kimi ha una funzione adatta? Per non ingombrare il programma. È necessario che abbia aperto l'ordine e si sia calmato, ma "mille" in un secondo.
 
Top2n:
Kim I.V. ha per caso una funzione adatta? Per non ingombrare il programma. Voglio che lui apra un ordine e si rilassi, perché ne "apre mille" in un secondo.
Scegliete voi.
 

Voglio scrivere i risultati dei test (transazioni) in un file dopo il test

Ho messo la funzione tofile () nel blocco deinit() (scrive dopo che il lavoro è finito)

ma la funzione stessa

// Запись профитов в файл
void toFile( )
{
int handle=FileOpen("OrdersReport.csv",FILE_WRITE|FILE_CSV,"\t");
  if(handle<0) return(0);
  // запишем заголовок в файл
  FileWrite(handle,"#","проф");
 
  int total=OrdersTotal();
  // записываем в файл только закрытые ордера
  for(int pos=0;pos<total-1;pos++)
    {
     //FileSeek(handle, 0, SEEK_END);
     if(OrderSelect(pos,SELECT_BY_POS, MODE_HISTORY)==false) continue;
     FileWrite(handle,OrderTicket(),OrderProfit());
    }
  FileClose(handle);
  return;
non funziona, registra solo l'intestazione