Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 679

 

Sto scrivendo un robot, collegando Ctrade, prima voglio usare la logica, secondo la quale all'inizio di ogni ora farà un'operazione di acquisto a prezzo di mercato, dopo mezz'ora venderà tutto (Sell) a un nuovo prezzo di mercato. Quando lo provo nel tester, ottengo l'errore Invalid order type.

Il mio strumento è SBER, il mio cliente è Otkritie. Il mio ordine è in modalità manuale, il mio ordine non è passato nel conto reale o demo.

Quale potrebbe essere l'errore? È vero che il mercato azionario non può essere scambiato al prezzo di mercato?

 
post_ek:

Sto scrivendo un robot, collegando Ctrade, prima voglio usare la logica, secondo la quale all'inizio di ogni ora farà un'operazione di acquisto a prezzo di mercato, dopo mezz'ora venderà tutto (Sell) a un nuovo prezzo di mercato. Quando lo provo nel tester, ottengo l'errore Invalid order type.

Il mio strumento è SBER, il mio cliente è Otkritie. Il mio ordine è in modalità manuale, il mio ordine non è passato nel conto reale o demo.

Quale potrebbe essere l'errore? È vero che il mercato azionario non può essere scambiato al prezzo di mercato?

Non riesco a capire cosa hai scritto senza il tuo codice e perché non funziona per te.
 
Se l'EA è in esecuzione su un computer portatile ed è in modalità di ibernazione, l'EA collegato funzionerà in questo caso?
 
Movlat Baghiyev:
Se l'EA è in esecuzione su un computer portatile ed è andato in modalità di ibernazione, l'EA collegato funzionerà in questo caso?
E voi abiliterete la stampante nel registro di qualsiasi valore e lo scoprirete. Se non stampa, allora non funziona.
 
Vitalie Postolache:
E tu includerai la stampa nel registro di qualsiasi valore e lo scoprirai. Se non stampa, non funziona.
Questo è chiaro ... ho pensato che qualcuno potrebbe condividere la sua esperienza con un principiante
 
Movlat Baghiyev:
Se l'EA è in esecuzione su un computer portatile ed è andato a dormire, l'EA collegato funzionerà in questo caso?

La modalità di ibernazione è di solito quella che spegne l'unità,

Recentemente ho installato un server, e solo il terzo giorno ho visto che il computer era addormentato, cioè non funzionava, cioè tutti gli EA non funzionavano,

Ho disattivato la modalità di ibernazione e tutto va bene.

 
Movlat Baghiyev:
Questo è chiaro...mi chiedevo se qualcuno potesse condividere la sua esperienza con un principiante.
Beh, nella mia esperienza non funziona molto in modalità di ibernazione, solo alcuni servizi di sistema.
 
Movlat Baghiyev:
Ciao, se il consulente è in esecuzione su un computer portatile ed è in modalità di ibernazione, il consulente collegato funzionerà in questo caso?

No, non funzionerà. Nelle impostazioni di alimentazione, impostare l'alimentazione:

NO alla modalità sleep!

 
Sergey Gritsay:
Senza il tuo codice, è difficile capire cosa hai scritto e perché non funziona.
//+------------------------------------------------------------------+
//|                                                         Gear.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Trade/Trade.mqh>
CTrade  trade;

bool TimeFlag, FLG;
int TimeScale=50, TimeInMemory, TimeNow;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  
  //---Блок получения информации с биржи    
  MqlTick oCurrentTick;
  SymbolInfoTick(Symbol(), oCurrentTick);
//---Блок определения начала нового временного интервала
   TimeFlag=false;
   datetime tm=TimeCurrent();
   MqlDateTime stm;
   TimeToStruct(tm,stm);
   if(MathMod(StringToInteger((string)stm.min),TimeScale)==0)
     {
      TimeNow=StringToInteger((string)stm.min);
     }
   if(TimeNow != TimeInMemory)
     {
      TimeInMemory=TimeNow;
      TimeFlag=true;
      //Print(_Symbol);
     }
    
     if(TimeFlag)
       {
       if(FLG)
         {
   if(!trade.Buy(1,_Symbol))
     {
      //--- сообщим о неудаче
      Print("Метод Buy() потерпел неудачу. Код возврата=",trade.ResultRetcode(),
            ". Описание кода: ",trade.ResultRetcodeDescription());
     }
   else
     {
      Print("Метод Buy() выполнен успешно. Код возврата=",trade.ResultRetcode(),
            " (",trade.ResultRetcodeDescription(),")");
     }
         FLG=false;
         }
       else
         {
         trade.Sell(1);
         FLG=true;
         }
       }
  }
//+------------------------------------------------------------------+
 
post_ek:

Questo non è il modo di farlo:

bool TimeFlag,FLG;
int TimeScale=50,TimeInMemory,TimeNow;

o meglio, dopo una tale dichiarazione, dovete inizializzare esplicitamente(assegnare valori a) queste variabili in OnInit().

Anche il metodo Sell deve essere circondato da controlli, come

trade.ResultRetcode(),
            " (",trade.ResultRetcodeDescription(),")");

E ci può essere anche una fregatura - la mattina, all'apertura delle contrattazioni, l'asta non inizia immediatamente, non dal primo secondo - è allora che sono possibili errori.

Motivazione: