Acho que a Ilnar teve algumas dificuldades com os níveis de preços fractais. É por isso que eu sugiro usar minha função:
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 07.10.2006 |//| Описание : Поиск ближайшего фрактала. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий ТФ) |//| mode - тип фрактала (MODE_LOWER|MODE_UPPER) |//+----------------------------------------------------------------------------+doubleFindNearFractal(stringsy="0", inttf=0, intmode=MODE_LOWER){ if(sy=="" || sy=="0")sy=Symbol();
doublef=0;
intd=MarketInfo(sy, MODE_DIGITS), s;
if(d==0)if(StringFind(sy, "JPY")<0)d=4; elsed=2;
for(s=2; s<100; s++){ f=iFractals(sy, tf, mode, s);
if(f!=0)return(NormalizeDouble(f, d));
} Print("FindNearFractal(): Фрактал не найден");
return(0);
}
Função FindNearFractal() procura o fractal mais próximo do tipo especificado no símbolo especificado, no prazo determinado, e retorna seu nível de preço. Conhecendo o nível de preço da localização do fractal, já é fácil colocar um pedido nesse nível.
É possível que a função devolva dois valores, por exemplo, o número da barra onde o fractal está localizado, ou devemos conectar outro?
xrust писал (а): É possível que a função retorne dois valores, por exemplo, também o número de barra onde o fractal está localizado, ou devo conectar outro?
E por que devolver dois valores quando um - o número da barra - é suficiente? Para este fim, na declaração:
return(NormalizeDouble(f, d));
escrever o valor do contador de barras ao invés do nível de preço. Na saída, você receberá o número de barra do fractal. E você obterá o nível de preço com uma das funções iHigh () ou iLow(), dependendo do tipo fractal.
xrust: Não, é claro, eu estou basicamente perguntando.
ah... Bem, se em princípio, você pode usar um array passado por referência. Então o número de parâmetros devolvidos seria limitado pelo tamanho da matriz.
Devolve uma bandeira para a existência de um pedido com o tamanho de lote especificado. Verdadeiro - a ordem existe (conjunto), Falso - a ordem não existe (não conjunto). Você pode limitar a lista de ordens a serem verificadas usando os parâmetros da função:
sy - Nome do instrumento. Se você definir este parâmetro, a função só verificará as ordens do instrumento especificado. NULL significa instrumento atual, e "" (por padrão) significa qualquer instrumento.
op - Operação, tipo de ordem pendente. Valores válidos: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP ou -1. O valor padrão de -1 indica qualquer tipo de pedido.
mn - Identificador do pedido (MagicNumber). O valor padrão de -1 significa qualquer MagicNumber.
lo - Tamanho de um lote com uma precisão de duas casas decimais. O valor padrão é 0 - qualquer tamanho de lote.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.11.2006 |//| Описание : Возвращает флаг существования ордера по размеру лота. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любой ордер) |//| mn - MagicNumber (-1 - любой магик) |//| lo - лот ( 0 - любой лот) |//+----------------------------------------------------------------------------+boolExistOrdersByLot(stringsy="", intop=-1, intmn=-1, doublelo=0){inti, k=OrdersTotal(), ot;
lo=NormalizeDouble(lo, 2);
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ot=OrderType();
if(ot>1 && ot<6){if((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)){if(mn<0 || OrderMagicNumber()==mn){if(lo<=0 || NormalizeDouble(OrderLots(), 2)==lo)return(True);
}}}}}return(False);
}
Devolve o tamanho do lote do último pedido colocado ou -1. Você pode limitar a lista de ordens a serem verificadas usando os parâmetros da função:
sy - Nome do instrumento. Se este parâmetro for dado, a função somente verificará as ordens do instrumento especificado. NULL significa o instrumento atual, e "" (por padrão) significa qualquer instrumento.
op - Operação, tipo de ordem pendente. Valores válidos: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP ou -1. O valor padrão de -1 significa qualquer ordem.
mn - Identificador do pedido (MagicNumber). O valor padrão -1 significa qualquer MagicNumber.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.11.2006 |//| Описание : Возвращает размер лота последнего выставленного ордера или -1 |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+doubleGetLotLastOrder(stringsy="", intop=-1, intmn=-1){datetimeo;
doublel=-1;
inti, k=OrdersTotal();
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if(OrderSymbol()==sy || sy==""){if(OrderType()>1 && OrderType()<6){if(op<0 || OrderType()==op){if(mn<0 || OrderMagicNumber()==mn){if(o<OrderOpenTime()){o=OrderOpenTime();
l=OrderLots();
}}}}}}}return(l);
}
Retorna o preço de ajuste do último pedido aberto ou 0. Você pode limitar a lista de pedidos a serem verificados com parâmetros de função:
sy - Nome do instrumento. Se este parâmetro for dado, a função somente verificará as ordens do instrumento especificado. NULL significa o instrumento atual, e "" (por padrão) significa qualquer instrumento.
op - Operação, tipo de ordem pendente. Valores válidos: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP ou -1. O valor padrão de -1 indica qualquer ordem.
mn - Identificador do pedido (MagicNumber). O valor padrão -1 significa qualquer MagicNumber.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.11.2006 |//| Описание : Возвращает цену установки последнего ордера или 0. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+doubleGetOrderOpenPrice(stringsy="", intop=-1, intmn=-1){datetimet;
doubler=0;
inti, k=OrdersTotal();
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if(OrderSymbol()==sy || sy==""){if(OrderType()>1 && OrderType()<6){if(op<0 || OrderType()==op){if(mn<0 || OrderMagicNumber()==mn){if(t<OrderOpenTime()){t=OrderOpenTime();
r=OrderOpenPrice();
}}}}}}}return(r);
}
Todo homem tem a direita para a esquerda... hee... Eu vou me divertir um pouco com isto
Ilnar, no tópico Ordens fractais pendentes, perguntou: Como fazer ordens pendentes sobre fractais?
Acho que a Ilnar teve algumas dificuldades com os níveis de preços fractais. É por isso que eu sugiro usar minha função:
Função FindNearFractal() procura o fractal mais próximo do tipo especificado no símbolo especificado, no prazo determinado, e retorna seu nível de preço. Conhecendo o nível de preço da localização do fractal, já é fácil colocar um pedido nesse nível.
É possível que a função retorne dois valores, por exemplo, também o número de barra onde o fractal está localizado, ou devo conectar outro?
Não, é claro, eu estou basicamente perguntando.
Função ExistOrdersByLot().
Devolve uma bandeira para a existência de um pedido com o tamanho de lote especificado. Verdadeiro - a ordem existe (conjunto), Falso - a ordem não existe (não conjunto). Você pode limitar a lista de ordens a serem verificadas usando os parâmetros da função:
Exemplos de como usar a função ExistOrdersByLot().
Em anexo, como de costume, está um roteiro de trabalho com os exemplos acima.
Função GetLotLastOrder().
Devolve o tamanho do lote do último pedido colocado ou -1. Você pode limitar a lista de ordens a serem verificadas usando os parâmetros da função:
Exemplos de como usar GetLotLastOrder().
Em anexo, encontra-se um roteiro de trabalho tradicional com os exemplos acima.
Função GetOrderOpenPrice().
Retorna o preço de ajuste do último pedido aberto ou 0. Você pode limitar a lista de pedidos a serem verificados com parâmetros de função:
Exemplos de como usar o GetOrderOpenPrice().
Em anexo está um roteiro perfeitamente funcional com os exemplos acima.