[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 131
Eu retrabalhei um código sobre o que perguntei ontem. Agora tudo está como deveria estar. Abaixo estão 3 funções para mostrar o que é usado para obter o sinal original, já que este é apenas o começo do que estou escrevendo.
//+-------------------------------------------------------------------------------------+//| Открытие позиций |//+-------------------------------------------------------------------------------------+bool Trade(int signal)
{
double fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,0);
double slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,0);
DeletePendingOrders();
if (signal == SIGNAL_BUY)
if (!OpenBuy(fastMa, slowMa))
return(false);
if (signal == SIGNAL_SELL)
if (!OpenSell(fastMa, slowMa))
return(false);
return (true);
}
//+-------------------------------------------------------------------------------------+//| Получаем общий сигнал на открытие позиции |//+-------------------------------------------------------------------------------------+int GetSignal()
{
// Получаем значения машек для дальнейших рассчётовdouble fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,0);
double slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,0);
// double filtrMa = iMA(NULL,i_TF,i_filtrMaPeriod,0,MODE_SMA,MODE_CLOSE,0);if (FindOrders() > 0) // Если есть открытые ордера, то..return (SIGNAL_NO); //..ничего не делаемif (GetStateMa(fastMa, slowMa/*, filtrMa*/) == MA_DIRECT_TO_UP) // Если машки указывают вверхif ( (MathAbs(High[0] - fastMa) <= 0.1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) ) // Цена вблизи 0.1пп от fastMareturn(SIGNAL_BUY); // Функция возвращает сигнал покупки// if (GetStateMa(fastMa, slowMa/*, filtrMa*/) == MA_DIRECT_TO_DOWN)// return(SIGNAL_SELL);return (SIGNAL_NO);
}
Aqui está a função de compra:
//+-------------------------------------------------------------------------------------+//| Открытие длинной позиции |//+-------------------------------------------------------------------------------------+bool OpenBuy(double fastMa, double slowMa)
{
int ticket = -1;
// if ( (MathAbs(High[0] - fastMa) <= 0.1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) )
{
if ((fastMa + i_thresholdFromMa * pt) > Ask) // Проверка что цена открытия выше Ask, т.к. у нас вход отложенникомPrint("fastMa = ", DoubleToStr(fastMa,Digits));
Print("i_thresholdFromMa = ", DoubleToStr(i_thresholdFromMa * pt,Digits));
ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
Print("OrderOpenPrice() = ", DoubleToStr(OrderOpenPrice(),Digits));
}
if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
return (true);
}
temos uma abertura de posição a preçoND(fastMa + i_thresholdFromMa * pt), mas não abre de forma alguma. Por quê?
Já faz dois dias que estou lutando, não sei o que fazer. No código, tudo é a mesma coisa. Eu não passei nenhum cheque de verdade, estou escrevendo-os agora para o tester.
Aqui está uma captura de tela, por exemplo,
No gráfico, você pode ver que o preço não é mais alto que o fastMa (vermelho), e mais baixo em geral. Mas no código, a condição é explicitamente declarada, que a ordem pendente deve ser pelo preço:
ND(fastMa + i_thresholdFromMa * pt)
Qual é a contrapartida, profissionais? Eu não sei mais o que fazer...
Olá.Eu escrevi um indicador baseado no indicador, o indicador de Sinal-Sinal original mostra seus valores em todas as barras anteriores quando anexadas ao gráfico (ele é aplicado a todas as barras, a partir da barra [1]), mas o indicador criado a partir dele (ele é aplicado à barra [0]) mostra seus valores somente quando anexado ao gráfico, seus valores estão corretos mas nas barras anteriores "vazias", por favor me diga como corrigi-lo.
Victor, acho que você deveria fazer uma pausa em Asc + distância, e na condição especificar a proporção de Asc e Mashka, então será o que você quer. Experimente!
Você pode ver na tabela que o preço não está acima do fastMa (a pulseira vermelha), mas abaixo dele por completo. Mas no código, a condição é explicitamente declarada de que a pausa deve ser pelo preço:
Qual é a contrapartida, profissionais? Eu não sei mais o que fazer...
Talvez no momento em que o pedido foi feito, o MA estava mais baixo do que o que está sendo sacado agora. Tente tomar os valores de MAA não da 0ª barra, mas da 1ª barra.
Victor, acho que você deveria fazer uma pausa em Asc + distância, e na condição especificar a proporção de Asc e Mashka, então será o que você quer. Experimente!
Boris, foi o que eu fiz:
//+-------------------------------------------------------------------------------------+//| Получаем общий сигнал на открытие позиции |//+-------------------------------------------------------------------------------------+int GetSignal()
{
// Получаем значения машек для дальнейших рассчётовdouble fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,0);
double slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,0);
// double filtrMa = iMA(NULL,i_TF,i_filtrMaPeriod,0,MODE_SMA,MODE_CLOSE,0);if (FindOrders() > 0) // Если есть открытые ордера, то..return (SIGNAL_NO); //..ничего не делаемif (GetStateMa(fastMa, slowMa/*, filtrMa*/) == MA_DIRECT_TO_UP) // Если машки указывают вверх// if ( (MathAbs(High[0] - fastMa) <= 0.1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) ) // Цена вблизи 0.1пп от fastMaif ( (MathAbs(Ask - fastMa) <= 0.1 * pt ) || ( MathAbs(Ask - fastMa) <= 0.1 * pt) )
return(SIGNAL_BUY); // Функция возвращает сигнал покупки// if (GetStateMa(fastMa, slowMa/*, filtrMa*/) == MA_DIRECT_TO_DOWN)// return(SIGNAL_SELL);return (SIGNAL_NO);
}
E aqui está a abertura de posição:
//+-------------------------------------------------------------------------------------+//| Открытие длинной позиции |//+-------------------------------------------------------------------------------------+bool OpenBuy(double fastMa, double slowMa)
{
int ticket = -1;
if ((fastMa + i_thresholdFromMa * pt) > Ask) // Проверка что цена открытия выше Ask, т.к. у нас вход отложенникомPrint("fastMa = ", DoubleToStr(fastMa,Digits));
Print("i_thresholdFromMa = ", DoubleToStr(i_thresholdFromMa * pt,Digits));
ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
Print("OrderOpenPrice() = ", DoubleToStr(OrderOpenPrice(),Digits));
if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
return (true);
}
Tudo parece estar correto. Mas ele ainda está lá.
Sepulca: Talvez no momento em que o pedido foi feito, a MAHA estava mais baixa do que o que está agora desenhado. Tente pegar os valores de MA da 1ª barra em vez da 0ª.
Experimentei, sem diferença. Voltei a colocá-lo... O que importa para mim é o que está acontecendo neste momento, não o que estava acontecendo antes.
Aqui está uma captura de tela (se o valor recebido da máquina não for 0, mas 1) :
Victor, é por isso que escrevo condições no início, para que eu possa ver tudo, para que seja mais fácil encontrar erros lógicos, especialmente quando ainda não há conhecimento e experiência suficientes, entre os quais me contarei por um longo tempo. Os profissionais manipulam facilmente funções, arquivos e bibliotecas, e provavelmente esqueceram como eles gradualmente dominaram toda essa sabedoria. Mas não podemos aprender a teoria sem a prática, e muito mais depende do caráter de cada pessoa.
Experimentei, sem diferença. Eu voltei... O que importa para mim é o que está acontecendo neste momento, não o que aconteceu antes.
Aqui está uma captura de tela (se o valor recebido da máquina não for 0, mas 1) :
Finalmente, diga-me exatamente o que você quer fazer... Por exemplo: o MAA está subindo e está acima do MAA e o preço está acima/abaixo do MAA e, se for verdade, então coloque um pedido pendente a uma distância tão grande. Vou lhe dar um algoritmo rudimentar. Porque é difícil direcioná-lo na direção certa, quando seus fragmentos de código são arrancados do contexto. E o problema é para a quinta série (exagerado).
Quanto ao destacado: trabalho em preços abertos, então você não verá os MACs redesenhados na barra zero
IMHO, não é difícil, mas muito fácil de "dirigir" ou enviar, pois o camarada é muito zeloso em sua luta contra sachês e prateleiras, não se preocupando em estudar o livro didático e a documentação. :-)
IMHO, não é difícil, mas muito fácil de "dirigir" ou enviar, pois o camarada é muito zeloso na luta contra sachês e prateleiras, não se preocupando em estudar o livro didático e a documentação. :-)
Cara, não há praticamente nenhuma armadilha ... Não há milagres. Assim, um homem se cercou com estas pedras e as move, as move.
Eu retrabalhei um código sobre o que perguntei ontem. Agora tudo está como deveria estar. Abaixo estão 3 funções para mostrar o que é usado para obter o sinal original, já que este é apenas o começo do que estou escrevendo.
Aqui está a função de compra:
Aqui está a linha:
temos uma abertura de posição a preçoND(fastMa + i_thresholdFromMa * pt), mas não abre de forma alguma. Por quê?
Já faz dois dias que estou lutando, não sei o que fazer. No código, tudo é a mesma coisa. Eu não passei nenhum cheque de verdade, estou escrevendo-os agora para o tester.
Aqui está uma captura de tela, por exemplo,
No gráfico, você pode ver que o preço não é mais alto que o fastMa (vermelho), e mais baixo em geral. Mas no código, a condição é explicitamente declarada, que a ordem pendente deve ser pelo preço:
Qual é a contrapartida, profissionais? Eu não sei mais o que fazer...
Olá.Eu escrevi um indicador baseado no indicador, o indicador de Sinal-Sinal original mostra seus valores em todas as barras anteriores quando anexadas ao gráfico (ele é aplicado a todas as barras, a partir da barra [1]), mas o indicador criado a partir dele (ele é aplicado à barra [0]) mostra seus valores somente quando anexado ao gráfico, seus valores estão corretos mas nas barras anteriores "vazias", por favor me diga como corrigi-lo.
Meu código:
#property indicator_separate_window #property indicator_minimum -7 #property indicator_maximum 7 #property indicator_buffers 2 #property indicator_color1 Yellow #property indicator_color2 DarkOrange #property indicator_width1 2 #property indicator_width2 2 #property indicator_level1 0.0 //--- buffers double UpMapBuffer[]; double DnMapBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,UpMapBuffer); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexBuffer(1,DnMapBuffer); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int vb; // внутренний бар int i; for(i=1;i<Bars-34-1;i++) { double AO_Sig_Sig_1 = iCustom(NULL,0,"Signal-Signal",0,i); double AO_Sig_Sig_2 = iCustom(NULL,0,"Signal-Signal",0,i+1); if((High[i]<=High[i+1])&&(Low[i]>=Low[i+1])&&(AO_Sig_Sig_1==AO_Sig_Sig_2)) vb++; if((AO_Sig_Sig_1!=AO_Sig_Sig_2)||(i>3+vb)) break; } i=i*(AO_Sig_Sig_1); if(MathAbs(i)>3+vb) i=0; if(i>0) { UpMapBuffer[0]=i; } else { UpMapBuffer[0]=0; } if(i<0) { DnMapBuffer[0]=i; } else { DnMapBuffer[0]=0; } //---- return(0); } //+------------------------------------------------------------------+Victor, acho que você deveria fazer uma pausa em Asc + distância, e na condição especificar a proporção de Asc e Mashka, então será o que você quer. Experimente!
Você pode ver na tabela que o preço não está acima do fastMa (a pulseira vermelha), mas abaixo dele por completo. Mas no código, a condição é explicitamente declarada de que a pausa deve ser pelo preço:
Qual é a contrapartida, profissionais? Eu não sei mais o que fazer...
Victor, acho que você deveria fazer uma pausa em Asc + distância, e na condição especificar a proporção de Asc e Mashka, então será o que você quer. Experimente!
Boris, foi o que eu fiz:
E aqui está a abertura de posição:
Tudo parece estar correto. Mas ele ainda está lá.
Talvez no momento em que o pedido foi feito, a MAHA estava mais baixa do que o que está agora desenhado. Tente pegar os valores de MA da 1ª barra em vez da 0ª.
Experimentei, sem diferença. Voltei a colocá-lo... O que importa para mim é o que está acontecendo neste momento, não o que estava acontecendo antes.
Aqui está uma captura de tela (se o valor recebido da máquina não for 0, mas 1) :
Victor, é por isso que escrevo condições no início, para que eu possa ver tudo, para que seja mais fácil encontrar erros lógicos, especialmente quando ainda não há conhecimento e experiência suficientes, entre os quais me contarei por um longo tempo. Os profissionais manipulam facilmente funções, arquivos e bibliotecas, e provavelmente esqueceram como eles gradualmente dominaram toda essa sabedoria. Mas não podemos aprender a teoria sem a prática, e muito mais depende do caráter de cada pessoa.
Boris, foi o que eu fiz:
E aqui está a abertura do cargo:
Tudo parece estar certo. Mas ainda está lá.
Experimentei, sem diferença. Eu voltei... O que importa para mim é o que está acontecendo neste momento, não o que aconteceu antes.
Aqui está uma captura de tela (se o valor recebido da máquina não for 0, mas 1) :
Finalmente, diga-me exatamente o que você quer fazer... Por exemplo: o MAA está subindo e está acima do MAA e o preço está acima/abaixo do MAA e, se for verdade, então coloque um pedido pendente a uma distância tão grande. Vou lhe dar um algoritmo rudimentar. Porque é difícil direcioná-lo na direção certa, quando seus fragmentos de código são arrancados do contexto. E o problema é para a quinta série (exagerado).
Quanto ao destacado: trabalho em preços abertos, então você não verá os MACs redesenhados na barra zero
... é difícil apontar na direção certa...
IMHO, não é difícil, mas muito fácil de "dirigir" ou enviar, pois o camarada é muito zeloso em sua luta contra sachês e prateleiras, não se preocupando em estudar o livro didático e a documentação. :-)
IMHO, não é difícil, mas muito fácil de "dirigir" ou enviar, pois o camarada é muito zeloso na luta contra sachês e prateleiras, não se preocupando em estudar o livro didático e a documentação. :-)
Assim, um homem se cercou com estas pedras e as move, as move.
Muito obrigado. exatamente o que é necessário)