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

 
silhouette:

Non fate caso ai freni, è la prima volta che ho a che fare con gli array multidimensionali :)

È più facile orientarsi se si pensa a un array multidimensionale come a qualcos'altro. Vale a dire, se trovate un modello per l'array che cattura la sua essenza - il modello è più facile da tenere davanti agli occhi.

Una matrice unidimensionale è costituita da oggetti su una linea (un raggio di coordinate che parte da zero). Un esempio di una tale matrice sarebbe una coda in un negozio. Il primo in coda è la persona che si trova proprio dietro la persona che sta comprando ora. La persona che compra non può essere chiamata il primo della fila - sta comprando - è zero. Si trova all'interno della cella zero della matrice unidimensionale.

Una matrice bidimensionale è costituita da oggetti in un piano (piano delle coordinate). Un esempio potrebbe essere un auditorium. Questa e quella fila, questo e quel posto. Aggiungete la riga zero e la sede zero a questo modello, e avrete un modello esatto di un array bidimensionale.

Una matrice tridimensionale è un oggetto nello spazio (spazio delle coordinate) - la coordinata dell'oggetto è data da tre valori. È un cubo, con delle facce. Un modello potrebbe essere un edificio residenziale con ingresso numero zero, piano numero zero e appartamento numero zero (tra tutti gli altri). A condizione che in ogni ingresso la numerazione dei piani parta da zero.

Un array quadridimensionale è simile a un array unidimensionale. È un raggio di coordinate, tutti i punti del quale sono array tridimensionali. Il modello è una strada. La matrice di coordinate sarà specificata dai valori: numero di casa, numero di ingresso, numero di piano, numero di appartamento.

E così via nella enn-dimensionalità - dalle strade ai quartieri, dai quartieri alle città, dai quartieri alle città, dalle città ai paesi, dai paesi ai pianeti...

 
GarKain:
Qualcuno può spiegare come aprire un ordine in qualsiasi momento di una barra e aprire l'ordine successivo solo alla barra successiva?

Dovremmo scorrere l'elenco degli ordini. Se il tempo di apertura dell'ordine successivo è superiore o uguale al tempo di apertura della barra corrente (Time[0]), dovremmo impostare il flag che vieta l'apertura di ordini sulla coppia di valute corrente. Alla prossima candela, il ciclo rileverà che non c'è un ordine del genere e non metterà un divieto, cioè cancellerà la bandiera che proibisce l'apertura di ordini.
 
drknn:

Scorriamo l'elenco degli ordini. Se il tempo di apertura del prossimo ordine è maggiore o uguale al tempo di apertura della barra corrente (Time[0]), allora impostiamo il flag che vieta l'apertura di ordini su questa coppia di valute.
Grazie mille
 
drknn, grazie mille per il chiarimento. Lo terrò ;)
 
GarKain:
Grazie mille.


Se il codice funziona solo su una coppia di valute, allora mettete una linea per tagliare gli ordini di altre coppie

if(OrderSymbol()!=Symbol()){continue;}
 
drknn:


Se il codice funziona solo su una coppia di valute, allora impostate una linea per scartare gli ordini di altre coppie

Domanda: se il codice funziona su più coppie di valute e simultaneamente su più timeframe, è possibile mettere diversi numeri magici su di essi ed eseguire il setacciamento?
 

È possibile.

if(OrderMagicNumber()!=MAGIC) { continue;}
 
drknn:

È possibile.



bool Times=true;
if (OrdersTotal()>0){
for(int g=OrdersTotal()-1; g>=0; g--){
datetime t;
OrderSelect(g,SELECT_BY_POS);
if (OrderMagicNumber()!=MagicNumber){continue;}
se (t<OrderOpenTime() || g==OrdersTotal()-1) t=OrderOpenTime();

if (t>=Time[0]) Times=falso;}}


è corretto?

 
GarKain:

bool Times=true;
se (OrdiniTotali()>0){
for(int g=OrdersTotal()-1; g>=0; g--){
datetime t;
OrderSelect(g,SELECT_BY_POS);
if (OrderMagicNumber()!=MagicNumber){continua;}
if (t<OrderOpenTime() || g==OrdersTotal()-1) t=OrderOpenTime();

if (t>=Time[0]) Times=falso;}}


è corretto?


No. Non c'è bisogno di dichiarare una variabile all'interno del ciclo ad ogni iterazione del ciclo.

bool Torg=true;
for(int i=OrdersTotal()-1;i>=0;i--){
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
     if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC) { continue;} 
     if(OrderOpenTime()>=Time[0]){
       Torg=false;
     }
   }  
 }


// теперь используем результат работы цикла
// Если есть сигнал и торг разрешён, то открываем ордер
 
GarKain:

bool Times=true;
if (OrdersTotal()>0){
for(int g=OrdersTotal()-1; g>=0; g--){
datetime t;
OrderSelect(g,SELECT_BY_POS);
if (OrderMagicNumber()!=MagicNumber){continue;}
se (t<OrderOpenTime() || g==OrdersTotal()-1) t=OrderOpenTime();

if (t>=Time[0]) Times=falso;}}


è corretto?

no notare l'errore.

bool Times=true;
datetime t=Time[1];
if (OrdersTotal()>0){
for(int g=OrdersTotal()-1; g>=0; g--){
OrderSelect(g,SELECT_BY_POS);
if (OrderMagicNumber()!=MagicNumber){continue;}
se (t<OrderOpenTime()) t=OrderOpenTime();

if (t>=Time[0]) Times=falso;}}


è corretto?