Experimentei-o. Mesmo só na janela não funciona desta maneira. Aparentemente, há algum tipo de truque aqui. Funciona assim agora, mas é terrivelmente lento:
Olá, gurus de programação MQL4! Por favor, informe como isto é possível:
Um código de programa:
LogAdd("Начинаю вычисления переменных для текущего тика ... ");
for (int i = OrdersTotal()-1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS);
LogAdd("Выбираю ордер с тикетом: " + i);
if ((OrderOpenTime() > opnTime) && (OrderType() == OP_BUY) || (OrderType() == OP_SELL)) {
opnTime = OrderOpenTime();
currentTicket = OrderTicket();
currentStopLoss = OrderStopLoss();
LogAdd("Ордер открыт позже предыдущего, не является отложенным. Записываю переменные: opnTime - " + opnTime + ", currentTicket - " + currentTicket + ", currentStopLoss - " + currentStopLoss + ".");
}
if (OrderType() == OP_BUY) {
buyCntr ++;
buyOpnPrice = OrderOpenPrice();
lotsSumBuy += OrderLots();
TrailingByShadows(OrderTicket(), Period(), 11, 0);
LogAdd("Ордер не является отложенным, тип ордера - на покупку, обновляю переменные, пытаюсь трейлить: buyCntr - " + buyCntr + ", buyOpnPrice - " + buyOpnPrice + ", lotsSumBuy - " + lotsSumBuy + ".");
}
if (OrderType() == OP_SELL) {
sellCntr ++;
sellOpnPrice = OrderOpenPrice();
lotsSumSell += OrderLots();
TrailingByShadows(OrderTicket(), Period(), 11, 0);
LogAdd("Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - " + sellCntr + ", sellOpnPrice - " + sellOpnPrice + ", lotsSumSell - " + lotsSumSell + ".");
} if (OrderType() == OP_SELLSTOP) {
sellOpnPrice = OrderOpenPrice();
LogAdd("Ордер является отложенным, тип ордера - на продажу, фиксирую цену открытия: sellOpnPrice - " + sellOpnPrice + ".");
}
if (OrderType() == OP_BUYSTOP) {
buyOpnPrice = OrderOpenPrice();
LogAdd("Ордер является отложенным, тип ордера - на покупку, фиксирую цену открытия: buyOpnPrice - " + buyOpnPrice + ".");
}
}
LogAdd("Вычисления переменных для текущего тика завершены.");
Um pedaço de tronco para esta seção:
2013.10.215:59:0 - Начинаю вычисления переменных для текущего тика ...
2013.10.215:59:0 - Выбираю ордер с тикетом: 52013.10.215:59:0 - Ордер является отложенным, тип ордера - на продажу, фиксирую цену открытия: sellOpnPrice - 1.35250000.
2013.10.215:59:0 - Выбираю ордер с тикетом: 42013.10.215:59:0 - Ордер открыт позже предыдущего, не является отложенным. Записываю переменные: opnTime - 1380728738, currentTicket - 93537240, currentStopLoss - 0.00000000.2013.10.215:59:0 - Ордер не является отложенным, тип ордера - на покупку, обновляю переменные, пытаюсь трейлить: buyCntr - 1, buyOpnPrice - 1.35620000, lotsSumBuy - 0.06000000.
2013.10.215:59:0 - Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - 1, sellOpnPrice - 1.35250000, lotsSumSell - 0.01000000.2013.10.215:59:0 - Выбираю ордер с тикетом: 32013.10.215:59:0 - Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - 2, sellOpnPrice - 1.35250000, lotsSumSell - 0.04000000.
2013.10.215:59:0 - Выбираю ордер с тикетом: 22013.10.215:59:0 - Ордер не является отложенным, тип ордера - на покупку, обновляю переменные, пытаюсь трейлить: buyCntr - 2, buyOpnPrice - 1.35620000, lotsSumBuy - 0.07000000.
2013.10.215:59:0 - Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - 3, sellOpnPrice - 1.35250000, lotsSumSell - 0.05000000.
2013.10.215:59:0 - Выбираю ордер с тикетом: 12013.10.215:59:0 - Ордер не является отложенным, тип ордера - на покупку, обновляю переменные, пытаюсь трейлить: buyCntr - 3, buyOpnPrice - 1.35620000, lotsSumBuy - 0.08000000.
2013.10.215:59:0 - Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - 4, sellOpnPrice - 1.35250000, lotsSumSell - 0.06000000.
2013.10.215:59:0 - Выбираю ордер с тикетом: 02013.10.215:59:0 - Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - 5, sellOpnPrice - 1.35250000, lotsSumSell - 0.07000000.
2013.10.215:59:0 - Вычисления переменных для текущего тика завершены.
A questão é como, para a mesma ordem, as condições poderiam ter funcionado:
if (OrderType() == OP_BUY) {
...
}
if (OrderType() == OP_SELL) {
...
}
Eu não entendo algo, mas depois, logicamente, acontece que para esta encomenda:
OP_BUY == OP_SELL
Basicamente não me importa porque isso acontece, o que importa é que sellCntr+++ e buyCntr+++ sejam executados sem ambigüidade para um certo tipo de pedido aberto, me ajude a consertá-lo?
Olá, gurus de programação MQL4! Por favor, informe como isto é possível:
Um código de programa:
Um pedaço de tronco para esta seção:
A questão é como, para a mesma ordem, as condições poderiam ter funcionado:
Eu não entendo algo, mas depois, logicamente, acontece que para esta encomenda:
Basicamente não me importa porque isso acontece, o que importa é que sellCntr+++ e buyCntr+++ sejam executados sem ambigüidade para um certo tipo de ordem aberta, me ajude a consertar?
Como você sabe que é a mesma ordem? Você não imprime o bilhete ;).... Tenho certeza: quando se arrasta, há um transbordo de pedidos ;) - O erro induzido é de lá.
TrailingByShadows(OrderTicket(), Period(), 11, 0); ?????????????????????????????? Вы при трале разве ордера не перебираете ??????????
VladislavVG: Como você pode ter certeza de que é a mesma ordem? Você não imprime o bilhete ;).... Tenho certeza: quando você arrasta, a ordem é super-amostra;) - O erro induzido é de lá.
Logicamente, por que eu passaria pelas ordens na rede de arrasto se eu já sei qual ordem específica eu preciso para arrasto? Não há força bruta, aqui está o código:
Caros programadores, poderiam me dizer por que quando reiniciei meu computador novamente, quando abri o terminal ao invés de um gráfico normal, vi uma janela cinza e perdi as posições abertas, EA, indicadores, mas quando abri um novo gráfico, as posições apareceram, mas não havia EA e indicadores, tive que instalá-los novamente. O que isso tem a ver com o assunto? Tive que instalá-los novamente. Obrigado.
Surgiu um problema assim. O testador de estratégia só funciona uma vez. Mais precisamente, o teste de visualização é acionado uma vez, e da próxima vez que você pressionar o botão "iniciar", a caixa de seleção "visualização" é reinicializada e nada acontece (mais ou menos não acontece). Como isso pode ser derrotado?
Logicamente, por que eu passaria pelas ordens na rede de arrasto se eu já sei qual ordem específica eu preciso para arrasto? Não há força bruta, aqui está o código:
PS: A propósito, este problema ocorre apenas em condições reais, ou seja, não é reproduzido no testador.
Tente executá-lo nesta variante:
LogAdd("Начинаю вычисления переменных для текущего тика ... ");
for (int i = OrdersTotal()-1; i >= 0; i--)
{
if(!OrderSelect(i, SELECT_BY_POS)) continue;
int OrdType=OrderType() ;
int OrdTckt = OrderTicket();
LogAdd("Выбираю ордер ( "+i+" ) с тикетом: " + OrdTckt);
if ((OrderOpenTime() > opnTime) && (OrdType == OP_BUY) || (OrdType == OP_SELL)) {
opnTime = OrderOpenTime();
currentTicket = OrderTicket();
currentStopLoss = OrderStopLoss();
LogAdd("Ордер открыт позже предыдущего, не является отложенным. Записываю переменные: opnTime - " + opnTime + ", currentTicket - " + currentTicket + ", currentStopLoss - " + currentStopLoss + ".");
}
if (OrdType == OP_BUY)
{
buyCntr ++;
buyOpnPrice = OrderOpenPrice();
lotsSumBuy += OrderLots();
TrailingByShadows(OrderTicket(), Period(), 11, 0);
LogAdd("Ордер "+OrdTckt <-> OrderTicket()+" не является отложенным, тип ордера - на покупку, обновляю переменные, пытаюсь трейлить: buyCntr - " + buyCntr + ", buyOpnPrice - " + buyOpnPrice + ", lotsSumBuy - " + lotsSumBuy + ".");
}
if (OrdType== OP_SELL)
{
sellCntr ++;
sellOpnPrice = OrderOpenPrice();
lotsSumSell += OrderLots();
TrailingByShadows(OrderTicket(), Period(), 11, 0);
LogAdd("Ордер "+OrdTckt <-> OrderTicket()+" не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - " + sellCntr + ", sellOpnPrice - " + sellOpnPrice + ", lotsSumSell - " + lotsSumSell + ".");
}
if (OrderType() == OP_SELLSTOP)
{
sellOpnPrice = OrderOpenPrice();
LogAdd("Ордер "+OrdTckt <-> OrderTicket()+" является отложенным, тип ордера - на продажу, фиксирую цену открытия: sellOpnPrice - " + sellOpnPrice + ".");
}
if (OrderType() == OP_BUYSTOP)
{
buyOpnPrice = OrderOpenPrice();
LogAdd("Ордер "+OrdTckt <-> OrderTicket()+" является отложенным, тип ордера - на покупку, фиксирую цену открытия: buyOpnPrice - " + buyOpnPrice + ".");
}
}
LogAdd("Вычисления переменных для текущего тика завершены.");
Parece que você pode fazer isso de forma programática através de modelos. Criar um modelo com um indicador, com _lread kernel32.dll read shift_size value, com_lwrite lá escrever um número de 10 a 50, como se tais faixas pudessem aceitar este parâmetro, depois através de InternalMsg carregar um modelo. Mas não sabemos se é 33511 ou 35511. Em WinUser32.mqh, ela é a primeira opção, enquanto no fórum é a segunda. A pergunta deve ser endereçada à Junko. É muito mais fácil no MT5. O CHART_SHIFT_SIZE está disponível lá através de ChartSetString() e ChartGetString() a partir de qualquer ponto do código Talvez haja outras opções no MT4? Pergunta tola, no entanto...
Por favor, diga-me o que estou fazendo de errado. Estou tentando fazer um indicador simples:
{ int limit,i; double last; int counted_bars = IndicatorCounted(); //---- check for possible errors if (counted_bars < 0) return(-1); //---- last counted bar will be recounted if(counted_bars > 0) counted_bars--; limit = Bars - counted_bars; //---- for(i=limit; i>=0; i--) { double OptClose = Close[i]*10000; if (MathMod(OptClose,step1)==0) { Buffer0[i] = Close[i]; last = Close[i]; } else Buffer0[i] = last; } //---- return(0); } //+------------------------------------------------------------------+Funciona na janela do gráfico, mas quando tento testá-lo no Expert Advisor, ou ele desenha o que quer que seja ou "sem passos".
Por favor, diga-me o que estou fazendo de errado. Estou tentando fazer um indicador simples:
Funciona na janela do gráfico, mas quando tento testá-lo no Expert Advisor, ou ele desenha o que quer que seja ou "sem passos".
Experimentei-o. Mesmo só na janela não funciona desta maneira. Aparentemente, há algum tipo de truque aqui. Funciona assim agora, mas é terrivelmente lento:
Isto é com a última verificação de recálculo da barra desativada.
Olá, gurus de programação MQL4! Por favor, informe como isto é possível:
Um código de programa:
Um pedaço de tronco para esta seção:
A questão é como, para a mesma ordem, as condições poderiam ter funcionado:Eu não entendo algo, mas depois, logicamente, acontece que para esta encomenda:
Basicamente não me importa porque isso acontece, o que importa é que sellCntr+++ e buyCntr+++ sejam executados sem ambigüidade para um certo tipo de pedido aberto, me ajude a consertá-lo?Olá, gurus de programação MQL4! Por favor, informe como isto é possível:
Um código de programa:
Um pedaço de tronco para esta seção:
A questão é como, para a mesma ordem, as condições poderiam ter funcionado:Eu não entendo algo, mas depois, logicamente, acontece que para esta encomenda:
Basicamente não me importa porque isso acontece, o que importa é que sellCntr+++ e buyCntr+++ sejam executados sem ambigüidade para um certo tipo de ordem aberta, me ajude a consertar?TrailingByShadows(OrderTicket(), Period(), 11, 0); ?????????????????????????????? Вы при трале разве ордера не перебираете ??????????Como você pode ter certeza de que é a mesma ordem? Você não imprime o bilhete ;).... Tenho certeza: quando você arrasta, a ordem é super-amostra;) - O erro induzido é de lá.
Logicamente, por que eu passaria pelas ordens na rede de arrasto se eu já sei qual ordem específica eu preciso para arrasto? Não há força bruta, aqui está o código:
PS: A propósito, este problema ocorre apenas em condições reais, ou seja, não é reproduzido no testador.Surgiu um problema assim. O testador de estratégia só funciona uma vez. Mais precisamente, o teste de visualização é acionado uma vez, e da próxima vez que você pressionar o botão "iniciar", a caixa de seleção "visualização" é reinicializada e nada acontece (mais ou menos não acontece). Como isso pode ser derrotado?
Logicamente, por que eu passaria pelas ordens na rede de arrasto se eu já sei qual ordem específica eu preciso para arrasto? Não há força bruta, aqui está o código:
PS: A propósito, este problema ocorre apenas em condições reais, ou seja, não é reproduzido no testador.Tente executá-lo nesta variante:
Veja o que o registro dirá.
WindowBarsPerChart() - WindowFirstVisibleBar() - 2;você pode, mas como expô-lo.
Adicionado
Parece que você pode fazer isso de forma programática através de modelos. Criar um modelo com um indicador, com _lread kernel32.dll read shift_size value, com _lwrite lá escrever um número de 10 a 50, como se tais faixas pudessem aceitar este parâmetro, depois através de InternalMsg carregar um modelo. Mas não sabemos se é 33511 ou 35511. Em WinUser32.mqh, ela é a primeira opção, enquanto no fórum é a segunda. A pergunta deve ser endereçada à Junko. É muito mais fácil no MT5. O CHART_SHIFT_SIZE está disponível lá através de ChartSetString() e ChartGetString() a partir de qualquer ponto do código Talvez haja outras opções no MT4? Pergunta tola, no entanto...