Por favor, diga-me a saída. Eu tenho um indicador chamado Average Directional Movement Index e ele desenha linhas tracejadas. Eu quero pegar linhas cruzadas. Não creio que seja necessário traçar linhas tracejadas.
Shuba: Eu afinei um pouco a função. Agora ele calcula as interseções sem colisões. Parâmetros de entrada: | nm1 - nome da primeira linha |
nm2 - nome da segunda linha
produção M - nível de preço.
PS. Sinto muito ao autor deste tópico por ter postado meu código aqui. Só pensei, talvez alguém também tenha lutado com a travessia.
Bem, talvez esta função deva retornar este mesmo nível de preço (como na variante anterior)! Além disso, há uma variável "T" não declarada em seu código.
TarasBY: Bem, talvez esta função deva retornar este mesmo nível de preço (como na variante anterior)! Além disso, seu código contém uma variável "T" não declarada.
Bem, ele o devolve)
sobre variáveis não declaradas - desculpe. Eu estou corrigido.
duplo M - cruzando o nível de preços. Esta variável é declarada no início.
Esta função fecha uma posição ao preço de mercado se o preço pisar em vários bares na zona próxima ao TakeProfit ou tentar sair desta zona. A seleção das posições a serem fechadas é especificada usando parâmetros externos:
sy - Nome do instrumento. Se definirmos este parâmetro, a função só verificará as posições do instrumento especificado. NULL significa o instrumento atual, enquanto "" (por padrão) significa qualquer instrumento.
op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor padrão -1 significa qualquer posição.
mn - Identificador de posição (MagicNumber). O valor padrão de -1 significa qualquer MagicNumber.
tf - Prazo do gráfico, no qual contar as barras, durante o qual o preço pisca na zona TakeProfit. O valor padrão 0 é o período de tempo atual.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.04.2012 |//| Описание : Закрытие позиций при нахождении цены в зоне TakeProfit |//| в течение заданного количества баров, |//| а также при попыте выйти из этой зоны. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//+----------------------------------------------------------------------------+void ClosePosByTakeProfitZone(string sy="", int op=-1, int mn=-1, int tf=0) {
double pa, pb, po, pp, tp;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if ((mn<0 || OrderMagicNumber()==mn) && OrderTakeProfit()>0) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
if (po==0) Message("В обзоре рынка отсутствует символ "+OrderSymbol());
else {
if (OrderType()==OP_BUY) {
RefreshRates();
pb=MarketInfo(OrderSymbol(), MODE_BID);
pp=iLow(OrderSymbol(), tf, iLowest(OrderSymbol(), tf, MODE_LOW, TP.ZoneBars, 0));
tp=OrderTakeProfit()-TP.ZonePoint*po;
if (pp>tp || (pb<tp && (iHigh(OrderSymbol(), tf, 0)>tp) || (iHigh(OrderSymbol(), tf, 1)>tp))) ClosePosBySelect();
}
if (OrderType()==OP_SELL) {
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pp=iHigh(OrderSymbol(), tf, iHighest(OrderSymbol(), tf, MODE_HIGH, TP.ZoneBars, 0));
tp=OrderTakeProfit()+TP.ZonePoint*po;
if (pp<tp || (pb>tp && (iLow(OrderSymbol(), tf, 0)<tp) || (iLow(OrderSymbol(), tf, 1)<tp))) ClosePosBySelect();
}
}
}
}
}
}
}
Em anexo está um Expert Advisor para testar a função ClosePosByTakeProfitZone(). você pode testá-lo tanto no testador como online.
Comecei a estudar suas funções não faz muito tempo, na página 36 eu não entendia bem as funções, por favor, me ajude a entender:
Função GetArrowInterval().
//+ + //| Retorna o intervalo de ajuste do ponteiro de sinal | //+ + int GetArrowInterval() { int p = Period();
switch (p) { case 1: return(4); case 5: return(5); case 15: return(6); case 30: return(8); case 60: return(10); case 240: return(20); case 1440: return(40); case 10080: return(80); case 43200: return(150); } xml-ph-0015@deep
ou seja, esta função foi usada para definir setas usando a função SetArrow(), ou seja, em vez de nível de preço na linha ObjectCreate(nm, OBJ_ARROW, 0, 0,0), diga-me como aconteceu, não está claro para mim o que significam os valores de retorno (4,5,6,8,10....)
A nova versão da função também permanece pouco clara:
//+ + //| Author : Kim Igor V. aka KimIV, | //+ + //| Version : 12.10.2007 | //+ + //| Description : Returns signal pointer interval | //| Parameters: | ///| pr - percentage relative to window price size | //+
Comecei a estudar suas funções não há muito tempo, na página 36 eu não entendia bem as funções, por favor, me ajude a entender:
ou seja, esta função foi usada para definir setas usando a função SetArrow(), ou seja, ao invés do nível de preço na linha ObjectCreate(nm, OBJ_ARROW, 0, 0,0), diga-me como isso foi feito...
Você deve ter entendido mal a finalidade destas funções. Eles não operam com preços e não colocam ícones; eles só retornam a distância em pips, dependendo do período de tempo atual. Por favor, consulte a imagem abaixo.
Se você colocar tal marcador não perto do preço, mas a uma certa distância e, por exemplo, no tempo H1, e depois mudar para M1, provavelmente não verá o marcador. A escala irá mudar e o ícone se moverá para baixo ou para cima. As funções mencionadas foram projetadas para garantir que os ícones estejam sempre visíveis no gráfico a qualquer momento.
Lisi4ka330:
...o que significam os valores de retorno (4,5,6,8,10....)
Distância em pips, dependendo do cronograma atual.
Lisi4ka330:
A função WindowPriceMax() retorna o valor máximo da escala vertical, ou seja, é o valor máximo do preço, mas em que período?
Não por qualquer período... Apenas na janela atual. Por exemplo, na figura abaixo, o preço máximo é 97,35
Parâmetros de entrada: |
nm1 - nome da primeira linha |
nm2 - nome da segunda linha
output M é o nível de preço.
PS. Desculpe ao autor deste tópico por ter postado meu código aqui. Só de pensar, talvez alguém também tenha problemas com travessias...
Isso vem à mente (já nos Anais):
PS. Peço desculpas ao autor deste tópico por ter postado meu código aqui. Pensei que talvez alguém também lutasse com interseções...
Eu afinei um pouco a função. Agora ele calcula as interseções sem colisões.
Parâmetros de entrada: |
nm1 - nome da primeira linha |
nm2 - nome da segunda linha
produção M - nível de preço.
PS. Sinto muito ao autor deste tópico por ter postado meu código aqui. Só pensei, talvez alguém também tenha lutado com a travessia.
Bem, talvez esta função deva retornar este mesmo nível de preço (como na variante anterior)! Além disso, seu código contém uma variável "T" não declarada.
Bem, ele o devolve)
sobre variáveis não declaradas - desculpe. Eu estou corrigido.
duplo M - cruzando o nível de preços. Esta variável é declarada no início.
O trailer é um Expert Advisor para ver como a função funciona.
Não consegui que fosse carregado imediatamente...
Não consegui que fosse carregado imediatamente...
Você não deve agitar as águas, IMHO - bombardeie as bibliotecas de funções com descrições aqui e isso é tudo...
Aqueles que precisam dele o encontrarão.
A função ClosePosByTakeProfitZone().
Esta função fecha uma posição ao preço de mercado se o preço pisar em vários bares na zona próxima ao TakeProfit ou tentar sair desta zona. A seleção das posições a serem fechadas é especificada usando parâmetros externos:
Boa noite, Igor!
Comecei a estudar suas funções não faz muito tempo, na página 36 eu não entendia bem as funções, por favor, me ajude a entender:
Função GetArrowInterval().
//+
+
//| Retorna o intervalo de ajuste do ponteiro de sinal |
//+
+
int GetArrowInterval() {
int p = Period();
switch (p) {
case 1: return(4);
case 5: return(5); case 15: return(6);
case 30: return(8);
case 60: return(10); case 240: return(20);
case 1440: return(40);
case 10080: return(80);
case 43200: return(150);
} xml-ph-0015@deep
ou seja, esta função foi usada para definir setas usando a função SetArrow(), ou seja, em vez de nível de preço na linha ObjectCreate(nm, OBJ_ARROW, 0, 0,0), diga-me como aconteceu, não está claro para mim o que significam os valores de retorno (4,5,6,8,10....)
A nova versão da função também permanece pouco clara://+
+ //| Author : Kim Igor V. aka KimIV,
|
//+
+
//| Version : 12.10.2007 |
//+ +
//| Description : Returns signal pointer interval | //| Parameters: |
///| pr - percentage relative to window price size | //+
retorno((WindowPriceMax()-WindowPriceMin())/100*pr/Ponto);
A função WindowPriceMax() retorna o valor máximo da escala vertical, ou seja, este é o valor máximo do preço, mas em que período?
E obrigado por seu árduo trabalho
))))
Comecei a estudar suas funções não há muito tempo, na página 36 eu não entendia bem as funções, por favor, me ajude a entender:
ou seja, esta função foi usada para definir setas usando a função SetArrow(), ou seja, ao invés do nível de preço na linha ObjectCreate(nm, OBJ_ARROW, 0, 0,0), diga-me como isso foi feito...
Você deve ter entendido mal a finalidade destas funções. Eles não operam com preços e não colocam ícones; eles só retornam a distância em pips, dependendo do período de tempo atual. Por favor, consulte a imagem abaixo.
Se você colocar tal marcador não perto do preço, mas a uma certa distância e, por exemplo, no tempo H1, e depois mudar para M1, provavelmente não verá o marcador. A escala irá mudar e o ícone se moverá para baixo ou para cima. As funções mencionadas foram projetadas para garantir que os ícones estejam sempre visíveis no gráfico a qualquer momento.
Lisi4ka330:
...o que significam os valores de retorno (4,5,6,8,10....)
Distância em pips, dependendo do cronograma atual.
Lisi4ka330:
A função WindowPriceMax() retorna o valor máximo da escala vertical, ou seja, é o valor máximo do preço, mas em que período?
Não por qualquer período... Apenas na janela atual. Por exemplo, na figura abaixo, o preço máximo é 97,35