[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 420

 

Tinha este problema, resolvido através da busca de um computador na rede. Não no ambiente da rede, ela aparece através da busca. Um insecto de algum tipo.

P.S. Ou o problema das mãos tortas. ))) Verifique o rastreador e o ping para onde vão os pacotes.

 
stater:

Bom dia! Se você tem um minuto, veja o que está errado aqui, tudo vai bem nos testes, eu coloco em um gráfico real, eu sento e espero, mas não coloca ordens pendentes! Novamente eu começo a testar, ele compra... Erro 130



ERR_INVALID_STOPS130Paradas incorretas
 
moskitman:

Sim, eu mesmo pensei assim... Mas o fato é que, 64 vê todos na rede, 32 vê apenas 32. WTF???

sub: Poderia estar relacionado ao fato de que somente a área de trabalho (32) está nesta rede via cabo RG45, e todas as outras via wireless?

aproximadamente


Andrei, você precisa convidar meu filho, ele virá até você e preparará tudo.

ZS. Estou falando sério, a política é de configurar o roteamento corretamente também. Mas, IMHO, você tem que fazer isso localmente, não há nenhum estudante por perto?

 
moskitman:

Sim, eu mesmo pensei assim... Mas o fato é que, 64 vê todos na rede, 32 vê apenas 32. WTF???

sub: Poderia estar relacionado ao fato de que somente a área de trabalho (32) está nesta rede via cabo RG45, e todas as outras via wireless?

Sobre o direito:

Eu tinha um problema semelhante. Resolveu-o. Era um módulo Wi-Fi mal-configurado. Há uma característica de segurança em sistemas acima de XP.
 
Vinin:

ERR_INVALID_STOPS130Paradas incorretas
Muito obrigado, coloque RefreshRates(); funcionou, mas somente no computador onde eu copiei para outro terminal, os dados são totalmente diferentes ... e para pior, pode ser?
 

Como retirar o volume de pedidos de venda e compra em aberto, ou melhor ainda, seu valor?

 
Elektronik:

Como retirar o volume de pedidos de venda e compra em aberto, ou melhor ainda, seu valor?


Como você quer calcular o volume de pedidos de venda ou compra em aberto?

OrderLot() você quer resumir?

Ou conseguir um preço de equilíbrio?

 
sergeev:


Estes dados são necessários para calcular a diferença entre as ordens de compra e venda.

Vamos assumir que um pedido de compra com um volume de 0,09 lotes e dois pedidos de venda com um volume total de 0,11 lotes foram abertos, a diferença entre eles será de 0,09-0,11=-0,02, ou se possível a diferença entre seus valores.

 

Boa tarde. Minha pergunta é a seguinte. No livro MQL4.community, na seção "Standard Functions" (Funções Padrão) da seção "String Functions and Data Conversion Functions" (Funções de Conversão de Dados e Funções de String), é dado o seguinte exemplo de strings.mq4 Expert Advisor (dado na íntegra do livro)

//--------------------------------------------------------------------
// strings.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
extern int Quant_Bars=100;             // Количество баров
datetime   Time_On;
string     Prefix    ="Paint_";
//--------------------------------------------------------------- 2 --
int init()                             // Спец. функция init()
  {
   int Ind_Bar;                        // Индекс бара
   Time_On=Time [Quant_Bars];          // Время первого раскрашенного
   for(Ind_Bar=Quant_Bars-1; Ind_Bar>=0; Ind_Bar--)// Цикл по барам
     {
      Create(Ind_Bar,1);               // Нарисуем тонкую линию
      Create(Ind_Bar,2);               // Нарисуем толстую линию
     }
   WindowRedraw();                     // Перерисовка изображения 
   return;                             // Выход из init()
  }
//--------------------------------------------------------------- 3 --
int start()                            // Спец. функция start
  {
   datetime T1, T2;                    // 1 и 2 координаты времени
   int Error,Ind_Bar;                  // Код ошибки и индекс бара
   double P1, P2;                      // 1 и 2 координата цены
   color Col;                          // Цвет созданного объекта
//--------------------------------------------------------------- 4 --
   for(int Line=1; Line<=2; Line++)    // Цикл по видам линий
     {
      string Nom_Lin =Line + "_";      // Строка с номером линии
      //    string Nom_Lin  = DoubleToStr(Line,0)+"_";// Можно и так
      for(Ind_Bar=0; ;Ind_Bar++)       // Цикл по барам
        {
//--------------------------------------------------------------- 5 --
         datetime T_Bar= Time[Ind_Bar];// Время открытия бара
         if (T_Bar < Time_On) break;   // Заграничные не раскрашиваем
         string Str_Time=TimeToStr(T_Bar);       // Строка со временем
         string His_Name=Prefix+Nom_Lin+Str_Time;// Имя объекта
//--------------------------------------------------------------- 6 --
         T1=ObjectGet(His_Name,OBJPROP_TIME1);// Запрос коорд. t1
         Error=GetLastError();         // Получение кода ошибки
         if (Error==4202)              // Если объекта нет :(
           {
            Create(Ind_Bar,Line);      // Вызов ф-ии создания объекта
            continue;                  // На следующую итерацию
           }
//--------------------------------------------------------------- 7 --
         T2 =ObjectGet(His_Name,OBJPROP_TIME2); // Запрос коорд. t2
         P1 =ObjectGet(His_Name,OBJPROP_PRICE1);// Запрос коорд. p1
         P2 =ObjectGet(His_Name,OBJPROP_PRICE2);// Запрос коорд. p1
         Col=ObjectGet(His_Name,OBJPROP_COLOR); // Запрос цвета
         if(T1!=T_Bar || T2!=T_Bar || // Не те координаты или цвет:
            (Line==1 && (P1!=High[Ind_Bar] || P2!=  Low[Ind_Bar])) ||
            (Line==2 && (P1!=Open[Ind_Bar] || P2!=Close[Ind_Bar])) ||
            (Open[Ind_Bar] Close[Ind_Bar] && Col!=Red)  ||
            (Open[Ind_Bar]==Close[Ind_Bar] && Col!=Green)  )
           {
            ObjectDelete(His_Name);    // Удаляем объект
            Create(Ind_Bar,Line);      // Создаём правильный объект
           }
//--------------------------------------------------------------- 8 --
        }
     }
   WindowRedraw();                     // Перерисовка изображения 
   return;                             // Выход из start()
  }
//--------------------------------------------------------------- 9 --
int deinit()                           // Спец. функция deinit()
  {
   string Name_Del[1];                 // Объявление массива
   int Quant_Del=0;                    // Количество удаляемых объектов
   int Quant_Objects=ObjectsTotal();   // Cтолько всего ВСЕХ объектов
   ArrayResize(Name_Del,Quant_Objects);// Необходимый размер массива
   for(int k=0; k<=Quant_Del; i++)     // Удаляем объекты с именами,.. 
      ObjectDelete(Name_Del[i]);       // .. имеющимися в массиве
   return;                             // Выход из deinit()
  }
//-------------------------------------------------------------- 10 --
int Create(int Ind_Bar, int Line)      // Пользовательская функция..
  {                                    // ..создания объекта
   color Color;                        // Цвет объекта
   datetime T_Bar=Time [Ind_Bar];      // Время открытия бара
   double   O_Bar=Open [Ind_Bar];      // Цена открытия бара
   double   C_Bar=Close[Ind_Bar];      // Цена закрытия бара
   double   H_Bar=High [Ind_Bar];      // Максимальная цена бара
   double   L_Bar=Low  [Ind_Bar];      // Минимальная цена бара
 
   string Nom_Lin =Line + "_";         // Строка - номер линии
   // string Nom_Lin  = DoubleToStr(Line,0)+"_";// Можно и так
   string Str_Time=TimeToStr(T_Bar);   // Строка - время откр.     
   string His_Name=Prefix+Nom_Lin+Str_Time;// Имя созаваемого объект
   if (O_Bar < C_Bar) Color=Blue;      // Выбор цвета в зависимости..
   if (O_Bar >C_Bar) Color=Red;        // .. от характеристик бара
   if (O_Bar ==C_Bar) Color=Green;
 
   switch(Line)                        // Тонкая или толстая линия
     {
      case 1:                          // Тонкая линия
         ObjectCreate(His_Name,OBJ_TREND,0,T_Bar,H_Bar,T_Bar,L_Bar);
         break;                        // Выход из switch
      case 2:                          // Толстая линия
         ObjectCreate(His_Name,OBJ_TREND,0,T_Bar,O_Bar,T_Bar,C_Bar);
         ObjectSet(   His_Name, OBJPROP_WIDTH, 3);// Стиль     
     }
   ObjectSet(    His_Name, OBJPROP_COLOR, Color); // Цвет
   ObjectSet(    His_Name, OBJPROP_RAY,   false); // Луч
   ObjectSetText(His_Name,"Объект создан экспертом",10);// Описание
   return;                             // Выход из польз. ф-ии
  }
//-------------------------------------------------------------- 11 –
 

... continuou...

No final da subseção Função StringSubstr entre parênteses é dada a seguinte frase: "separadamente devemos observar que no primeiro para loop (minha nota: deve ser deinit() pois não há outra maneira de apagar objetos) não podemos apagar objetos, pois neste caso, após cada deleção, o número total de objetos e sua numeração será alterada, de modo que alguns nomes de objetos serão pulados". Mas na citada EA não há nenhum segundo para o loop. Além disso, a variável Quant_Del definida na função deinit() antes do for loop é inicializada com zero, enquanto a variável i não foi definida em nenhum lugar antes do for loop.

   for(int k=0; k<=Quant_Del; i++)     // Удаляем объекты с именами,.. 
         ObjectDelete(Name_Del[i]);       // .. имеющимися в массиве

acontece que o especialista acima omitiu apenas trivialmente várias linhas de programa.

Então a primeira pergunta é a seguinte: foi realmente uma omissão trivial de várias linhas ou é um programa tão complicado que um novato não consegue entender seu significado sem ajuda externa?

Além disso... No mesmo capítulo da mesma seção, há um link para o mesmo Expert Advisor (no arquivo anexo) antes do texto citado que, ao ser clicado, abre o mesmo Expert Advisor no MetaElitor. Mas o texto deste Expert Advisor é diferente: a função deinit()deinit()aqui se parece com isto

//--------------------------------------------------------------- 9 --
int deinit()                           // Спец. функция deinit()
  {
   string Name_Del[1];                 // Объявление массива
   int Quant_Del=0;                    // Количество удаляемых объекто
   int Quant_Objects=ObjectsTotal();   // Cтолько всего ВСЕХ объектов
   ArrayResize(Name_Del,Quant_Objects);// Необходимый размер массива
   for(int k=0; k<Quant_Objects; k++)  // По количеству объектов 
     {
      string Obj_Name=ObjectName(k);   // Запрашиваем имя объекта
      string Head=StringSubstr(Obj_Name,0,6);// Извлекаем первые 6 сим
      if (Head==Prefix)                // Найден объект, ..
        {                              // .. начинающийся с Paint_
         Quant_Del=Quant_Del+1;        // Колич имён к удалению
         Name_Del[Quant_Del-1]=Obj_Name;//Запоминаем имя удаляемого
        }
     }
   for(int i=0; i<=Quant_Del; i++)     // Удаляем объекты с именами,.. 
      ObjectDelete(Name_Del[i]);       // .. имеющимися в массиве
   return;                             // Выход из deinit()
  }
//-------------------------------------------------------------- 10 --

Então, se "combinar" a frase "Separadamente, note que você não pode excluir objetos no primeiro para loop, porque neste caso o número total de objetos e sua numeração mudará após cada exclusão, e alguns nomes de objetos serão pulados como resultado" E texto deinit() função da última variante, tenho a segunda pergunta:

Pergunta. Por que não posso apagar objetos no primeiro para loop colocando a função ObjectDelete(Object_Name) dentro da declaração if...? Algo parecido:

int deinit()                           // Спец. функция deinit()
  {
   int Quant_Objects=ObjectsTotal();   // Cтолько всего ВСЕХ объектов
   for(int k=0; k<Quant_Objects; k++)  // По количеству объектов 
     {
      string Obj_Name=ObjectName(k);   // Запрашиваем имя объекта
      string Head=StringSubstr(Obj_Name,0,6);// Извлекаем первые 6 сим
      if (Head==Prefix)                // Если найден объект, …
        {                              // ... начинающийся с Paint_,
         ObjectDelete(Obj_Name);       // … то его и удаляем
        }                              //конец if
     }                                 //конец for
   return;                             // Выход из deinit()
  }                                    //конец deinit
//-------------------------------------------------------------- 10 --

Por que depois de cada eliminação "... O número total de objetos vai mudar"...? Porque neste caso, a variável Quant_Objects, que determina o número total de objetos, obtém seu valor igual a ObjectsTotal(), FORWARD the for loop?

P.S. Obrigado antecipadamente pela resposta, a fim de não desperdiçar o fórum.

Arquivos anexados:
strings_1.mq4  7 kb