Obrigado pela resposta, Igor, eu já descobri. Também uso suas funções separadamente, mas queria aproveitar a biblioteca na fase de desenvolvimento da EA.
Eu vi como é feita a biblioteca do kompostertrade_lib&info_lib e fiz algumas mudanças na sua para meu próprio uso.
1. Eu removi em todas as bibliotecas #bibliotecas de propriedade e #incluir ligações cruzadas de bibliotecas, renomeando bibliotecas para não confundir.
2. Fiz um bloco de chamadas diretas de todas as bibliotecas.
#include <b-Positions#.mqh> // Библиотека функций для работы с позициями #include <b-KimIV#.mqh> // Библиотека дополнительных функций#include <b-Orders#.mqh> // Библиотека функций для работы с ордерами#include <stdlib.mqh> // Стандартная библиотека#include <WinUser32.mqh> // Стандартная библиотека
Agora todas as funções de todas as bibliotecas estão disponíveis, não há erros e mensagens criminais durante a compilação, exceto "não é referenciado..." normal.
Todos os EAs externos estão disponíveis, sem problemas.
Escreva mais, vamos nos conectar e usar. Antes de tudo, eu gostaria de ver a função de rastreamento pelo lucro total.
Esta função retorna na semana do mês por data. Aceita apenas um parâmetro opcional:
dt - Data, hora. Valor padrão - 0 - data e hora atual do servidor comercial.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 12.08.2008 |//| Описание : Возвращает номер недели месяца по дате |//+----------------------------------------------------------------------------+//| Параметры: |//| dt - дата, время (0 - сейчас по времени торгового сервера) |//+----------------------------------------------------------------------------+int WeekOfMonth(datetime dt=0){if( dt<=0) dt=TimeCurrent();datetime d;int i, kd=TimeDay( dt), nn=1;for( i=2; i<= kd; i++){
d=StrToTime(TimeYear( dt)+"."+TimeMonth( dt)+"."+ i);if(TimeDayOfWeek( d)==1) nn++;}return( nn);}
SZY. Em anexo está um roteiro para testar a função WeekOfMonth().
Olá, Igor! Muito obrigado por suas características úteis! Estou usando-as o máximo que posso! Eu mesmo só recentemente entrei nisto, então uma pergunta para você... Já os uso há muito tempo, portanto, já os uso há muito tempo. Estou usando sua função OpenPosition, talvez esteja reagindo a um erro ou algo assim... Aqui está o diário de bordo de ontem, tudo estava bem antes disso! não pode encontrar erro 220........ em nenhum lugar
07:47:28 MetaTrader 4.00 build 220 iniciado (MetaQuotes Software Corp.) 07:47:28 Expert open prob USDJPY EURUSD,M1: carregado com sucesso 07:47:32 '1262868': login 07:47:44 '1262868': login 07:49:40 '1262868': login 07:49:46 '1262868': login 07:54:44 '1262868': falha na conexão [Sem conexão] 11:38:16 Expert open prob USDJPY EURUSD,M1: removido 11:38:18 MetaTrader 4.00 build 220 parou 14:05:05 MetaTrader 4.00 build 220 começou (MetaQuotes Software Corp.) 14:05:05 'Expert open prob USDJPY EURUSD,M1: carregado com sucesso 14:05:10 '1262868': login 14:05:31 '1262868': login 14:06:39 '1262868': login 14:06:46 '1262868': login 15:57:06 '1262868': falha na conexão [Sem conexão] 18:30:46 Expert open prob USDJPY EURUSD,M5: removido 18:30:49 Bombeamento principal: timeout na parada 18:30:52 Bombeamento principal: timeout na parada 18:30:55 Bombeamento principal: timeout na parada 18:30:58 Bombeamento principal: timeout na parada 18:31:01 Bombeamento principal: timeout na parada 18:31:01 Bombeamento principal: terminado 18:31:02 MetaTrader 4.00 build 220 parou 18:31:02 MetaTrader 4.00 build 220 parou porque o sistema foi desligado 18:47:57 MetaTrader 4.00 build 220 começou (MetaQuotes Software Corp.) 18:47:58 Sonda aberta por especialista USDJPY EURUSD,M5: carregada com sucesso 18:48:01 '1262868': falha na conexão [Sem conexão] 18:48:10 '1262868': login 18:48:20 '1262868': login 20:19:00 '1262868': login 20:19:07 '1262868': login 20:20:05 '1262868': login 20:20:13 '1262868': login 20:59:29 '1262868': login 20:59:39 '1262868': login 21:02:16 '1262868': login 21:02:41 '1262868': Falha na conexão do DataCenter [6] 22:08:40 '1262868': Falha no ping 22:08:43 '1262868': login 22:08:49 '1262868': Falha na conexão do DataCenter [6] 22:1001 '1262868': login 22:10:05 '1262868': Falha na conexão do DataCenter [6] 22:14:59 '1262868': login 22:15:13 '1262868': login 22:15:22 '1262868': Falha na conexão do DataCenter [6] 22:37:16 '1262868': login 22:37:27 '1262868': Falha na conexão do DataCenter [6] 22:4051 '1262868': login 22:41:04 '1262868': Falha na conexão do DataCenter [6] 23:17:14 Sonda aberta por especialista USDJPY EURUSD,M5: removido 23:17:16 Sonda aberta por especialista USDJPY EURUSD,M5: carregada com sucesso 23:25:52 Sonda aberta por especialista USDJPY EURUSD,M5: removido 23:25:55 MetaTrader 4.00 build 220 parou 23:25:59 MetaTrader 4.00 build 220 começou (MetaQuotes Software Corp.) 23:26:05 '1262868': login 23:26:05 Expert open prob USDJPY EURUSD,M5: carregado com sucesso 23:26:15 '1262868': login 23:27:19 '1262868': login 23:27:34 '1262868': login 23:28:20 Expert open prob USDJPY EURUSD,M5: removido 23:28:25 Expert open prob USDJPY USDCHF,H4: carregado com sucesso 23:28:33 Expert open prob USDJPY USDCHF,H4: removido
khorosh писал(а)>> Igor, não há função que feche todas as posições a partir daquelas que têm um lote maior?
não foi... escrito...
A função ClosePosBySortLots().
Esta função fecha posições em ordem de classificação por tamanho de lote. Ou seja, usando esta função, você pode fechar posições em ordem ascendente ou descendente de lotes de tamanhos. Função ClosePosBySortLots() aceita os seguintes parâmetros opcionais:
sy - Nome do instrumento comercial. "" - qualquer instrumento, NULL - instrumento atual. O valor padrão é "".
op - Tipo de operação comercial. Valores válidos -1 - qualquer posição, OP_BUY - comprar, OP_SELL - vender. O valor padrão é -1.
mn - MagicNumber, identificador único de operação comercial. Valor por default -1 - qualquer número mágico.
sd - Direção da classificação do tamanho do lote. Valores válidos MODE_ASCEND - ascendente, MODE_DESCEND - descendente. O valor padrão é MODE_DESCEND.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 11.12.2008 |//| Описание : Закрытие позиций в порядке сортировки по размерам лотов. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//| sd - Направление сортировки лотов (MODE_ASCEND - возрастание, |//| MODE_DESCEND - убывание) |//+----------------------------------------------------------------------------+void ClosePosBySortLots(string sy="",int op=-1,int mn=-1,int sd= MODE_DESCEND){double a[][2];// Массив лотов и тикетовint i, k=OrdersTotal();// Счётчик и количество ордеровint p=0;// Количество позицийif( sy=="0") sy=Symbol();for( i=0; i< k; i++){if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)){if((OrderSymbol()== sy || sy=="")&&( op<0||OrderType()== op)){if(OrderType()==OP_BUY||OrderType()==OP_SELL){if( mn<0||OrderMagicNumber()== mn){
p++;ArrayResize( a, p);
a[ p-1][0]=OrderLots();
a[ p-1][1]=OrderTicket();}}}}}// вдруг позиций нету, тогда и закрывать нечегоif( p>0){ArraySort( a,WHOLE_ARRAY,0, sd);for( i=0; i< p; i++){if(OrderSelect( a[ i][1], SELECT_BY_TICKET)){// проверим незакрытость на всякий случай,// может какая-то позиция уже закрылась по стопу/тейкуif(OrderCloseTime()==0) ClosePosBySelect();}}}}
SZY. anexado um script para testar a função ClosePosBySortLots().
Esta função adiciona o mesmo número de zeros à corda (à esquerda), de modo que o comprimento da corda se torna igual a algum valor dado. A função AddLeadingZero() toma os seguintes parâmetros obrigatórios:
s - O fio ao qual os zeros principais devem ser adicionados.
k - O comprimento da corda S resultante.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Добавляет к строке S столько лидирующих нулей "0", |//| : чтобы длина строки S стала равна K. |//+----------------------------------------------------------------------------+//| Параметры: |//| s - строка |//| k - длина строки S |//+----------------------------------------------------------------------------+string AddLeadingZero(string s,int k){while(StringLen( s)< k) s=StringConcatenate("0", s);return( s);}
SZU. Em anexo está um roteiro para testar a função AddLeadingZero().
Esta função converte dois/três inteiros em uma cadeia no formato de tempo. Se dois números forem passados para a função, o primeiro será usado como horas e o segundo como minutos. A cadeia de formato retornada será "HH:MM". Se houver três números, o terceiro será substituído pelos segundos e a função retornará a string "HH:MM:SS". A função toTime() aceita os seguintes parâmetros opcionais:
h - Relógio. O valor padrão é 0.
m - Minutos. O valor padrão é 0.
s - Segundos. 0 - Não usar. Valor padrão 0.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Преобразует два/три целых числа в строку в формате времени |//+----------------------------------------------------------------------------+//| Параметры: |//| h - часы |//| m - минуты |//| s - секунды (0 - не использовать) |//+----------------------------------------------------------------------------+string toTime(int h=0,int m=0,int s=0){string st="";if( h==0) st="00:";else st=StringConcatenate( AddLeadingZero( h,2),":");if( m==0) st=StringConcatenate( st,"00");else st=StringConcatenate( st, AddLeadingZero( m,2));if( s!=0) st=StringConcatenate( st,":", AddLeadingZero( s,2));return( st);}
ZS. Em anexo está um roteiro para testar a funçãoTime().
Obrigado pela resposta, Igor, eu já descobri. Também uso suas funções separadamente, mas queria aproveitar a biblioteca na fase de desenvolvimento da EA.
Eu vi como é feita a biblioteca do komposter trade_lib&info_lib e fiz algumas mudanças na sua para meu próprio uso.
1. Eu removi em todas as bibliotecas #bibliotecas de propriedade e #incluir ligações cruzadas de bibliotecas, renomeando bibliotecas para não confundir.
2. Fiz um bloco de chamadas diretas de todas as bibliotecas.
Agora todas as funções de todas as bibliotecas estão disponíveis, não há erros e mensagens criminais durante a compilação, exceto "não é referenciado..." normal.
Todos os EAs externos estão disponíveis, sem problemas.
Escreva mais, vamos nos conectar e usar. Antes de tudo, eu gostaria de ver a função de rastreamento pelo lucro total.
A função WeekOfMonth().
Esta função retorna na semana do mês por data. Aceita apenas um parâmetro opcional:
SZY. Em anexo está um roteiro para testar a função WeekOfMonth().
Olá, Igor! Muito obrigado por suas características úteis! Estou usando-as o máximo que posso! Eu mesmo só recentemente entrei nisto, então uma pergunta para você... Já os uso há muito tempo, portanto, já os uso há muito tempo. Estou usando sua função OpenPosition, talvez esteja reagindo a um erro ou algo assim... Aqui está o diário de bordo de ontem, tudo estava bem antes disso! não pode encontrar erro 220........ em nenhum lugar
07:47:28 MetaTrader 4.00 build 220 iniciado (MetaQuotes Software Corp.)
07:47:28 Expert open prob USDJPY EURUSD,M1: carregado com sucesso
07:47:32 '1262868': login
07:47:44 '1262868': login
07:49:40 '1262868': login
07:49:46 '1262868': login
07:54:44 '1262868': falha na conexão [Sem conexão]
11:38:16 Expert open prob USDJPY EURUSD,M1: removido
11:38:18 MetaTrader 4.00 build 220 parou
14:05:05 MetaTrader 4.00 build 220 começou (MetaQuotes Software Corp.)
14:05:05 'Expert open prob USDJPY EURUSD,M1: carregado com sucesso
14:05:10 '1262868': login
14:05:31 '1262868': login
14:06:39 '1262868': login
14:06:46 '1262868': login
15:57:06 '1262868': falha na conexão [Sem conexão]
18:30:46 Expert open prob USDJPY EURUSD,M5: removido
18:30:49 Bombeamento principal: timeout na parada
18:30:52 Bombeamento principal: timeout na parada
18:30:55 Bombeamento principal: timeout na parada
18:30:58 Bombeamento principal: timeout na parada
18:31:01 Bombeamento principal: timeout na parada
18:31:01 Bombeamento principal: terminado
18:31:02 MetaTrader 4.00 build 220 parou
18:31:02 MetaTrader 4.00 build 220 parou porque o sistema foi desligado
18:47:57 MetaTrader 4.00 build 220 começou (MetaQuotes Software Corp.)
18:47:58 Sonda aberta por especialista USDJPY EURUSD,M5: carregada com sucesso
18:48:01 '1262868': falha na conexão [Sem conexão]
18:48:10 '1262868': login
18:48:20 '1262868': login
20:19:00 '1262868': login
20:19:07 '1262868': login
20:20:05 '1262868': login
20:20:13 '1262868': login
20:59:29 '1262868': login
20:59:39 '1262868': login
21:02:16 '1262868': login
21:02:41 '1262868': Falha na conexão do DataCenter [6]
22:08:40 '1262868': Falha no ping
22:08:43 '1262868': login
22:08:49 '1262868': Falha na conexão do DataCenter [6]
22:1001 '1262868': login
22:10:05 '1262868': Falha na conexão do DataCenter [6]
22:14:59 '1262868': login
22:15:13 '1262868': login
22:15:22 '1262868': Falha na conexão do DataCenter [6]
22:37:16 '1262868': login
22:37:27 '1262868': Falha na conexão do DataCenter [6]
22:4051 '1262868': login
22:41:04 '1262868': Falha na conexão do DataCenter [6]
23:17:14 Sonda aberta por especialista USDJPY EURUSD,M5: removido
23:17:16 Sonda aberta por especialista USDJPY EURUSD,M5: carregada com sucesso
23:25:52 Sonda aberta por especialista USDJPY EURUSD,M5: removido
23:25:55 MetaTrader 4.00 build 220 parou
23:25:59 MetaTrader 4.00 build 220 começou (MetaQuotes Software Corp.)
23:26:05 '1262868': login
23:26:05 Expert open prob USDJPY EURUSD,M5: carregado com sucesso
23:26:15 '1262868': login
23:27:19 '1262868': login
23:27:34 '1262868': login
23:28:20 Expert open prob USDJPY EURUSD,M5: removido
23:28:25 Expert open prob USDJPY USDCHF,H4: carregado com sucesso
23:28:33 Expert open prob USDJPY USDCHF,H4: removido
Muito obrigado de antemão!
Igor, não há função que feche todas as posições a partir daquelas que têm um lote maior?
não foi... escrito...
A função ClosePosBySortLots().
Esta função fecha posições em ordem de classificação por tamanho de lote. Ou seja, usando esta função, você pode fechar posições em ordem ascendente ou descendente de lotes de tamanhos. Função ClosePosBySortLots() aceita os seguintes parâmetros opcionais:
SZY. anexado um script para testar a função ClosePosBySortLots().
A função AddLeadingZero().
Esta função adiciona o mesmo número de zeros à corda (à esquerda), de modo que o comprimento da corda se torna igual a algum valor dado. A função AddLeadingZero() toma os seguintes parâmetros obrigatórios:
SZU. Em anexo está um roteiro para testar a função AddLeadingZero().
A função toTime().
Esta função converte dois/três inteiros em uma cadeia no formato de tempo. Se dois números forem passados para a função, o primeiro será usado como horas e o segundo como minutos. A cadeia de formato retornada será "HH:MM". Se houver três números, o terceiro será substituído pelos segundos e a função retornará a string "HH:MM:SS". A função toTime() aceita os seguintes parâmetros opcionais:
ZS. Em anexo está um roteiro para testar a funçãoTime().
Igor, você poderia sugerir uma função que daria um sinal correspondente quando o preço corresponde a uma das variáveis, digamos b=1,2400, s=1,2300;
Se b=preço sig=1, se s=preço sig=-1.
Peço desculpas pelo desleixo).
Desculpe, eu não sou Igor. Mas talvez isto ajude.
Eu também peço desculpas. >> é mais preciso.
...apagarei meus cargos até hoje à noite para não desarrumar o fio...
Não é necessário. Será útil dar uma olhada, despertará em você a idéia de que o valor exato do preço não é constantemente capturado.