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.
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
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?
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?
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 --externint 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) // Тонкая или толстая линия
{
case1: // Тонкая линияObjectCreate(His_Name,OBJ_TREND,0,T_Bar,H_Bar,T_Bar,L_Bar);
break; // Выход из switchcase2: // Толстая линия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 –
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" Etextodeinit() 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
} //конец forreturn; // Выход из 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.
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.
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
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?
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:
Como retirar o volume de pedidos de venda e compra em aberto, ou melhor ainda, seu valor?
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?
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)
... 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.
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
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:
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.