Fehler, Irrtümer, Fragen - Seite 2457

 
Ist es auf dem Markt üblich, bei einem Produkt-Upgrade die EX5 der Vorgängerversion (über Ressourcen) beizufügen, so dass der Benutzer immer die Möglichkeit hat, im Falle eines Fehlers ein Rollback durchzuführen?
 
fxsaber:
Ist es auf dem Markt üblich, bei der Aktualisierung eines Produkts (über Ressourcen) die EX5 der Vorgängerversion einzupflegen, so dass der Benutzer immer die Möglichkeit hat, im Falle eines Fehlers ein Rollback durchzuführen?

Dies kann auch ohne Ressourcen geschehen...

Das Problem ist, dass neue Versionen möglicherweise andere Einstellungen haben...

Andere Einstellungen herauszuholen ist bereits ein Problem...

 
Vladimir Pastushak:

Dies kann auch ohne Ressourcen geschehen...

Das Problem ist, dass neue Versionen möglicherweise andere Einstellungen haben...

Andere Einstellungen herauszubringen ist bereits ein Problem...

Ich sehe darin kein Problem.

 

Bei der Abfrage von Logs von einem aktiven VPS wird der Fehler "Failed to get terminal logs" angezeigt

Wer weiß, was das Problem sein könnte? Gleichzeitig funktionieren die EAs auf dem VPS (Öffnen/Schließen von Trades), aber ich kann keine Logs laden.

 
fxsaber:

Darin sehe ich kein Problem.

Erst jetzt wurde mir klar, dass EX5 der Vorgängerversion mit einem Schutzmechanismus ausgestattet sein muss.

Und durch die Ressourcen der vorherigen Version wird EX5 in der Lage sein, ohne Schutz zu übertragen, was nicht geeignet ist.

 

Ich schreibe einen Indikator für 5.

Ich bekomme es nicht hin, den Zeitraum des Durchschnitts aus dem Eingabefeld im Diagramm zu aktualisieren. Auf 4 funktioniert dieser Entwurf.

Was ist los? Das Feld in der Inite wird durchOnChartEvent aktualisiert, der Zeitraum jedoch nicht. Ich kann es nicht ändern.

Ich füge ein einfaches Arbeitsbeispiel bei.

//+------------------------------------------------------------------+
//|                                                      Probe_2.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                                 https://mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://mql5.com"
#property description "The MA "
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot MA1
#property indicator_label1  "MA 1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrDarkOrange
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

//--- input parameters
 extern int PBB=10;  //  период МА
//--- indicator buffers
double         BufferMA1[];
//--- global variables
int            period_ma1;
int            period_max;

int            handle_ma1;
string sn,sPBB;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
  

   sPBB=IntegerToString(PBB);
   if(ObjectFind(0,"P2edit")!=0)
    {
       ObjectCreate(0,"P2edit",OBJ_EDIT,0,0,0);
       ObjectSetInteger(0,"P2edit",OBJPROP_XDISTANCE,300);
       ObjectSetInteger(0,"P2edit",OBJPROP_YDISTANCE,1);
       ObjectSetInteger(0,"P2edit",OBJPROP_XSIZE,70);
       ObjectSetInteger(0,"P2edit",OBJPROP_YSIZE,40);
       ObjectSetInteger(0,"P2edit",OBJPROP_SELECTABLE,false);
       ObjectSetInteger(0,"P2edit",OBJPROP_BGCOLOR,clrBlack);
       ObjectSetString (0,"P2edit",OBJPROP_TEXT,sPBB);
       ObjectSetInteger(0,"P2edit",OBJPROP_FONTSIZE,16);
       ObjectSetInteger(0,"P2edit",OBJPROP_COLOR,clrGray);
       ObjectSetInteger(0,"P2edit",OBJPROP_ALIGN,ALIGN_CENTER);
       ObjectSetInteger(0,"P2edit",OBJPROP_READONLY,false);
    }


//--- set global variables
   period_ma1=int(PBB<1 ? 1 : PBB);
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferMA1,INDICATOR_DATA);
   ArraySetAsSeries(BufferMA1,true);
   IndicatorSetInteger(INDICATOR_DIGITS,Digits());
//--- create handle
   ResetLastError();

   Comment("Должна соответствовать зеленой, а равна= ",PBB);
   
   handle_ma1=iMA(NULL,PERIOD_CURRENT,period_ma1,0,1,PRICE_CLOSE);
   if(handle_ma1==INVALID_HANDLE)
     {
      Print("The iMA(",(string)period_ma1,") object was not created: Error ",GetLastError());
      return INIT_FAILED;
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
 {
  if(id==CHARTEVENT_OBJECT_ENDEDIT)
   {
    string obj_name=sparam;
    if(!StringCompare(obj_name,"P2edit"))
     {
     string novPBB=NULL;
     if(ObjectGetString(0,obj_name,OBJPROP_TEXT,0,novPBB))
      {
       if(StringCompare(novPBB,sPBB,false))
        {
         PBB= (int)StringToInteger(novPBB);
         ObjectSetInteger(0,"P2edit",OBJPROP_BGCOLOR,clrBlack);
         ObjectSetInteger(0,"P2edit",OBJPROP_COLOR,clrLime);
        }
       }
Print("B OnChartEvent PBB=",PBB);
      ChartSetSymbolPeriod(0,_Symbol,_Period);
      }
    }
    return;
 }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//    Пробовал от сюда запускать.
//   sPBB=IntegerToString(PBB);
//   if(ObjectFind(0,"P2edit")!=0)
//    {
//       ObjectCreate(0,"P2edit",OBJ_EDIT,0,0,0);
//       ObjectSetInteger(0,"P2edit",OBJPROP_XDISTANCE,300);
//       ObjectSetInteger(0,"P2edit",OBJPROP_YDISTANCE,1);
//       ObjectSetInteger(0,"P2edit",OBJPROP_XSIZE,70);
//       ObjectSetInteger(0,"P2edit",OBJPROP_YSIZE,40);
//       ObjectSetInteger(0,"P2edit",OBJPROP_SELECTABLE,false);
//       ObjectSetInteger(0,"P2edit",OBJPROP_BGCOLOR,clrBlack);
//       ObjectSetString (0,"P2edit",OBJPROP_TEXT,sPBB);
//       ObjectSetInteger(0,"P2edit",OBJPROP_FONTSIZE,16);
//       ObjectSetInteger(0,"P2edit",OBJPROP_COLOR,clrGray);
//       ObjectSetInteger(0,"P2edit",OBJPROP_ALIGN,ALIGN_CENTER);
//       ObjectSetInteger(0,"P2edit",OBJPROP_READONLY,false);
//    } 
//   
//   if(PBB==0) PBB=(int)StringToInteger(sPBB);
// 
//   if(PBB<5) period_ma1=5; else  period_ma1=PBB;
//   if(PBB>300) period_ma1=300; else  period_ma1=PBB;
   
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

   ArraySetAsSeries(close,true);//--- Установка массивов буферов как таймсерий
//--- Проверка количества доступных баров
   if(rates_total<fmax(period_max,4)) return 0;
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      limit=rates_total-2;
      ArrayInitialize(BufferMA1,EMPTY_VALUE);
     }

//--- Подготовка данных
   int count=(limit>0 ? rates_total : 1),copied=0;
   copied=CopyBuffer(handle_ma1,0,0,count,BufferMA1);
   if(copied!=count) return 0;

 //Comment("ошибка = ");
 
//--- возвращаемое значение prev_calculated для следующего вызова
   return(rates_total);
  }

//+------------------------------------------------------------------+
//|            deinit                                                |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   int i;
   int obj_total=ObjectsTotal(0,0,-1);
   for(i=obj_total-1;i>=0;i--)
     {
      sn=ObjectName(0,i,0,-1);
      if(ObjectFind(0,sn)==0) 
        {
         if (StringFind(sn,"P2edit",0)==0) ObjectDelete(0,sn);
        }
     }
  
   Comment("");
   return;
  }
 
Zakhar Chumak:

Bei der Abfrage von Logs von einem aktiven VPS wird der Fehler "Failed to get terminal logs" angezeigt

Wer weiß, was das Problem sein könnte? Gleichzeitig funktionieren die EAs auf dem VPS (Öffnen/Schließen von Trades), aber ich kann keine Logs laden.

Es sieht so aus, als ob der Pfad zum temporären Ordner zu lang ist.

Die archivierten Protokolle werden zunächst in eine temporäre Datei (mit der Erweiterung tmp) im Temp-Ordner des Systems eingelesen. Es ist ein Fehler bei der Bildung eines temporären Dateinamens aufgetreten

 

Gehe ich recht in der Annahme, dass die Agenten nach einem Durchgang schlafen und darauf warten, dass die übrigen beschäftigten Agenten ihre Arbeit beenden?


 

Wie?

Niemand kann meine Frage beantworten?

Das ist interessant. Mit dieser Variante arbeitetOnCalculate. Aber diese Variante funktioniert nicht.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
 
Uladzimir Izerski:

Wie?

Niemand kann meine Frage beantworten?

Das ist interessant. Mit dieser Variante arbeitetOnCalculate. Aber diese Variante funktioniert nicht.

Wenn Sie den Zeitplan / Zeitraum ändern, erhält PBB den Wert 10, unabhängig davon, welchen Wert Sie im Eingabefeld angegeben haben.

Im Moment der Neuinitialisierung ist es so, als wäre es der erste Lauf.

Es gibt zwei Möglichkeiten, Ihr Problem zu lösen

1 - Speichern des PBB-Wertes in globalen Variablen und Abrufen des Zeitraums von dort.

2 - Wenn OnChartEvent auslöst, MA-Indikator reinitialisieren und neues Handle erhalten...