Tenho a seguinte pergunta. Há um bloco no init(), que pendura o terminal (é o que eu quero transferir para dll). Naturalmente, o log não pode ser visto - o terminal só é fechado pela Ctrl+Alt+Delete. A falta de impressão para rastrear (e para medir o tempo de trânsito dos laços que entram em bloco) não ajuda - a impressora não escreve nada, o registro nem sequer é criado. Tento usar FileOpen/FileWrite com o mesmo propósito - o arquivo é criado (0 Kb), e o silêncio. Coloco FileWrite depois de FileOpen, na linha seguinte - sem efeito. Para que lado devo cavar?
Tente usar isto. Se isso não ajudar, para procurar por erros, você pode colocar temporariamente o referido bloco de inicialização para iniciar uma única vez via bandeira e tentar "puxar" logs dele.
Tenho a seguinte pergunta. Há um bloco no init(), que pendura o terminal (é o que eu quero transferir para dll). Naturalmente, o log não pode ser visto - o terminal só é fechado pela Ctrl+Alt+Delete. A não-impressão para rastrear (e medir o tempo de trânsito dos laços recebidos) não ajuda - a impressora não escreve nada, o registro nem sequer é criado. Tento usar FileOpen/FileWrite com o mesmo propósito - o arquivo é criado (0 Kb), e o silêncio. Coloco FileWrite depois de FileOpen, na linha seguinte - sem efeito. Qual é a direção a ser seguida para cavar?
TarasBY: Tente usar isto. Se isso não ajudar, para procurar erros, você pode levar temporariamente o bloco de inicialização mencionado no início para uma partida única através de uma bandeira e tentar "puxar" os troncos dele.
Nem a partida única no início nem o ininit funciona - nem Print nem FileWrite. Estou anexando este pedaço de código (não vejo outra saída), não vou afixá-lo aqui, porque é muito longo. Removi todas as declarações de tampão e descrevi todas as chamadas de indicadores técnicos incorporados ali. Já pensei no excesso de memória com matrizes, calculei que a maior matriz mais todas as outras matrizes é de cinqüenta metros e meio. Se não imprimir nem mesmo na primeira linha, ao entrar no bloco... - isso é o que me incomoda. A versão anexada é verdadeira com FileWrite.
Nem lançamento único na inicialização nem em trabalhos ininit - nem Print nem FileWrite. Estou anexando este pedaço de código (não vejo outra saída), não o estou colando aqui porque é muito longo. Removi todas as declarações de tampão e descrevi todas as chamadas de indicadores técnicos incorporados ali. Já pensei no transbordamento de memória com matrizes, calculei que a maior matriz mais todas as outras matrizes é de cinqüenta e um centavo. Se não imprimir nem mesmo na primeira linha, ao entrar no bloco... - isso é o que me incomoda. A versão anexada é verdadeira com FileWrite.
O estilo do código não se desfaz dele. Sem espaços, parênteses em diferentes níveis, várias operações seguidas, sem comentários... Pesadelo! :-))
Ajude a resolver um problema com o MT4. Ao chamar um indicador personalizado, seus parâmetros de entrada e cores na janela não são exibidos (pisca rapidamente e desaparece). Como consertá-lo? Reinstalado o MT4, não ajudou.
Nem a inicialização única nem a inicialização inicial funcionam - nem Print, nem FileWrite. Estou anexando este pedaço de código (não vejo outra saída), não o estou colando aqui porque é muito longo. Removi todas as declarações de tampão e descrevi todas as chamadas de indicadores técnicos incorporados ali. Já pensei no excesso de memória com matrizes, calculei que a maior matriz mais todas as outras matrizes é de cinqüenta metros e meio. Se não imprimir nem mesmo na primeira linha, ao entrar no bloco... - isso é o que me incomoda. A versão anexada é verdadeira com FileWrite.
Eu concordo com Vadim - o código é difícil de ler. Tente decompor este código em blocos funcionais, em cada bloco impresso ou escrito em arquivo. E executá-lo em uma estrutura que "retarda" a execução do código, por exemplo, desta forma:
Há 2 funções muito semelhantes na "última posição, bandeira de fechamento por STOP" de Kim e a outra por TAKE.
aqui está o código
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по стопу. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, osl;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
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) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
if (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);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по тейку. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
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) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
Como você pode ver, eles são muito parecidos.
Mas, por alguma razão, só fechar por STOP funciona para mim.
Há 2 funções muito semelhantes na "última posição, bandeira de fechamento por STOP" de Kim e a outra por TAKE.
aqui está o código
Como você pode ver, eles são muito parecidos.
Mas, por alguma razão, só fechar por STOP funciona para mim.
Eu abro posição manualmente, abreviando TAKE. funciona - mas a EA não imprime UNIT, mas continua a imprimir NULL.
Mas o fechamento na STOP imprime corretamente: se parar = 1, se não parar =0....
ajude-me a entender isto por favor....
Veja cuidadosamente qual o preço que a ordem de parada tinha na posição aberta e a que preço ela fechou. A função de Igor compara esses preços exatos, mas não leva em conta o escorregamento.
Tenho a seguinte pergunta. Há um bloco no init(), que pendura o terminal (é o que eu quero transferir para dll). Naturalmente, o log não pode ser visto - o terminal só é fechado pela Ctrl+Alt+Delete. A falta de impressão para rastrear (e para medir o tempo de trânsito dos laços que entram em bloco) não ajuda - a impressora não escreve nada, o registro nem sequer é criado. Tento usar FileOpen/FileWrite com o mesmo propósito - o arquivo é criado (0 Kb), e o silêncio. Coloco FileWrite depois de FileOpen, na linha seguinte - sem efeito. Para que lado devo cavar?
O tema foi encerrado... Homem mau.
Tenho a seguinte pergunta. Há um bloco no init(), que pendura o terminal (é o que eu quero transferir para dll). Naturalmente, o log não pode ser visto - o terminal só é fechado pela Ctrl+Alt+Delete. A não-impressão para rastrear (e medir o tempo de trânsito dos laços recebidos) não ajuda - a impressora não escreve nada, o registro nem sequer é criado. Tento usar FileOpen/FileWrite com o mesmo propósito - o arquivo é criado (0 Kb), e o silêncio. Coloco FileWrite depois de FileOpen, na linha seguinte - sem efeito. Qual é a direção a ser seguida para cavar?
Olhe, não há nada escondido nos atributos?
Não está escondido.
Tente usar isto. Se isso não ajudar, para procurar erros, você pode levar temporariamente o bloco de inicialização mencionado no início para uma partida única através de uma bandeira e tentar "puxar" os troncos dele.
Nem a partida única no início nem o ininit funciona - nem Print nem FileWrite. Estou anexando este pedaço de código (não vejo outra saída), não vou afixá-lo aqui, porque é muito longo. Removi todas as declarações de tampão e descrevi todas as chamadas de indicadores técnicos incorporados ali. Já pensei no excesso de memória com matrizes, calculei que a maior matriz mais todas as outras matrizes é de cinqüenta metros e meio. Se não imprimir nem mesmo na primeira linha, ao entrar no bloco... - isso é o que me incomoda. A versão anexada é verdadeira com FileWrite.
Nem lançamento único na inicialização nem em trabalhos ininit - nem Print nem FileWrite. Estou anexando este pedaço de código (não vejo outra saída), não o estou colando aqui porque é muito longo. Removi todas as declarações de tampão e descrevi todas as chamadas de indicadores técnicos incorporados ali. Já pensei no transbordamento de memória com matrizes, calculei que a maior matriz mais todas as outras matrizes é de cinqüenta e um centavo. Se não imprimir nem mesmo na primeira linha, ao entrar no bloco... - isso é o que me incomoda. A versão anexada é verdadeira com FileWrite.
O estilo do código não se desfaz dele. Sem espaços, parênteses em diferentes níveis, várias operações seguidas, sem comentários... Pesadelo! :-))
Você mesmo entende isso?
Ele encerrou o assunto... Não é um bom homem.
= :)
Nem a inicialização única nem a inicialização inicial funcionam - nem Print, nem FileWrite. Estou anexando este pedaço de código (não vejo outra saída), não o estou colando aqui porque é muito longo. Removi todas as declarações de tampão e descrevi todas as chamadas de indicadores técnicos incorporados ali. Já pensei no excesso de memória com matrizes, calculei que a maior matriz mais todas as outras matrizes é de cinqüenta metros e meio. Se não imprimir nem mesmo na primeira linha, ao entrar no bloco... - isso é o que me incomoda. A versão anexada é verdadeira com FileWrite.
Eu concordo com Vadim - o código é difícil de ler. Tente decompor este código em blocos funcionais, em cada bloco impresso ou escrito em arquivo. E executá-lo em uma estrutura que "retarda" a execução do código, por exemplo, desta forma:
Atrasar a execução do próximo bloco em 1 segundo. - O terminal deve ter tempo suficiente para imprimir o registro.
Há 2 funções muito semelhantes na "última posição, bandeira de fechamento por STOP" de Kim e a outra por TAKE.
aqui está o código
Como você pode ver, eles são muito parecidos.
Mas, por alguma razão, só fechar por STOP funciona para mim.
Funciona, mas meu Conselheiro Especialista não imprime UNIT, mas continua imprimindo NULL.
Mas o fechamento na STOP imprime corretamente: se parar = 1, se não parar =0....
me ajude por favor....
Há 2 funções muito semelhantes na "última posição, bandeira de fechamento por STOP" de Kim e a outra por TAKE.
aqui está o código
Como você pode ver, eles são muito parecidos.
Mas, por alguma razão, só fechar por STOP funciona para mim.
Eu abro posição manualmente, abreviando TAKE. funciona - mas a EA não imprime UNIT, mas continua a imprimir NULL.
Mas o fechamento na STOP imprime corretamente: se parar = 1, se não parar =0....
ajude-me a entender isto por favor....