[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 280
tesla-pip: Não consigo encontrar o comando que redireciona o indicador personalizado. Se alguém souber, por favor, me diga. Obrigado antecipadamente =)
E esta ordem de coisas é normal (estes são os princípios do terminal).
Se você quiser que o indicador B altere suas indicações quando os parâmetros do indicador A mudarem, faça uma troca de informações entre os indicadores (pode ser um arquivo, variáveis globais do terminal, RAM do computador): o indicador A passa seus parâmetros inicializáveis durante a inicialização e o indicador B verifica periodicamente possíveis mudanças de parâmetros do indicador A. Quando detectar mudanças, o indicador B também deve perinicializar-se com novos parâmetros (forced init()).
Obrigado por sua resposta, mas não posso usá-la porque não entendo tudo e não sou muito bom em programação, poderia fazer as mudanças necessárias nos meus códigos indicadores?
Bom dia a todos. Tenho um problema com o indicador "CurrencyPowerMeter" e não consigo movê-lo para outra posição na janela do terminal. Se você puder ajudar, eu ficaria muito feliz em fazê-lo.
Decidi fazer-lhe uma pergunta, talvez você possa me dizer. Estou escrevendo um indicador, no indicador eu processo ticks no tempo do tick (que se abre independentemente,este). Minha matriz tampão NÃO processa TUDO, mas seletivamente (por exemplo, a cada 60 segundos, mas não é necessário). Em vez de
int counted_bars=IndicatorCounted();
Eu entendo a seguinte construção:
externint sec=60;//объявляем количество секундint i;//будет индексом текущей "свечи" (тика)int i_prev;//будет индексом предыдущей "свечи" (тика), отстоящего от теущего на sec секунд назадdouble MyBuffer[];//этот будет на чартеdouble MyTemp[];//этот только для подсчётовint init(){
IndicatorBuffers(2);
SetIndexBuffer(0,MyBuffer)
SetIndexBuffer(1,MyTemp)
SetIndexDrawBegin(0,14);
i=Bars-1;
while(Volume[i]-Volume[Bars-1]<sec) i--;//потому что в Volume[] на тиковом у нас время сервера точностью до секунды (а в Time[] - моделируемое для предоставления тиков на чарте)
i_prev=Bars-1;//отошли от первого исторического тика на чарте на заданное количество секунд, запомнили его, запомнили первый, уходим в start()return(0);
}
int start(){
double deltaHigh,deltaLow;
int counted_bars=IndicatorCounted();//честно говоря, не уверен, т.к. считаем мы не все "свечи" (тики)if(counted_bars>=i) i=Bars-counted_bars-1;//аналогичноwhile(i>=0){//цикл обработчика
deltaHigh=High[i]-High[i_prev];//к примеру
deltaLow=Low[i_prev]-Low[i];
//и дальше код обработчика (формируем предварительный массив MyTemp[]). В конце цикла:
i_prev=i;//запоминаем теперь текущий индекс как индекс предыдущего тикаwhile(Volume[i_prev]-Volume[i]<sec){//и уходим вперёд на заданное количество секунд
i--;
}
}
...
Agora a pergunta. Na versão M1 pura, o próximo passo é o padrão.
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;//принтовал, при первом обращении limit=Bars-2, при последующих limit=2for(i=0; i<=limit; i++){
MyBuffer[i]=iMAOnArray(MyTemp, 0, 14, 0, MODE_EMA, i);
Com o que substituir as barras_limite e contadas? Meu entendimento é o seguinte,
int counted_bars=ArraySize(MyTemp)-1;//сразу после цикла while
(porque o número de ticks em 60 segundos não é constante, ou seja, basta escrever int counted_bars=IndicatorCounted()/_number_of_ ticks_in_60_seconds_não vai funcionar).
Ou eu estou errado sobre tudo?
p.s. antes de uma possível pergunta, vou responder: sei que em forex sec!=60 não é aplicável, e sec=60 não tem sentido, mas eu também não negocio em forex.
MK07: Obrigado por sua resposta, mas não posso usá-la porque não entendo tudo e não sou bom em programação, poderia fazer as mudanças necessárias nos meus códigos indicadores?
Desculpe-me, você tem um carro? Se você tem um, você não o considera um luxo, apenas uma necessidade, não é mesmo? Se não, você não vai deixar isso assim para o resto de sua vida, vai? Esta é a idade, você tem que saber como dirigir um carro. Sou apenas um fazendeiro, mas faço o que faço, para mim a programação não é diferente do trabalho no pátio, como o trabalho de serralheiro, o mesmo trabalho com minhas mãos (vivo no campo). Um carrinho de mão, um carrinho de mão ou MQL4 são apenas ferramentas para mim. Talvez seja percebido de forma diferente para os habitantes da cidade, não sei. Variáveis globais em manual aqui, funções de arquivo padrão aqui, mais rápido estas, mas através do WinAPI. Eu queria responder ontem, mas não o fiz.
Tenho uma matriz. Inicializei-a com cordas, ou seja, massa dupla [3567]={0,85374 , 0,85694 , 0,85974 , .... };
E o programa leu a matriz e a executou.
Agora inicializei a mesma matriz em uma coluna
duplo massi[3567]
{
massa [ 0] = 0,85374; massa [ 1] = 0.85694; massa [ 2] = 0. 85974; massa [ 3] = 0.86174; massa [ 4] = 0,86474; massa [ 5] = 0,86494; massa [ 6] = 0,86504;
massa [ 7] = 0,86524;
}
O compilador não gera nenhum erro, mas gera um aviso.
C:Arquivos de programa Alpari NZ MT4(2)- expressão em escopo global não permitida C:Arquivos de programa Alpari NZ MT4(2) - especialistas incluem MASSIV.mqh (4, 2)
#include <MASSIV.mqh> int start()
{
double Price=iOpen (Symbol (),0,0);
double SL=NormalizeDouble (Price+3000*Point, Digits);
double TP=NormalizeDouble (Price-100*Point, Digits);
double value = Bid ;//параметру value функции ArrayBsearch присваивается значение цены последнего тикаdouble ld_Delta = 0.0010;
int S = ArrayBsearch( mass, value, WHOLE_ARRAY, 0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика int last_order_bar = 0;
int ot = OrdersTotal();
...............................(остальной код опустил,но он не изменился)
Há apenas 2 entradas no diário de bordo.
2013.04.12 16:14:44 XXX teste iniciado
2013.04.12 16:14:36 XXX EURUSD,H1: carregado com sucesso
PERGUNTA.POR QUE O PROGRAMA NÃO ESTÁ LENDO UM ARRAY INICIALIZADO EM UMA COLUNA.
Não consigo encontrar o comando que redireciona o indicador personalizado. Se alguém souber, por favor, me diga. Obrigado antecipadamente =)
Eu já o encontrei. Obrigado a todos =)
Boa tarde.
Você pode me ajudar a chegar a uma fórmula?
Eu tenho um passo de recarga SD=100;
se o preço for 25, então para ele o nível de cobertura será DE=100
se o preço for 102, sua taxa de unidades será UD=200
se o preço é 215, então a taxa de recarga é BP=300
o preço caiu para 135 novamente, o nível de cobertura será UD=200
E esta ordem de coisas é normal (estes são os princípios do terminal).
Se você quiser que o indicador B altere suas indicações quando os parâmetros do indicador A mudarem, faça uma troca de informações entre os indicadores (pode ser um arquivo, variáveis globais do terminal, RAM do computador): o indicador A passa seus parâmetros inicializáveis durante a inicialização e o indicador B verifica periodicamente possíveis mudanças de parâmetros do indicador A. Quando detectar mudanças, o indicador B também deve perinicializar-se com novos parâmetros (forced init()).
O primeiro código é o indicador A.
Segundo código indicador B.
A última questão foi resolvida, a nova questão é
Eu tenho o nível de recarga recalculado em cada barra.
Como me lembro do nível na última barra
e usá-la para abrir um comércio
Obrigado por sua resposta, mas não posso usá-la porque não entendo tudo e não sou muito bom em programação.
Você está sugerindo que eu deveria fazer por você aquilo com que você "brinca". Desculpe, não estou interessado.
E, se você está aprendendo a programar, é uma tarefa interessante para você.
int counted_bars=IndicatorCounted();Eu entendo a seguinte construção:
Agora a pergunta. Na versão M1 pura, o próximo passo é o padrão.
Com o que substituir as barras_limite e contadas? Meu entendimento é o seguinte,
(porque o número de ticks em 60 segundos não é constante, ou seja, basta escrever int counted_bars=IndicatorCounted()/_number_of_ ticks_in_60_seconds_não vai funcionar).
Ou eu estou errado sobre tudo?
p.s. antes de uma possível pergunta, vou responder: sei que em forex sec!=60 não é aplicável, e sec=60 não tem sentido, mas eu também não negocio em forex.
Obrigado por sua resposta, mas não posso usá-la porque não entendo tudo e não sou bom em programação, poderia fazer as mudanças necessárias nos meus códigos indicadores?
Boa tarde a todos!
Estou aprendendo a usar arrays.
Tenho uma matriz. Inicializei-a com cordas, ou seja, massa dupla [3567]={0,85374 , 0,85694 , 0,85974 , .... };
E o programa leu a matriz e a executou.
Agora inicializei a mesma matriz em uma coluna
duplo massi[3567]
{
massa [ 0] = 0,85374;
massa [ 1] = 0.85694;
massa [ 2] = 0. 85974;
massa [ 3] = 0.86174;
massa [ 4] = 0,86474;
massa [ 5] = 0,86494;
massa [ 6] = 0,86504;
massa [ 7] = 0,86524;
}
O compilador não gera nenhum erro, mas gera um aviso.
C:Arquivos de programa Alpari NZ MT4(2)- expressão em escopo global não permitida C:Arquivos de programa Alpari NZ MT4(2) - especialistas incluem MASSIV.mqh (4, 2)
A matriz é declarada globalmente como antes (quando foi inicializada com cordas e funcionou bem).
Há apenas 2 entradas no diário de bordo.
2013.04.12 16:14:44 XXX teste iniciado
2013.04.12 16:14:36 XXX EURUSD,H1: carregado com sucesso
PERGUNTA.POR QUE O PROGRAMA NÃO ESTÁ LENDO UM ARRAY INICIALIZADO EM UMA COLUNA.
Obrigado.