Igor, antes de tudo obrigado por suas funções e por este ramo, eles ajudam muitos programadores não-profissionais. Mas eu gostaria de lhe fazer uma pergunta sobre a função NumberOfOrders(). Não consigo colocá-lo para trabalhar. Coloquei-o em um Expert Advisor MACD padrão para dar um exemplo de como eu o utilizo. Estou colando o código:
Para descrevê-lo brevemente, ele foi alterado ali:
// в стандартной версии
total=OrdersTotal();
if(total<1){
// бла бла бла ...
// в моей версии эксперта
total=OrdersTotal(); // total я оставил т.к. он используется дальше
if(NumberOfOrders(NULL,-1,-1)<1){
// бла бла бла ... ну и плюс сама функция NumberOfOrders() ниже
Naturalmente, não funciona. Você poderia, por favor, explicar o que está errado? Obrigado de antemão.
seifer писал (а): Você poderia explicar o que está errado? Obrigado de antemão.
Dois comentários:
1. Eu o faria desta maneira:
total=NumberOfOrders(NULL);
if(total<1){
...
}
2. Função NumberOfOrders() retorna o número de ordens - negócios dos tipos BuyLimit, BuyStop, SellLimit e SellStop. O Expert Advisor que você modificou não trabalha com pedidos. Ela abre posições a preços de mercado, ou seja, realiza operações de Compra e Venda. Você precisa usar a função NumberOfPositions(), que eu colocarei no próximo post.
Esta função retorna o número de posições atualmente em aberto. Uma seleção mais precisa das posições contadas é especificada por parâmetros externos:
sy - Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições do instrumento especificado. O valor padrão "" significa qualquer instrumento de mercado. NULL significa o instrumento atual.
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 -1 significa qualquer identificador.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает количество позиций. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+intNumberOfPositions(stringsy="", intop=-1, intmn=-1){inti, k=OrdersTotal(), kp=0;
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()==OP_BUY || OrderType()==OP_SELL){if(op<0 || OrderType()==op){if(mn<0 || OrderMagicNumber()==mn)kp++;
}}}}}return(kp);
}
Em anexo está um roteiro para testar a função NumberOfPositions().
Esta função retorna o lucro total na moeda das posições fechadas desde uma determinada data. Uma seleção mais precisa das posições a serem levadas em conta é especificada usando parâmetros externos:
sy - Nome do instrumento de mercado. Se você especificar este parâmetro, a função considerará apenas as posições deste instrumento. O valor padrão "" significa qualquer instrumento de mercado. NULL significa o instrumento atual.
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 -1 significa qualquer identificador.
dt - Data e hora em segundos desde 1970. Valor padrão - 0 significa que todas as posições disponíveis na história são levadas em conta.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает суммарный профит в валюте депозита |//| закрытых с определённой даты позиций |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| dt - Дата и время в секундах с 1970 года ( 0 - с начала истории) |//+----------------------------------------------------------------------------+doubleGetProfitFromDateInCurrency(stringsy="", intop=-1, intmn=-1, datetimedt=0){doublep=0;
inti, 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=="") && (op<0 || OrderType()==op)){if(OrderType()==OP_BUY || OrderType()==OP_SELL){if(mn<0 || OrderMagicNumber()==mn){if(dt<OrderCloseTime()){p+=OrderProfit()+OrderCommission()+OrderSwap();
}}}}}}return(p);
}
HH. Em anexo está um script para testar a função GetProfitFromDateInCurrency().
O indicador i-Profit, que mostra valores absolutos e percentuais de lucro para diferentes períodos de tempo, é um exemplo mais prático de como aprender a usar esta função.
Gostaria de dizer obrigado pela ficção de correlação. Eu tinha algumas opções, eu só queria esclarecê-las)
Eu também tenho essa pergunta. Muitas vezes encontro erro 130 - parada errada durante o teste do Expert Advisor no modo de tempo real. Não o analiso, não entendo porque ocorre em uma ou outra situação. Eu comecei a usar esta construção
Comecei a usar esta construção para normalizar o stop e TP, mas não resolveu a situação. Talvez você tenha enfrentado situações semelhantes, diga-me como lidar com isso e qual é a melhor maneira de analisá-lo.
Para esclarecer: Isto acontece com muita freqüência quando tento estabelecer uma parada em +1 p a partir do preço aberto
MA. Vou manter o correio por 24 horas - depois vou apagá-lo!
Você não precisa apagá-lo! Deixe ficar...
Igor, antes de tudo obrigado por suas funções e por este ramo, eles ajudam muitos programadores não-profissionais. Mas eu gostaria de lhe fazer uma pergunta sobre a função NumberOfOrders(). Não consigo colocá-lo para trabalhar. Coloquei-o em um Expert Advisor MACD padrão para dar um exemplo de como eu o utilizo. Estou colando o código:
Para descrevê-lo brevemente, ele foi alterado ali:
Naturalmente, não funciona. Você poderia, por favor, explicar o que está errado? Obrigado de antemão.Você poderia explicar o que está errado? Obrigado de antemão.
Dois comentários:
1. Eu o faria desta maneira:
2. Função NumberOfOrders() retorna o número de ordens - negócios dos tipos BuyLimit, BuyStop, SellLimit e SellStop. O Expert Advisor que você modificou não trabalha com pedidos. Ela abre posições a preços de mercado, ou seja, realiza operações de Compra e Venda. Você precisa usar a função NumberOfPositions(), que eu colocarei no próximo post.A função NumberOfPositions().
Esta função retorna o número de posições atualmente em aberto. Uma seleção mais precisa das posições contadas é especificada por parâmetros externos:
- sy - Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições do instrumento especificado. O valor padrão "" significa qualquer instrumento de mercado. NULL significa o instrumento atual.
- 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 -1 significa qualquer identificador.
Em anexo está um roteiro para testar a função NumberOfPositions().Uau! Pensei que fosse um projeto:
passaria por todas as posições (incluindo OP_SELL e OP_BUY). Tudo está funcionando agora. Mais uma vez, obrigado!Função GetProfitFromDateInCurrency().
Esta função retorna o lucro total na moeda das posições fechadas desde uma determinada data. Uma seleção mais precisa das posições a serem levadas em conta é especificada usando parâmetros externos:
HH. Em anexo está um script para testar a função GetProfitFromDateInCurrency().
O indicador i-Profit, que mostra valores absolutos e percentuais de lucro para diferentes períodos de tempo, é um exemplo mais prático de como aprender a usar esta função.
Olá Igor.
Gostaria de dizer obrigado pela ficção de correlação. Eu tinha algumas opções, eu só queria esclarecê-las)
Eu também tenho essa pergunta. Muitas vezes encontro erro 130 - parada errada durante o teste do Expert Advisor no modo de tempo real. Não o analiso, não entendo porque ocorre em uma ou outra situação. Eu comecei a usar esta construção
Comecei a usar esta construção para normalizar o stop e TP, mas não resolveu a situação. Talvez você tenha enfrentado situações semelhantes, diga-me como lidar com isso e qual é a melhor maneira de analisá-lo.
Para esclarecer: Isto acontece com muita freqüência quando tento estabelecer uma parada em +1 p a partir do preço aberto
encontrar o erro 131 - Parada incorreta.
131 - Volume incorreto, erro na granulação do volume. Este é o tamanho do lote sendo comercializado.
Encontro o erro 131 - Parada errada.
131 - Volume incorreto, um erro na granulação do volume. Este é o tamanho do lote sendo negociado.
Código errado, não 131 mas 130
Código errado, não é 131, é 130.
Estou vendo...
Tente normalizar como se segue:
Eu o faço e não encontro erro 130.