Привязка данных к ордеру - страница 2

 
либо в файл сохранять с именем тикета. либо в структуру все записывать, что правильней !
 
dimeon:
либо в файл сохранять с именем тикета. либо в структуру все записывать, что правильней !

тем не менее должна быть возможность сохранения в файл, т.к. всегда есть вероятность отключения интернета..
 
keekkenen:

тем не менее должна быть возможность сохранения в файл, т.к. всегда есть вероятность отключения интернета..

При отключении инета ничего не произойдет. Вот если терминал тоько будет перезагружаться - тогда - да проблема. Но такое - редкость. Я не знаю что вы хотите сохранять дополнительно, но вс данные об открытом ордере лучше считывать на каждом тике во избежании непредвиденных ситуация. В конце концов можно расчитать параметры при которых ордер открылся.
 

Всё же надёжней хранить данные на сервере. Значит - отложки оч далеко от рынка с магиком, равным тикету нужного ордера. В комментарии к отложке писать нужную инфу (не много влезет). Стопы и тейки ордера можно скопировать в стопы и тейки отложки.

А вообще конечно костыли это всё. Почему бы сразу не сделать метаквотам нужный функционал для хранения и подгрузки данных с сервера ДЦ...

 
artmedia70:

Всё же надёжней хранить данные на сервере. Значит - отложки оч далеко от рынка с магиком, равным тикету нужного ордера. В комментарии к отложке писать нужную инфу (не много влезет). Стопы и тейки ордера можно скопировать в стопы и тейки отложки.

А вообще конечно костыли это всё. Почему бы сразу не сделать метаквотам нужный функционал для хранения и подгрузки данных с сервера ДЦ...


Привет, есть проблемка, коммент всего 32 байта.

Я тут https://forum.mql4.com/ru/56236/page591#960489 немного пофилософствовал на эту тему, с записью на диск структуры, и глюк вылез, или у меня или не у меня.

 
_SERG_:

Привет, есть проблемка, коммент всего 32 байта.

Я тут https://forum.mql4.com/ru/56236/page591#960489 немного пофилософствовал на эту тему, с записью на диск структуры, и глюк вылез, или у меня или не у меня.





Еще раз повторюсь. Определите размер массива
 

Ответил в другой теме.

Размер исправил, результата тот же.

Структура данными заполнена.

Данные в журнале, в исходнике кривые функции пока зарэмил.

//+------------------------------------------------------------------+
//|                                         TEST_FileWriteStruct.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#include <stderror.mqh>

struct ORD {
    int      OINDEX;      // INDEX
    int      OTICKET;     // OrderTicket
    string   OSYMBOL;     // OrderSymbol
    int      OTYPE;       // OrderType
    double   OOP;         // OrderOpenPrice
    datetime OOT;         // OrderOpenTime
    double   OLOTS;       // OrderLots
    double   OSL;         // OrderStopLoss
    double   OTP;         // OrderTakeProfit
    double   OPROFIT;     // OrderProfit
    double   OCP;         // OrderClosePrice
    datetime OCT;         // OrderCloseTime
    double   OCOMMISSION; // OrderCommission
    double   OSWAP;       // OrdeSwap    
    int      OMN;         // OrderMagicNumber
    datetime OEXPIRATION; // OrderExpiration
    string   OCOMMENT;    // OrderComment
    double   OMLP;        // OrderMinLotPrice 
    double   OMPP;        // OrderMaxProfitPrice
};
ORD          Orders[100];

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart(){
   for (int  i = 0; i < OrdersTotal(); i++){
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES )){
        Orders[i].OINDEX      = i;
        Orders[i].OTICKET     = OrderTicket(); 
        Orders[i].OSYMBOL     = OrderSymbol();
        Orders[i].OTYPE       = OrderType();
        Orders[i].OOP         = OrderOpenPrice();
        Orders[i].OOT         = OrderOpenTime();
        Orders[i].OLOTS       = OrderLots();
        Orders[i].OSL         = OrderStopLoss();
        Orders[i].OTP         = OrderTakeProfit();
        Orders[i].OPROFIT     = OrderProfit();
        Orders[i].OCP         = OrderClosePrice();
        Orders[i].OCT         = OrderCloseTime();
        Orders[i].OCOMMISSION = OrderCommission();
        Orders[i].OSWAP       = OrderSwap();
        Orders[i].OMN         = OrderMagicNumber();
        Orders[i].OEXPIRATION = OrderExpiration();
        Orders[i].OCOMMENT    = OrderComment();
       }
   }  
 /* 
  // Вариант 1.  В функции
  FWS( Orders );
  
  // Вариант 2. В теле
  int i,FWS, FD;
  FD = FileOpen( "Orders.dat", FILE_READ|FILE_WRITE|FILE_BIN );
  for( i = 0; i < ArraySize( Orders ); i++ ){ 
    FWS = FileWriteStruct ( FD, Orders[i]);          // Вылазит ошибка 'Orders' - parameter conversion not allowed	TEST_FileWriteStruct.mq4	69	33
  }
  FileClose(FD);
  
  // Вариант 3. Без цикла
  FD = FileOpen( "Orders.dat", FILE_READ|FILE_WRITE|FILE_BIN );
  FWS = FileWriteStruct ( FD, Orders );          // Вылазит ошибка 'Orders' - parameter conversion not allowed	TEST_FileWriteStruct.mq4	75	31
  FileClose(FD);
*/
  POAC( Orders );
}
//+------------------------------------------------------------------+[SCR END]

/*
// Сбросим на диск
void FWS( ORD &l_ord[] ){
  int i,FWS, FD;
  FD = FileOpen( "Orders.dat", FILE_READ|FILE_WRITE|FILE_BIN|FILE_COMMON );
  for( i = 0; i < ArraySize( l_ord ); i++ ){ 
      FWS = FileWriteStruct ( FD, l_ord[i]); // Вылазит ошибка 'l_ord' - parameter conversion not allowed	TEST_FileWriteStruct.mq4	88	35
  }
  FileClose(FD);
}
*/
//
// Print Orders After Copying Печать ордеров после копирования
// 
void POAC ( ORD &l_OP[] ){     
   string TXT;
   for (int i = 0; i < OrdersTotal(); i++){      // или фиксированный размер, ранее опрн
     TXT = "[POAC][" +
     IntegerToString ( l_OP[i].OINDEX, 3)                                           + "][" +
     IntegerToString ( l_OP[i].OTICKET, 10)                                         + "][" +
                       l_OP[i].OSYMBOL                                              + "][" +
     IntegerToString ( l_OP[i].OTYPE, 1)                                            + "][" +
     DoubleToStr     ( l_OP[i].OOP,     MarketInfo( l_OP[i].OSYMBOL, MODE_DIGITS))  + "][" +
     TimeToString    ( l_OP[i].OOT,     TIME_DATE|TIME_SECONDS)                     + "][" +
     DoubleToStr     ( l_OP[i].OLOTS,   MarketInfo( l_OP[i].OSYMBOL, MODE_DIGITS))  + "][" +
     DoubleToStr     ( l_OP[i].OSL,     MarketInfo( l_OP[i].OSYMBOL, MODE_DIGITS))  + "][" +
     DoubleToStr     ( l_OP[i].OTP,     MarketInfo( l_OP[i].OSYMBOL, MODE_DIGITS))  + "][" +
     DoubleToStr     ( l_OP[i].OPROFIT, MarketInfo( l_OP[i].OSYMBOL, MODE_DIGITS))  + "][" +
     DoubleToStr     ( l_OP[i].OCP,     MarketInfo( l_OP[i].OSYMBOL, MODE_DIGITS))  + "][" +
     TimeToString    ( l_OP[i].OCT,     TIME_DATE|TIME_SECONDS)                     + "][" +
                       l_OP[i].OCOMMISSION                                          + "][" +
     DoubleToStr     ( l_OP[i].OSWAP,   MarketInfo( l_OP[i].OSYMBOL, MODE_DIGITS))  + "][" +
     IntegerToString ( l_OP[i].OMN, 10)                                             + "][" +
     TimeToString    ( l_OP[i].OEXPIRATION, TIME_DATE|TIME_SECONDS)                 + "][" +
                       l_OP[i].OCOMMENT                                             + "][" +
     DoubleToStr     ( l_OP[i].OMLP,    MarketInfo( l_OP[i].OSYMBOL, MODE_DIGITS))  + "][" +
     DoubleToStr     ( l_OP[i].OMPP,    MarketInfo( l_OP[i].OSYMBOL, MODE_DIGITS))  + "]" ;      
     Print( TXT );       
    }
}

Файлы:
 
Sukubba:

Доброго времени суток.

Появилась нужна привязать управляющие данные к конкретному ордеру, для последующего управления им. Поля "Комментарий" и "магическое число" были бы полезны, если бы их можно было бы изменять каким то образом, т.к. мои параметры изменяются динамически и часто. Помогите советом.

Всем спасибо кто не был равнодушным))


Записывайте данные в глобальные переменные.

Например номерСчета_имя_советника_валПара_параметр = Значение

203495MyAdvEURUSDpar1 = 10;

Либо те же данные можно записывать и считывать из ТХТ файла

 

Можно сохранять в динамический массив (для нескольких ордеров с одинаковым набором данных можно делать двухмерный массив - это на любителя) в который данные пишутся вместе с тикетом.

массив можно сохранять в бинарный файл через FileWriteArray при закрытии советника и каждые N минут (по таймеру при наличии изменений) и загружать при запуске советника через FileReadArray.

 
Alex.Ru:

Можно сохранять в динамический массив (для нескольких ордеров с одинаковым набором данных можно делать двухмерный массив - это на любителя) в который данные пишутся вместе с тикетом.

массив можно сохранять в бинарный файл через FileWriteArray при закрытии советника и каждые N минут (по таймеру при наличии изменений) и загружать при запуске советника через FileReadArray.

Переразмерить массив для ордеров не есть проблема.

В структуре используется массив, и структура работает, с учётом того, то используются разнотипные данные.

Проблема возникает при сохранении структуры, при использовании FileWriteStruct(), наличие строковых данных вызывает ошибку.

Хотя по логике FileWriteStruct() этого не должно быть, всё равно пишется бинарный файл. (Про кодовые таблицы пока пропустим.)

Нет проблем и при хранении в отдельных массивах, но напряжно передавать в процедуры все 17 а то и чуть больше параметров, а так структуру кинул и всё, но сохранить её в файлик не получается.

В определении сруктуры, разработчиками написано:"Структура является набором элементов произвольного типа ( кроме типа void). Таким образом, структура объдиняет логически связанные данные разных типов.", в определении FileWriteStruct(). написано:"Записывает в bin-файл содержимое структуры, переданной в качестве параметра, с текущего положения файлового указателя.", но в описании параметра функции вдруг возникает не логичная оговорка:"... Структура не должна содержать строки, динамические массивы и виртуальные функции."
Причина обращения: