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

 
mikhail12:

Ma se si riapre, la posizione viene tagliata dell'importo dello spread.

Beh, sarebbe una perversione particolarmente ordinata. Non credo.
 
tara:

Beh, sarebbe una perversione particolarmente elegante. Non credo.

Sì, ho già controllato, credo... se non lo fosse, si potrebbe tenere un autsraeli sell in un conto islamico, e un buy in un conto spread. Ci sarebbero profitti stabili... più che in banca
 

1. Situazione di chiusura parziale di un ordine - il biglietto è cambiato, e scritto nel commento al nuovo ordine, è chiaro, può essere tolto.
2. La situazione di alcuni broker quando trasferiscono una posizione durante la notte/il fine settimana, chiudono la posizione e la riaprono all'inizio del giorno, come si comporta il biglietto in questo caso? Il vecchio biglietto è scritto nel commento della nuova posizione, non succede niente? Quali sono i modi per tenere traccia degli ordini se ce ne sono più di 4-8?

 
Vladislav: avresti dovuto cancellare il post, imho.
 
artmedia70:


datetime è uguale a int



Mi ha fatto pensare - ero sicuro che datetime fosse un int senza segno, ho controllato e avevi ragione. Si scopre che MT4 non vivrà più del 2038 ;). C'è ancora tempo )))))))))))))))))))))))).
 
tara:
Vladislav: non avresti dovuto cancellare il post, imho.


Non per niente, IMHO, naturalmente: datetime è davvero int. Anche se tutto ciò che è stato scritto è corretto in generale, ma non in questo caso. Qui non riesco a capire la logica degli sviluppatori ICL (((((((((((((. Forse lo correggeranno in una nuova versione della lingua.

HH il significato del post cancellato era che i tipi dovrebbero essere usati come previsto, altrimenti si può incorrere in errori di runtime. In questo caso per la data è meglio datetime, non int, perché c'è la speranza che il mismatch dei tipi venga corretto.

 
VladislavVG:


No per niente, IMHO, naturalmente: datetime è davvero int. Anche se tutto quello che è stato scritto è corretto in generale, ma non in questo caso. Non riesco a capire la logica degli sviluppatori ICL qui (((((((((((((. Forse lo correggeranno in una nuova versione della lingua.

HH il significato del post cancellato era che i tipi dovrebbero essere usati come previsto, altrimenti si può incorrere in errori di runtime. In questo caso, per la data è meglio datetime, ma non int, perché c'è la speranza che il mismatch dei tipi venga corretto.


Sono d'accordo, non dovremmo usare int invece di datetime, o colore. nemmeno a causa di errori di esecuzione, ma da quello che succederà quando gli sviluppatori metteranno le cose in ordine.
 
VladislavVG:


No per niente, IMHO, naturalmente: datetime è davvero int. Anche se tutto quello che è stato scritto è corretto in generale, ma non in questo caso. Non riesco a capire la logica degli sviluppatori ICL qui (((((((((((((. Forse lo correggeranno in una nuova versione della lingua.

HH il significato del post cancellato era che i tipi dovrebbero essere usati come previsto, altrimenti si può incorrere in errori di runtime. In questo caso, per la data è meglio datetime, ma non int, perché c'è la speranza che il mismatch dei tipi venga corretto.

Sì. Hanno promesso 8 byte come in MQL5. Credo che sarà il tipo __time64_t (UNIXTIME64).
 
solnce600:

Signori professionisti.... sono confuso

TarasBY eartmedia70 dicono che il mio errore è legato al valore della variabile che memorizza il numero magico dell'ordine


Vinin dice chenon si tratta di un numero magico ma di una logica sbagliata......... artmedia70 discute con lui

.

Se i professionisti non sono d'accordo sul mio problema, cosa devo fare come principiante per risolvere il mio problema?


L'errore con il mago fa sì che il tuo EA non veda che la sua posizione è chiusa su uno stop quando chiude su uno stop. Perché? La risposta è che si apre una posizione con magic 123 e si invia la variabile Magic alla funzione che controlla la chiusura della posizione allo stop. A cosa pensate che equivalga durante l'inizializzazione implicita? Zero. La funzione cerca naturalmente le posizioni con il numero magico 0 ed è uguale a 123 nelle vostre posizioni. E non stiamo discutendo, solo... ...ragionamento... Controlla la risposta per chiudere sulla fermata:


double   Lot;
int      Magic=123;

int start() {

   double Price=iOpen(Symbol (),0,0);
          
   int last_order_bar=0; 
   int ot=OrdersTotal();
   if (ot>0) {
      if (OrderSelect(ot-1,SELECT_BY_POS))
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) last_order_bar=iBarShift(Symbol(),0,OrderOpenTime()); 
      }                                    

   int last_hist_order_bar=0;   
   int oht=OrdersHistoryTotal(); 

   if (oht>0) { 
      if (OrderSelect(oht-1,SELECT_BY_POS, MODE_HISTORY))    
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) last_hist_order_bar=iBarShift(Symbol(),0,OrderOpenTime());
      }

   if (ot==0)
      if (Bid==Price)
  //=============================================================== 
         if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
            if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))
               if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point))
  //============================================================
                  Lot=MarketInfo(Symbol(), MODE_MINLOT);   
                  if (isCloseLastPosByStop(Symbol(), OP_BUY, Magic, Lot)) {
                     Lot=Lot*2;
                     OrderSend(Symbol(),OP_SELL,Lot,Bid,1,Ask+1500*Point,Ask-300*Point,"jfh",123 );
                     }
                  else {
                     Lot=0.1;        
                     OrderSend(Symbol(),OP_SELL,1,Bid,Lot,Ask+1500*Point,Ask-300*Point,"jfh",123 );
                     }
   return(0);
}
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy, int op, int mn, double &ll) {
   double   pt;
   int      dg, i, j=-1, k=OrdersHistoryTotal()-1;
   datetime t=0;                                   // во избежание возможных ошибок после возможных будущих улучшений
   for (i=k; i>=0; i--) {
     if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderMagicNumber()!=mn)   continue;   // если магик не тот, переходим к следующему
         if (OrderSymbol()!=sy)        continue;   // если символ не тот, переходим к следующему
         if (OrderType()!=op)          continue;   // если тип не тот, переходим к следующему
         if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            j=i;
            }
         }
      }
   if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
      dg=MarketInfo(OrderSymbol(), MODE_DIGITS);      // количество знаков в цене символа ордера
      pt=MarketInfo(OrderSymbol(), MODE_POINT);       // размер пункта инструмента в валюте котировки ордера
      if (MathAbs(OrderClosePrice()-OrderStopLoss())<0.5*pt) { // Если закрыт по стопу
         ll=OrderLots();                              // записываем количество лотов в ордере, закрытом по стопу
         return(true);                                // возвращаем истину
         }
      }
   return(False);                                     // возвращаем ложь (позиции нету, либо не по стопу)
}
//+----------------------------------------------------------------------------+

Non ho guardato il resto della tua logica EA "morta" - ti stavo aiutando a capire la funzione per controllare la chiusura su stop...

 
tara:

Non c'è di che. Buona fortuna!

Alexei! Buon pomeriggio!

La nostra comunicazione non esce dalla mia testa...... ed ecco perché.....

In relazione alla mia codifica ho sentito ripetutamente commenti sulla mancanza di logica.

Ieri mi hai spiegato l'algebra booleana, è un argomento ampio e profondo.

Il fatto è che non sono un matematico e certamente non sono una mente algebrica.

Alcune cose matematiche non molto difficili le capisco.... ma non subito, e cose complesse il mio cervello non le percepisce affatto.

Più di sei mesi fa, prima di iniziare a studiare il manuale di programmazione MCL, mi chiedevo

se potessi capirlo senza capacità matematiche.

Ma il signor Kozlov, nella prefazione al suo libro di testo, ha detto che in realtà è molto più semplice di quanto sembri a prima vista.

a prima vista.

E infatti il 60-70% del suo tutorial penso di essere ora in grado di capire (probabilmente non la prima volta) e di conseguenza posso già codificare qualcosa.

Fino a ieri mi sembrava che tutti i complessi calcoli matematici (che non riesco a capire) li facesse il programma, e io devo solo conoscere le regole con cui

il programma funziona e fa i calcoli.

Ma la nostra conversazione di ieri mi ha portato all'idea che se non imparo l'algebra booleana, i miei codici saranno privi di logica.

Se i miei codici mancheranno di logica booleana, i miei programmi non funzioneranno correttamente, o non funzioneranno affatto.

Ma ieri ho dato un'occhiata a Wikipedia e ho capito che l'algebra booleana e probabilmente la logica non sono per la mia mente!

Ieri a un'occhiata su un frammento del mio codice avete subito concluso che manca la logica booleana.

Se non ti dispiace, potresti spiegare un percorso del tuo ragionamento, che ha preceduto la tua conclusione sull'assenza di logica in questo frammento.

Se ti capisco, andrò avanti. Se non capisco..... probabilmente concluderò che la programmazione è qualcosa che supera di molto le mie capacità.

Grazie.

se (ot==0)
se (Bid==Price)
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))
if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point))

Motivazione: