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

 
L'ultimo addendum non viene registrato?
//----
   for ( i=OrdersHistoryTotal();i>0;i--){
    OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY  );
    if( OrderMagicNumber( )==2000 
    &&OrderSymbol()==Symbol()&&
    OrderTakeProfit( )==OrderClosePrice(        )&&wremjapomnim<OrderCloseTime( ) ||
   OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()
   &&OrderTakeProfit( )==OrderClosePrice(       )&&wremjapomnim<OrderCloseTime( )){
   Alert ("нашли MODE_HISTORY");
 for ( i=OrdersTotal();i>0;i--)  {
 Alert ("паследний цикл",i);
  OrderSelect(i-1,SELECT_BY_POS );
  if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
  || OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol())  { 
  Alert ("OrderTicket( )",OrderTicket( )); 
  OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse",  GetLastError( ) ); 
   OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
   Alert ("OrderClose-vse",  GetLastError( ) ); C=0; }}}}                              
   

In particolare, la lineaAlert ("OrderTicket( )",OrderTicket( )); Il che potrebbe significare che l'ultimo ciclo non è completato!!!

Ecco il registro. Prima, riscrivevo spesso il codice, incontravo spesso degli errori, penso 4108 e 4050, ora non c'è nessun errore! Sì, beh, comunque non funziona!

 

Sì, beh, credo che sia qui che diventa complicato.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

Proprio così, s... Cosa ho fatto di sbagliato nella linea?


 
Perbacco, non so, una condizione come condizione.
 
Dimka-novitsek:

Sì, beh, credo che sia qui che diventa complicato.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

Proprio così, s... Cosa ho fatto di sbagliato nella linea?


|| viene eseguito per primo, poi &&
 
ilunga:
solo che a questo punto potrebbe essere un ordine pendente remoto e il risultato sarebbe insolito ;)

Non capisco, non è cancellato che sto selezionando qui, non sono storie di moda. OK, non c'è bisogno, quello è dopo.
 

-AAH!!! quindi farò una parentesi su entrambi i lati! GRAZIE!!!!!

Whew!!!

Ok, vado a farmi una doccia, fa caldo.

 
Dimka-novitsek:

Non capisco, non sto abbattendo quelli cancellati, non le storie di moda. Ok, non c'è bisogno, quello è dopo.

Supponiamo di avere 1 ordine pendente da cancellare e di aver raggiunto la linea (per facilità di lettura, l'ho suddivisa per operatore)

OrderDelete(OrderTicket( ));
Alert ("OrderDelete-vse",  GetLastError( ) );
OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
Alert ("OrderClose-vse",  GetLastError( ) );
 C=0;

Quindi, abbiamo questo ordine:

1) lo cancelliamo, e così facendo:

a) siamo fortunati e viene cancellato

b) non può essere cancellato perché il prezzo è troppo vicino/il server è sovraccarico/in Internet non funziona/ecc. Ma andiamo avanti lo stesso.

2) se qualcosa va storto, lo scriviamo

3) chiudere l'ordine (in sospeso!!! che abbiamo cancellato nel primo punto!!!)

risultato... Non posso prevedere al 100%, ma sembra un altro errore

4) visualizzare un messaggio su di esso

 
Dimka-novitsek:

Sì, beh, questo è il problema.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

È così giusto se... Cosa ho sbagliato nella linea?

Mettiamola così... Così non si spara a nessuno e non si ricevono ordini in giro... :))

Cominciamo in ordine. Per prima cosa, troveremo l'ultima posizione chiusa e ci assicureremo che sia chiusa alla presa:

   int j=-1;
   datetime t;
   // Поищем в цикле последнюю закрытую позицию, которая закрылась по TakeProfit
   for (int i=0; i<OrdersHistoryTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderSymbol()!=Symbol())     continue;
         if (OrderType()>1)               continue;
         if (OrderMagicNumber()==1000 || OrderMagicNumber()==2000) {
            if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
               }
            }
         }
      }
   if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
      if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point) {
         Alert("Позиция с тикетом #",OrderTicket()," закрыта по TakeProfit, закрываем остальные прозиции и удаляем отложенные ордера");
         // Здесь код для закрытия всех открытых позиций (тоже в цикле)
         // Здесь код для удаления всех отложенных ордеров (также в цикле)
         }
      }

Questo:

// Здесь код для закрытия всех открытых позиций (тоже в цикле)
// Здесь код для удаления всех отложенных ордеров (также в цикле)

Questo sarà il vostro compito a casa... :)

 
GRAZIE!!!!!!
 
Cool writing!!!!