[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 935
Olá, estou interessado nesta pergunta. A alpari fornece um servidor onde você pode carregar seu conselheiro para que ele possa trabalhar 24 horas por dia? Você teria a gentileza de responder pessoalmente?
pergunta sobre mudança de período no programa ... por exemplo, há uma certa seqüência de operadores que precisa ser aplicada a diferentes períodos ... como eu entendo que é mais fácil fazer isso na forma de um ciclo ... mudando o período... encontro uma função na documentação que retorna o valor do período ... mas não consigo encontrar uma função para mudá-lo ... o que estou fazendo de errado ?
Algo não está funcionando para você, não este código... :)
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {// Объявление функции. Передаваемые параметры: sy = символ, op - тип, mn - магикdatetime t; // Переменная содержит время закрытия ордераdouble ocp, osl; // ocp - цена закрытия позиции, osl - цена СтопЛосс закрытой позицииint dg, i, j=-1, k=OrdersHistoryTotal(); // k содержит общее количество ордеров в историиif (sy=="0") sy=Symbol(); // Если в ф-цию передан sy равный 0 или NULL, то использовать символ графикаfor (i=0; i<k; i++) { // Цикл по массиву закрытых ордеровif (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { // Если выбран ордер из массива закрытых ордеров, ...if (OrderSymbol()==sy || sy=="") { // ... если его символ совпадает с нашим, ...if (OrderType()==OP_BUY || OrderType()==OP_SELL) { // ... если его тип Бай или Селл, ...if (op<0 || OrderType()==op) { // ... если тип ордера равен или -1 (имеется ввиду любой) или равен переданному в ф-цию, ...if (mn<0 || OrderMagicNumber()==mn) { // ... если его магик или любой (-1) или равен переданному в ф-цию (магику советника), ...if (t<OrderCloseTime()) { // ... если переменная t содержит время закрытия меньше, чем время закрытия выбранного ордера, то ...
t=OrderCloseTime(); // ... то присвоим переменной t время закрытия выбранного ордера (этот ордер закрыт позже предыдущего)
j=i; // Запишем в переменную j индекс найденного ордера с максимальным временем закрытия
}
}
}
}
}
}
} // По окончании цикла в переменной j находится индекс последнего закрытого ордераif (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { // Выберем его по индексу
dg=MarketInfo(sy, MODE_DIGITS); // Количество цифр после десятичного точки в цене инструмента, заданного переменной syif (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2; // Честно... точно не скажу, но вижу, что корректировка под йену
ocp=NormalizeDouble(OrderClosePrice(), dg); // Нормализуем цену закрытия ордера для дальнейшего сравнения с ценой СтопЛосс
osl=NormalizeDouble(OrderStopLoss(), dg); // Нормализуем цену СтопЛосс ордера для сравнения с ценой закрытияif (ocp==osl) return(True); // Если эти цены равны, значит поза закрыта по стопу, возвращаем значение "Истина"
}
return(False); // Возвращаем "Ложь"
}
Essa é toda a lógica... Viktor estava certo - é redundante, mas o mais simples possível... :)
Skopcheny: pergunta sobre a mudança do período no programa ... por exemplo, há uma certa seqüência de operadores que deve ser aplicada a diferentes períodos ... como eu entendo que é mais fácil fazê-lo na forma de uma linha do tempo ... mudando o período... Eu encontro uma função na documentação que retorna um valor de período... mas não consigo encontrar uma função para mudá-la... o que estou errado ?
Muito obrigado, só preciso de alguns esclarecimentos ... para um grupo de operadores trabalhar em um determinado período é suficiente especificar um dos períodos à sua frente, como são apresentados nesta tabela?
Skopcheny: Muito obrigado, só preciso de alguns esclarecimentos ... para um grupo de operadores trabalhar em um determinado período é suficiente especificar um dos períodos à sua frente, como são apresentados nesta tabela?
Para responder corretamente à sua pergunta, você precisa ver pelo menos um exemplo de código onde você precisa especificar o período...
artmedia70: Para dar a resposta certa à sua pergunta, você precisa ver pelo menos um código de amostra onde você especificamente precisa definir o período...
string trend() {int count,count_change; double bar_centr; string trend; bool clear; for (int i=10;i!=0;i--) { bar_centr = (Alto[i]-Baixo[i])/2+Baixo[i]); if (bar_centr>((Alto[i+1]-Baixo[i+1])/2+Baixo[i+1]) count+++;
if (bar_centr<((Alto[i+1]-Baixo[i+1])/2+Baixo[i+1]) count--; }
if (count>3) trend="buy"; if (count<-3) trend="sell"; if (count<3||count>-3) trend="uncertain";
return(trend);}
esta função precisa ser aplicada uma após a outra em períodos diferentes ... Funciona se eu o conecto a janelas no terminal com prazos diferentes ... A questão é se é possível para a EA lidar com vários períodos diferentes ...
esta função deve ser aplicada sucessivamente a diferentes períodos ... Funciona se eu ligar o EA a janelas no terminal com períodos diferentes ... A questão é se é possível para a EA lidar com vários períodos diferentes ...
Entendo que você quer que sua função trabalhe não apenas com o gráfico e o período atuais, mas com qualquer um dos períodos, passados a ele ...
string trend(string sy="", int tf=0)
{
int count,count_change;
double bar_centr;
string trend;
bool clear;
if (sy=="" || sy=="0") sy=Symbol();
if (tf==0) tf=Period();
for (int i=10; i>0; i--)
{
bar_centr = (iHigh(sy,tf,i)-iLow(sy,tf,i))/2+iLow(sy,tf,i);
if (bar_centr>((iHigh(sy,tf,i+1)-iLow(sy,tf,i+1))/2+iLow(sy,tf,i+1)))
count++;
if (bar_centr<((iHigh(sy,tf,i+1)-iLow(sy,tf,i+1))/2+iLow(sy,tfi+1)))
count--;
}
Print (count,"период ",tf);
if (count>3) trend="покупка";
if (count<-3) trend="продажа";
if (count<3||count>-3) trend="неопределенность";
return(trend);
}
Agora, chame sua função desta maneira
tendência(Símbolo(), Período()); // Ele retornará valores para o gráfico e período em que a EA está pairando...
tendência(USDJPY, PERÍODO_D1); // Retorna valores para o símbolo USDJPY e período de "1 dia".
Em vez de PERÍODO_D1 você pode entrar 1440 - dará o mesmo resultado...
Se for chamada sem parâmetros, a função retorna valores para o símbolo e período atual (eles são definidos por padrão)
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Olá, estou interessado nesta pergunta. A alpari fornece um servidor onde você pode carregar seu conselheiro para que ele possa trabalhar 24 horas por dia? Você teria a gentileza de responder pessoalmente?
Não está funcionando, talvez eu precise mudar algo aqui ou colocá-lo após o início.
Eu tentei traduzir seu código em papel para o russo, eu entendo, mas não funciona,
é muito complicado, especialmente quando as condições em cada condição se seguem, e uma condição em oito condições.
É claro que não discuto quem criou este código é um milagre, mas para mim é uma completa perversão (de uma boa maneira)
Não sou preguiçoso para acrescentar comentários a cada operação e condição, exceto para a função padrão.
Há alguma redundância no código, mas o código é bastante legível
Algo não está funcionando para você, não este código... :)
Essa é toda a lógica... Viktor estava certo - é redundante, mas o mais simples possível... :)
pergunta sobre a mudança do período no programa ... por exemplo, há uma certa seqüência de operadores que deve ser aplicada a diferentes períodos ... como eu entendo que é mais fácil fazê-lo na forma de uma linha do tempo ... mudando o período... Eu encontro uma função na documentação que retorna um valor de período... mas não consigo encontrar uma função para mudá-la... o que estou errado ?
O período do gráfico pode ser qualquer um dos seguintes valores:
Muito obrigado, só preciso de alguns esclarecimentos ... para um grupo de operadores trabalhar em um determinado período é suficiente especificar um dos períodos à sua frente, como são apresentados nesta tabela?
Para dar a resposta certa à sua pergunta, você precisa ver pelo menos um código de amostra onde você especificamente precisa definir o período...
string trend()
{int count,count_change;
double bar_centr;
string trend;
bool clear;
for (int i=10;i!=0;i--)
{
bar_centr = (Alto[i]-Baixo[i])/2+Baixo[i]);
if (bar_centr>((Alto[i+1]-Baixo[i+1])/2+Baixo[i+1])
count+++;
if (bar_centr<((Alto[i+1]-Baixo[i+1])/2+Baixo[i+1])
count--;
}
Print (count, "period ")Period());
if (count>3) trend="buy";
if (count<-3) trend="sell";
if (count<3||count>-3) trend="uncertain";
return(trend);}
esta função precisa ser aplicada uma após a outra em períodos diferentes ... Funciona se eu o conecto a janelas no terminal com prazos diferentes ... A questão é se é possível para a EA lidar com vários períodos diferentes ...
esta função deve ser aplicada sucessivamente a diferentes períodos ... Funciona se eu ligar o EA a janelas no terminal com períodos diferentes ... A questão é se é possível para a EA lidar com vários períodos diferentes ...
Entendo que você quer que sua função trabalhe não apenas com o gráfico e o período atuais, mas com qualquer um dos períodos, passados a ele ...
Agora, chame sua função desta maneira
tendência(Símbolo(), Período()); // Ele retornará valores para o gráfico e período em que a EA está pairando...
tendência(USDJPY, PERÍODO_D1); // Retorna valores para o símbolo USDJPY e período de "1 dia".
Em vez de PERÍODO_D1 você pode entrar 1440 - dará o mesmo resultado...
Se for chamada sem parâmetros, a função retorna valores para o símbolo e período atual (eles são definidos por padrão)
Entendo que você quer que a função funcione não só com o gráfico atual e o período, mas também com qualquer gráfico passado a ele...
Agora chame sua função desta maneira:
tendência(Símbolo(), Período()); // Ele retornará valores para o gráfico e período em que a EA está pairando...
tendência(USDJPY, PERÍODO_D1); // Retorna valores para o símbolo USDJPY e período de "1 dia".
Em vez de PERÍODO_D1 você pode entrar em 1440 - é a mesma coisa...
resposta abrangente... muito obrigado ...