Não pensei que encontraria tal problema, porque à primeira vista deveria ser uma questão natural redesenhar o gráfico a partir do programa. Nesta perspectiva, o objectivo da função ChartRedraw() não é claro...
Não se trata de indicadores, mas de exibir as alterações feitas nas propriedades dos objectos gráficos.
É necessário enviar um sinal ao indicador - depois o indicador será redesenhado. Bem, ou seja, fará o que deve fazer no novo tick.
E para enviar um novo tick, é necessário ou esperar por ele, o que não é uma opção, ou actualizar o gráfico por PCM --> Refresh, que também não é uma opção, ou usar a função ChartSetSymbolPeriod() com tais parâmetros para o gráfico actual:
Меняет значения символа и периода указанного графика. Функция работает асинхронно, то есть отдает команду и не ждет окончания ее выполнения. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд. Возвращает true в случае удачного помещения команды в очередь графика, иначе false. Чтобы...
Olá, ajudem-me, escrevi um guião que abre uma ordem limite mas a preço de mercado. Todos os trabalhos, decidiram alterá-lo para colocar um limite abaixo/abaixo do mercado, nada funciona, embora o código de retorno do servidor de negociação 10009, e GetLastError() devolve 0. Código:
voidOnStart()
{MqlTradeRequest request={0};
MqlTradeResult result={0};
double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
double p=NormalizeDouble(ChartPriceOnDropped(),digits);
if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
{p=NormalizeDouble(ChartPriceOnDropped()*0.1,digits)/0.1;
}
int V=75;
if (p<Ask)
{
request.action =TRADE_ACTION_PENDING; // тип торговой операции
request.symbol =Symbol(); // символ
request.volume =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)));
if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL))
{ request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
}
request.type =ORDER_TYPE_BUY_LIMIT; // тип ордера
request.price =Ask; // цена для открытия
request.deviation=50; // допустимое отклонение от цены
request.sl =p; // Stop Loss позиции
request.tp =NormalizeDouble(Ask+(Ask-p)*3,digits); // Take Profit позиции
request.type_filling=ORDER_FILLING_IOC;
request.type_time=ORDER_TIME_DAY;
request.stoplimit=Ask;
OrderSend(request,result);
}
se pedido.preço, por exemplo: Ask-Point()*30 não o define, a normalização do preço também não dá nada
Isto não é para indicadores, mas para mostrar as alterações feitas às propriedades dos objectos gráficos.
É necessário enviar um tique ao indicador - depois o indicador volta a ser desenhado. Ou seja, fará o que deve fazer na nova carraça.
Para enviar um novo tick tem de esperar por ele, o que não é uma opção, ou para actualizar o gráfico usando PKM --> Refresh, que também não é uma opção, ou para usar ChartSetSymbolPeriod() com estes parâmetros para o gráfico actual:
Como posso saber se o indicador não está pronto para trabalhar com outro período de tempo?
A história não é de paginação (não construída) para prazos adjacentes. O indicador funciona em M15, mas preciso de olhar para H1 (no topo do gráfico M15), quando o mudo - o gráfico está vazio. Quando me refresco num par de segundos - beleza, todos os amortecedores são renderizados.
Como posso fazer o indicador verificar o histórico num outro período de tempo e manter o cálculo até aparecer?
Não pensei que encontraria tal problema, porque à primeira vista deveria ser uma questão natural redesenhar o gráfico a partir do programa. Nesta perspectiva, o objectivo da função ChartRedraw() não é claro...
Não se trata de indicadores, mas de exibir as alterações feitas nas propriedades dos objectos gráficos.
É necessário enviar um sinal ao indicador - depois o indicador será redesenhado. Bem, ou seja, fará o que deve fazer no novo tick.
E para enviar um novo tick, é necessário ou esperar por ele, o que não é uma opção, ou actualizar o gráfico por PCM --> Refresh, que também não é uma opção, ou usar a função ChartSetSymbolPeriod() com tais parâmetros para o gráfico actual:
se pedido.preço, por exemplo: Ask-Point()*30 não o define, a normalização do preço também não dá nadaOlá, ajudem-me, escrevi um guião que abre uma ordem limite mas a preço de mercado. Todos os trabalhos, decidiram alterá-lo para colocar um limite abaixo/abaixo do mercado, nada funciona, embora o código de retorno do servidor de negociação 10009, e GetLastError() devolve 0. Código:
Isto não é para indicadores, mas para mostrar as alterações feitas às propriedades dos objectos gráficos.
É necessário enviar um tique ao indicador - depois o indicador volta a ser desenhado. Ou seja, fará o que deve fazer na nova carraça.
Para enviar um novo tick tem de esperar por ele, o que não é uma opção, ou para actualizar o gráfico usando PKM --> Refresh, que também não é uma opção, ou para usar ChartSetSymbolPeriod() com estes parâmetros para o gráfico actual:
Artem, obrigado.
Está tudo a funcionar. :)
Alguém sabe como desactivar a exibição de todos os indicadores utilizados na EA no gráfico durante os testes visuais?
TesterHideIndicators(true);
Como posso saber se o indicador não está pronto para trabalhar com outro período de tempo?
A história não é de paginação (não construída) para prazos adjacentes. O indicador funciona em M15, mas preciso de olhar para H1 (no topo do gráfico M15), quando o mudo - o gráfico está vazio. Quando me refresco num par de segundos - beleza, todos os amortecedores são renderizados.
Como posso fazer o indicador verificar o histórico num outro período de tempo e manter o cálculo até aparecer?
TesterHideIndicators(true);
Muito obrigado ))))
Não consigo obter valores ATP a partir de outro período de tempo:
do prazo actual - funciona. de prazos superiores - sempre 0
Em futuros, como se cria um contrato contínuo? para análise de cartas técnicas?