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

 
BBSL:

Se stai parlando di tick, potresti scrivere del codice che salva il file di dati, ma avresti bisogno di caricarlo da un file in ekspert. Avrebbe senso mantenere il computer in funzione?
Credo che dovrei usare la seconda opzione. Grazie, BBSL.
 
artmedia70:

Quello che stai facendo è strano... Quando si apre una posizione si assegna il numero del biglietto a una variabile, ma se ne controlla un'altra...

E OrderSend() restituisce -1 (meno uno) in caso di fallimento, e si controlla per meno di uno, quando si ha bisogno di meno di zero

Questa è la prima cosa che cattura l'attenzione. Ma penso che tu abbia un sacco di cose interessanti lì... :)


Ooh-ha-ha, sì, c'è un sacco di divertimento... Soprattutto quando si inizia a controllare))

Dai, un'altra volta... Funziona così,

Apro l'ordine:

order_id = OrderSend(Symbol(),OP_SELL,1.0,Bid,3,0,0,"expert comment",255,0,Red);
   if(order_id<0)
     {
      error=GetLastError();
      Print("send_orders, error = ",ErrorDescription(error));
      return;
     }
     } 

Ordine di chiusura:

if(OrderSelect(0, SELECT_BY_POS)==true){

OrderClose(OrderTicket(),1,Bid,3,Red);

}

Giusto, dato un solo ordine).

 
hedger:
A quanto pare si dovrebbe usare la seconda opzione. Grazie, BBSL.

Sei il benvenuto, spero che ti aiuti davvero))
 
artmedia70:

Quello che stai facendo è strano... Quando si apre una posizione si assegna il numero del biglietto a una variabile, ma se ne controlla un'altra...

E OrderSend() restituisce -1 (meno uno) in caso di fallimento, e si controlla per meno di uno, quando si ha bisogno di meno di zero

Questa è la prima cosa che cattura l'attenzione. Ma penso che tu abbia un sacco di cose interessanti lì... :)


Ho capito, il numero di tikit dovrebbe essere ottenuto così:

nomer_ticketa = OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"expert comment",255,0,Green);
   if(ticket<1)
 
artmedia70:

Quello che stai facendo è strano... Quando si apre una posizione si assegna il numero del biglietto a una variabile, ma se ne controlla un'altra...

E OrderSend() restituisce -1 (meno uno) in caso di fallimento, e si controlla per meno di uno, quando si ha bisogno di meno di zero

Questa è la prima cosa che cattura l'attenzione. Ma penso che tu abbia un sacco di cose interessanti lì... :)


Rispetto, grazie!))
 
BBSL:


Capisco, dovete ottenere il numero di tickit in questo modo:

Sai, con un solo ordine, potrebbe funzionare, ma se lo apri ancora manualmente, non sarà lo stesso. Il numero del biglietto dovrebbe essere salvato in una variabile, e dopo la selezione dell'ordine dovremmo confrontare il suo biglietto con quello memorizzato:

 if (OrderTicket()==number_ticket) {
   // ... код для работы с выбранным ордером при совпадении тикетов
   }

E in generale, la selezione dell'ordine deve essere fatta usando la funzione OrderSelect() nel ciclo:

for (i=0; i<OrdersTotal(); i++) {                    // цикл по всем рыночным ордерам терминала
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { // Если выбран любой рыночный ордер с индексом i
      if (OrderSymbol()!=Symbol())     continue;   // Если символ не текущего графика, переходим к выбору следующего ордера
      if (OrderMagicNumber()!=Magic)   continue;   // Если его магик не совпадает с магиком советника - переходим к выбору следующего
//... далее можно проверять другие параметры выбранного ордера, но в этом месте уже есть выбранный ордер текущего графика и номером магика советника
      if (OrderTicket()==number_ticket) {          // проверяем тикет выбранного ордера и, если есть совпадение, выполняем с ним дальнейшие действия
         // ... код, выполняющий дальнейшие действия с найденным нужным ордером ...
         }
      }
   else if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // Иначе, если не удалось выбрать ордер
      Print ("Ошибка при выборе ордера из списка рыночных ордеров = ", GetLastError());  // Выведем сообщение об ошибке и её номер в журнал.
   }

Questo è solo un esempio per capire, non un codice completo funzionante, semmai... :)

 
artmedia70:

Sai, se hai un solo ordine, potrebbe funzionare, ma se ne apri più a mano, non sarà lo stesso. Il numero del biglietto dovrebbe essere memorizzato in una variabile, e dopo aver selezionato un ordine, dovremmo confrontare il suo biglietto con quello memorizzato:

E, in generale, la selezione degli ordini dovrebbe essere fatta usando la funzione OrderSelect() nel ciclo:

Questo è solo un esempio per capire, non un codice completo funzionante, semmai... :)




Quando si chiudono gli ordini, se c'è più di un ordine, dovremmo usare questo ciclo:

int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) {
 //...
 
bolt:

Quando si chiudono gli ordini, se c'è più di un ordine, si dovrebbe usare un ciclo come questo:

Leggete l'ultima riga del mio post. Chi ha detto che ho scritto un esempio per chiudere?

Il resto è la pura verità. Scrivi il tuo libro di testo.

 

Potete dirmi perché OrderOpenPrice non funziona? Il compito è quello di cercare nel pool un ordine piazzato a un certo prezzo, e se non c'è, mettere l'ordine e impostare un flag che è impostato.


for(int i=1 ; i <= OrdersTotal() ; i++)
   {
   if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES))
      {
      if(OrderOpenPrice() == price) 
        {
        orderset = true;
        }
      }
   }
     
if((orderset==false)
   {
   OrderSend(Symbol(),OP_SELLLIMIT,baselot,price,3,NULL,price-10,"Comment",0001+i,0,White); 
   }
 
Pyro:

Potete dirmi perché OrderOpenPrice non funziona? Il compito è quello di cercare nel pool un ordine piazzato a un certo prezzo, e se non c'è, mettere l'ordine e impostare un flag che è impostato.



Non possiamo confrontare i numeri reali.
Motivazione: