Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 217

 
Valerius:


Prova a rinfrescare le citazioni. Servizio - Archivio quotazioni - seleziona la tua coppia di valute - scarica.

Se questo non aiuta, reinstalla la metatrader.


Ho provato a reinstallare diverse volte e anche ad aprire un nuovo account.... Non ha funzionato. A cosa potrebbe essere collegato?

Grazie.

 
sidovi:


Ho provato a reinstallare diverse volte e anche ad aprire un nuovo account.... Non ha funzionato. A cosa potrebbe essere collegato?

Grazie.


Hai cancellato tutti i file nella cartella di installazione di MetaTrader prima dell'installazione?

E hai provato con l'archivio delle citazioni?

 
a196012a:

Tutti gli ordini più grandi si apriranno solo con un volume di 0,3 lotti. Tutti gli ordini di volume inferiore che vengono aperti in risposta a una chiusura sullo SL nel volume di 0,3 lotti si apriranno nel volume di 0,1 lotti. Solo 0,1 e 0,3. Non ci sono altri volumi.

Durante la chiusura di un ordine di 0,3 lotti attraverso lo SL, ricordate l'ora in cui l'ordine è stato aperto in risposta alla chiusura di cui è stato aperto (cioè l'ordine di 0,1 lotti).

Grazie per il vostro aiuto.

Potresti dirmi per favore dove è impostata l'opzione per inviare un messaggio alle mie e-mail quando qualcuno risponde al mio post.

Grazie ancora molto.


E tu in realtà di cosa hai bisogno, di un algoritmo o della funzione scritta in sé?
 
a196012a:

Grazie per il vostro feedback.

Ho bisogno o dell'algoritmo o della funzione.

La cosa principale è che il codice ricordi il valore dell'ora dopo che ho chiuso un ordine 0,3 SL

Non so come codificare esattamente questa azione.

Se un ordine con un volume di 0,3 ha chiuso sullo SL

{
A2= valore per l'ora in cui l'ordine di un volume minore è stato aperto in risposta alla chiusura di cui è stato aperto
}

===================================================================================================

Se diversi ordini con un volume di 0,1 hanno chiuso a SL su SINGOLO TICK

{

aprire un ordine separato di volume 0,3 al prezzo di chiusura di OGNI ordine chiuso

}

===================================================================================================

Se diversi ordini con un volume di 0,3 hanno chiuso su un SL in UN TIKE

{

ricordare il valore dell'ora di apertura di OGNI ordine pertinente per volume 0,1

}

Ho scritto un codice funzionante per aprire e chiudere gli ordini (vedi primo post)

Non sono sicuro di quale codice includere in esso per risparmiare 0,1 tempo di apertura dell'ordine.

Non so come codificare l'apertura degli ordini e ricordare il valore dell'ora di apertura nel caso in cui diversi ordini vengano chiusi in un tick.

Se in relazione alla realizzazione della mia idea di cambiare il codice che ho scritto - non mi dispiace se lo cambiate.

L'OBIETTIVO FINALE DEL MIO PROGRAMMA È QUELLO DI MEMORIZZARE IL VALORE DELL'ORA DI APERTURA. Tutte le altre operazioni (compresi gli ordini di apertura) sono subordinate a questo obiettivo finale e sono di natura ausiliaria.

Se avessi saputo come fare a meno di loro, non li avrei inclusi nel codice.

Grazie ancora.


Ecco un esempio di programma. Per favore, dategli un'occhiata. Ci sono alcuni commenti.

extern int MagicNumber=123;

datetime time;
//=================================================================
void start()
{
int er,se;

if(prov_open_orders()) //Проверяем, есть ли открытые ордера
 {
  se=sear();//Ищем последний ордер, который закрылся по стопу. Если последний ордер закрылся по профиту
            //то просто возвращается нулевое значение
            //Если Последний ордер закрылся по по стопу, то ищем ордер с лотом 0.1 и возвращаем
           //его время открытия. В переменной time будет время открытия ордера с лотом 0.1
  if(se==1)
   {
    if(OrderType()==OP_BUY && OrderProfit()<0)
     {//Если закрылся по стопу, то открываем противоположный ордер с увеличенным лотом
      er=OrderSend(Symbol(),OP_SELL,0.3,Bid ,3,Bid+400*Point,Bid-200*Point,"jfh",MagicNumber);
      time=SearTim(se);//Теперь находим время ордера с лотом 0.1
     }
   }
  if(se==2)
   {
    if(OrderType()==OP_SELL && OrderProfit()<0)
     {//Если закрылся по стопу, то открываем противоположный ордер с увеличенным лотом
      er=OrderSend(Symbol(),OP_BUY,0.3,Ask ,3,Ask-400*Point,Ask+200*Point,"jfh",MagicNumber);
      time=SearTim(se);//Теперь находим время ордера с лотом 0.1
     }
   }
 }

return;
}

//========================
bool prov_open_orders()
{
for(int is=OrdersTotal()-1; is >= 0; is--)
   {
    if(OrderSelect(is, SELECT_BY_POS, MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
         {
          if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            return(false); // есть открытые ордера (любые)
           }
         }
      }
   }
return(true);
}

//=================================================================
datetime SearTim(int s)
{
for(int is=OrdersHistoryTotal(); is>=0; is--)
   {
    if(OrderSelect(is, SELECT_BY_POS, MODE_HISTORY))
      {
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType()==OP_SELL && OrderProfit()<0 && OrderLots()==0.1)
           {//Если закрылся по стопу, то открываем противоположный ордер с увеличенным лотом
            return(OrderOpenTime());
           }
          if(OrderType()==OP_BUY && OrderProfit()<0 && OrderLots()==0.1)
           {//Если закрылся по стопу, то открываем противоположный ордер с увеличенным лотом
            return(OrderOpenTime());
           }
         }
      }
   }
return(NULL);
}

//=================================================================
int sear()
{
for(int is=OrdersHistoryTotal(); is>=0; is--)
   {
    if(OrderSelect(is, SELECT_BY_POS, MODE_HISTORY))
      {
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderProfit()>0)
           {//Если  закрылся по профиту то просто ухоим из цикла.
              return(0);
           }
          if(OrderType()==OP_SELL && OrderProfit()<0)
           {//Если закрылся по стопу, то открываем противоположный ордер с увеличенным лотом
            return(2);
           }
          if(OrderType()==OP_BUY && OrderProfit()<0)
           {//Если закрылся по стопу, то открываем противоположный ордер с увеличенным лотом
            return(1);
           }
         }
      }
   }
return(0);
}
 
Valerius:


Hai cancellato tutti i file nella cartella dove è installato Metatrader prima dell'installazione?

E hai provato con l'archivio delle citazioni?


Sì, risultato 0 :((
 
sidovi:

Sì, risultato 0 :((


Allora devi contattare il tuo DC per il supporto...

È la prima volta che lo vedo.

 
Valerius:


Allora contattate solo il vostro DC per il supporto...

È la prima volta che lo vedo.


Pensi che ci sia un servizio in Windows 10 che influisce su questo?
 
sidovi:

Pensi che ci sia un servizio in Windows 10 che influisce su questo?

No, non c'è.
 
Victor Nikolaev:

No, non ce n'è uno.

Grazie
 
a196012a:

Grazie mille per il vostro aiuto

Sto imparando le basi della programmazione dal tutorial di Kovalev e dalle funzioni descritte in esso.

Ho incontrato alcune funzioni nel vostro codice, che non ho visto nei miei libri o in Code Base

Ecco le funzioni che non conosco

sear();

SearTim(se);

prov_open_orders()

Le sarei molto grato se mi dicesse dove posso leggere qualcosa su di loro.

Proprio in quel codice.