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

 
Stereosin:
Buona giornata a tutti. L'idea è di piazzare un ordine pendente nella direzione opposta per ogni ordine di mercato aperto (cioè take profit e stop loss) quando lo stop loss scatta (se ordine di acquisto, allora invia ordine pendente). Non riesco a trovare nessuna sequenza di sintassi per scrivere uno script che cancelli l'ordine pendente quando quello corrente chiude su take profit? Forse c'è uno script scritto tra quelli gratuiti, ma la ricerca non ha successo ( . Vorrei scriverne uno io stesso per poterlo trattare, ma non riesco a capire la sequenza di sintassi. Lasciatemi spiegare su un altro esempio - voglio un gelato - la sequenza della sintassi - 1) - scendere dal divano 2) vestirsi 3) andare al negozio 4) comprare il gelato. È possibile fare lo stesso per il mio compito?

quando il corrente è chiuso, il numero di ordini di acquisto diminuirà, o saranno assenti del tutto (dipende dall'algoritmo), si fa questo controllo e si cancellano gli ordini pendenti

qualcosa del genere (in questo caso, al contrario, gli ordini pendenti vengono cancellati se un acquisto precedente ha chiuso in profitto):

 for(int m=OrdersTotal()-1;m>=0;m--)
   if(OrderSelect(m,SELECT_BY_POS,MODE_TRADES)) 
     if(Symbol()==OrderSymbol() && OrderMagicNumber()==Magic) {  
    
      if(OrderType()==OP_BUY)  sBuy++; 
      if(OrderType()==OP_SELL) sSell++;
       
      if(OrderType()==OP_BUYLIMIT)
       if(sBuy==0 || sSell>0) OrderDelete(OrderTicket());
      if(OrderType()==OP_SELLLIMIT) 
       if(sSell==0 || sBuy>0) OrderDelete(OrderTicket());
  }
 
Ratmirf:

Quindi questo è corretto?

se (OrderOpenTime()+7200+15*60 <=TimeCurrent()) Cls_Buy=true;

se (OrderOpenTime()+7200+900 <=TimeCurrent()) Cls_Buy=true;

e finire così?

se (OrderOpenTime()+8100 <=TimeCurrent()) Cls_Buy=true;

Beh, è matematica da liceo... Sii un po' più fiducioso.
 
harbor:

quando il corrente è chiuso, il numero di ordini di acquisto diminuirà, o saranno assenti del tutto (dipende dall'algoritmo), si fa questo controllo e si cancellano gli ordini pendenti

qualcosa del genere (in questo caso, al contrario, gli ordini pendenti vengono cancellati se un acquisto precedente ha chiuso in profitto):

Grazie mille. Lo esaminerò stasera.
 

Se questo accade - aumento lo Stop Loss alla dimensione richiesta. Non imposto la soglia, ma la lascio virtuale nel programma e apro un ordine. Come risultato, si apre solo uno dei 15-20 ordini. Cosa devo fare per aprire ogni ordine?

RefreshRates();


     double bid = MarketInfo(symbol,MODE_BID);
     double ask = MarketInfo(symbol,MODE_ASK);

    

     double stoplevel =  NormalizeDouble(stoplevelTemp * tickTemp,digitsTemp)+tickTemp;

     if(digitsTemp == 5 )
          stoplevel+=(700 * tickTemp);
     
     if(spreadOrdDangBr < stoplevel)                                                                           //если спред меньше стоплевела - перебиваем
         spreadOrdDangBr=stoplevel;
         
     double lotDB = calculationLot(spreadOrdDangBr,0.0025);                                                      //расчитываем лот - четверть процента свободных денег
     


         slODB=ask-spreadOrdDangBr;                                                                              
         tpODB= ask+ spreadOrdDangBr;

         orderTicketODB=OrderSend(symbol,OP_BUY,lotDB,ask,3,slODB,0,("dangBr" +spreadOrdDangBr));



e come risultato nel terminale


 
Ciao a tutti) Come determinare il prezzo massimo di una barra selezionata (ad esempio la 100a barra)
 

Aiuto, per favore! Voglio aprire una posizione Buy, e se il prezzo sale del 100
pips, il mio stop loss diventerà uguale a zero rispetto allo stop loss precedente.

Lo sto facendo correttamente?


se(Bid-OrderOpenPrice()>Point*100)

{

OrderModify(OrderTicket(),OrderOpenPrice(), 0,TakeProfit,0,);

ritorno(0);

}

Grazie!

 
Tema97:
Ciao a tutti) come determinare il prezzo massimo di una barra selezionata (ad esempio 100°)
High[100] non aiuterà
 

Ho trovato una funzione che definisce il prezzo massimo e minimo per 100 barre e disegna linee orizzontali (per favore aiutatemi a far passare le prime 15 barre e solo dopo controllare per 100 (come faccio a fare questo spostamento?) e un altro problema con le linee - disegna solo 1 volta - cioè - se andiamo altri 100 punti con nuovi massimi e minimi - le linee non vengono disegnate) qualcuno sa per favore scrivere - ecco il codice

extern inttern Quant_Bars=100; // Numero di barre

//--------------------------------------------------------------------

int start() // Funzione speciale start

{

int i; // numero della barra

double Minimum=Bid; // Prezzo minimo

Maximum=Bid; // Prezzo massimo

for(i=0;i<=Quant_Bars-1;i++) // Da zero (!) a

{ // ...Quant_Bars-1 (!)

if (Low[i]<Minimum) // Se < noto

Minimum=Low[i]; // questo sarà il Min

se (Alto[i]> Massimo) // se > noto

Maximum=High[i]; // sarà il massimo.

}

Alert("Per l'ultimo ",Quant_Bars, // Visualizzazione

"Min= ",Minimo," Max= ",Massimo);

double linia1=ObjectCreate("highLine",OBJ_HLINE,0,0,0,Maximum);

double linia2=ObjectCreate("lowLine",OBJ_HLINE,0,0,Minimum);

return(0); //exit start()

}

 
Tema ha finalmente letto la documentazione. Ci si possono trovare così tante cose interessanti... Per esempio, iHighest restituisce l'indice del più grande valore trovato (spostamento rispetto alla barra corrente) del grafico corrispondente. E iHigh restituisce il valore del prezzo massimo della barra (specificato dal parametro shift) del grafico corrispondente. Una volta capite queste due funzioni, potrete risolvere facilmente il vostro problema senza ricorrere a funzioni che non sempre sono scritte da altri.
 
Ragazzi, se l'indicatore disegna oggetti grafici non standard, è possibile accedervi? Il problema è che non vengono visualizzati nella lista degli oggetti (quando il pulsante All è premuto) e la funzione ObjectsTotal() non li vede. Quando si cerca di accedere agli oggetti tramite il loro nome, GetLastError() restituisce l'errore 4202(funzione ObjectFind())
Motivazione: