Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 611

 
Vladimir Zubov:

Non lo so, di solito non chiudo il browser finché non arrivo alla fase "pronto per il controllo". Prova a cercare nella tua scheda "i miei prodotti", la bozza di solito è lì, se non c'è, potresti aver bisogno di iniziare dall'inizio. Se il nome del prodotto che volevi pubblicare non è occupato, è probabile che la bozza non sia stata salvata.

Grazie! Trovato!
 
Saluti a tutti, cari colleghi!
Una volta ho fatto una domanda sulla possibilità di salvare un array di oggetti di classe in un file, e ho ricevuto una risposta affermativa dalla comunità. Finalmente ho avuto la possibilità di controllare tutto. E sì, in effetti questo salva. E poi si legge addirittura COSÌ. Comunque, sia FileWriteArray che FileReadArray restituiscono valori corretti per il numero di elementi scritti e letti. Tuttavia, quando si cerca di accedere al primo elemento dell'array attraverso un metodo di classe, il tester genera l'errore di accesso al puntatore non valido seguito dall'errore critico OnTick e termina. Notate, però, che se state lavorando non con un array scritto e poi letto, ma solo con qualcosa che viene creato in memoria, tutto funziona. Quale potrebbe essere il problema? Qual è il modo corretto per ripristinare un array di oggetti salvato?
 
BlackTomcat:
Saluti a tutti, cari colleghi!
Una volta ho fatto una domanda sulla possibilità di salvare un array di oggetti di classe in un file, e ho ricevuto una risposta affermativa dalla comunità. Finalmente ho avuto la possibilità di controllare tutto. E sì, in effetti questo salva. E poi si legge addirittura COSÌ. Comunque, sia FileWriteArray che FileReadArray restituiscono valori corretti per il numero di elementi scritti e letti. Tuttavia, quando si cerca di accedere al primo elemento dell'array attraverso un metodo di classe, il tester genera l'errore di accesso al puntatore non valido seguito dall'errore critico OnTick e termina. Notate, però, che se state lavorando non con un array scritto e poi letto, ma solo con qualcosa che viene creato in memoria, tutto funziona. Quale potrebbe essere il problema? Come ripristinare correttamente un array di oggetti salvato?
Per favore, mandami il codice!
 
Ciao, conosco MT4 abbastanza bene, ma MT5 è un principiante. Per favore consigliatemi quale comando per chiudere un ordine! Non l'ho trovato nella lista dei tipi di operazioni qui https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions. SoloCLOSE_BY e ho bisogno di chiuderlo.
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexander Kharlamov:
Ciao, conosco MT4 abbastanza bene, ma MT5 è un principiante. Per favore consigliatemi quale comando per chiudere l'ordine! Non ho trovato nessun comando nella lista dei tipi di operazione qui https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions. L'unico comando che ho èCLOSE_BY, ho solo bisogno di chiudere l'ordine.

in mt5 non è così semplice

chiudere significa aprire un'operazione opposta con lo stesso lotto

cioè l'operazioneTRADE_ACTION_DEAL

 
Vladislav Andruschenko:

in mt5 non è così semplice

chiudere significa aprire un'operazione opposta con lo stesso lotto

cioè l'operazioneTRADE_ACTION_DEAL

Grazie per la risposta, ma non capisco bene... Ho aperto un trade opposto e poi devo fare unTRADE_ACTION_CLOSE_BY tra di loro?
 
Alexander Kharlamov:
Grazie per la risposta, ma non ho ancora capito bene. Apro una posizione opposta e poiTRADE_ACTION_CLOSE_BY tra loro?

In MT5 esiste il concetto di POSIZIONE. Potete chiudere una posizione. Se volete chiudere completamente una posizione, usate la libreria standard. Per un conto di compensazione un esempio di chiusura di una posizione:

//+------------------------------------------------------------------+
//|                                                 PositionClos.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- подключение стандартной библиотеки
#include <Trade\Trade.mqh>
//--- объект класса CTrade
CTrade trade;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- закрытие позицию по текущему символу
   trade.PositionClose(Symbol());
  }
//+------------------------------------------------------------------+
File:
 
Karputov Vladimir:

In MT5 esiste il concetto di POSIZIONE. Potete chiudere una posizione. Se volete chiudere completamente una posizione, usate la libreria standard. Per un conto di compensazione un esempio di come chiudere una posizione:

Credo di cominciare a capire! ) La posizione cambierà ad ogni esecuzione di ordine per quello strumento, giusto. La domanda ora è: "L'identificatore di posizione è un numero unico che viene assegnato ad ogni posizione appena aperta e non cambia durante la sua vita. Corrisponde al biglietto dell'ordine con cui è stata aperta la posizione".

E se gli ordini successivi cambiano la posizione, il suo numero rimane uguale al primo ordine che l'ha creata?
 
Alexander Kharlamov:

1. Credo di cominciare a capire! ) La posizione cambierà ad ogni esecuzione di ordine per questo simbolo, giusto?
2. L'identificatore di posizione è un numero unico, che viene assegnato ad ogni posizione appena aperta e non cambia durante la sua vita. Corrisponde al biglietto dell'ordine con cui è stata aperta la posizione".

E se gli ordini successivi cambiano la posizione, il suo numero rimane uguale al primo ordine che l'ha creata?

1. Sì, proprio così. L'esecuzione di un ordine genera una transazione. Una transazione può:

  • creare una posizione
  • cambiare il volume di una posizione
  • chiudere una posizione
2. Cosa c'è di meglio della pratica? :) Aprire una posizione (manualmente) su qualsiasi grafico. Eseguire lo script

//+------------------------------------------------------------------+
//|                                           PositionGetInteger.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for(int i=0;i<PositionsTotal();i++)
     {
      //--- проверим наличие позиции и выведем время её изменения 
      string pos_symbol=PositionGetSymbol((uint)i);
      if(pos_symbol!=NULL)
        {
         //--- получим идентификатор позиции для дальнейшей работы с ней 
         ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER);
         Print(pos_symbol," postion #",position_ID);
         //--- получим время образования позиции в миллисекундах с 01.01.1970 
         long create_time_msc=PositionGetInteger(POSITION_TIME_MSC);
         PrintFormat("Position #%d  POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID,
                     create_time_msc,TimeToString(create_time_msc/1000));
         //--- получим время последнего изменения позиции в секундах с 01.01.1970 
         long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE);
         PrintFormat("Position #%d  POSITION_TIME_UPDATE = %i64 seconds => %s",
                     position_ID,update_time_sec,TimeToString(update_time_sec));
         //--- получим время последнего изменения позиции в миллисекундах с 01.01.1970 
         long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC);
         PrintFormat("Position #%d  POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s",
                     position_ID,update_time_msc,TimeToString(update_time_msc/1000));
        }
     }
//--- 
  }
//+------------------------------------------------------------------+

- fai attenzione alla linea (guarda la scheda "Esperti" del terminale):

2016.08.29 14:51:24.435 PositionGetInteger (EURUSD,M1)  EURUSD postion #95873997

Aumentare il volume, eseguire di nuovo lo script - confrontare di nuovo la linea

2016.08.29 14:51:32.872 PositionGetInteger (EURUSD,M1)  EURUSD postion #95873997

Come potete vedere, la proprietà di posizione (POSITION_IDENTIFIER) non cambia se la posizione non è invertita.

File:
 
POSIITION_IDENTIFIER cambia quando la posizione è invertita.
Motivazione: