No tutorial MQLno capítulo Funções Padrão na seção Operações Gráficas há uma função WindowHandle com a seguinte descrição: "...retorna o descritor do sistema da janela (alça da janela) contendo o gráfico especificado".
Pergunta: o que significa "puxador de janela" (o que é) e para que serve?
P.S. A fim de não desorganizar o fórum, agradeço antecipadamente pela resposta
Resposta:
O descritor de janela é um número.
é necessário um descritor de janela para manipular uma janela
olá! problema com o código!! preciso das ordens para abrir uma a uma venda, baía, venda etc., mas a contagem foi feita durante o dia, no dia seguinte por uma nova, sem considerar a ordem de abertura de ordens do dia anterior! isso é um novo dia um novo ciclo! acima do código eu acho que deveria ser assim! exceto que a EA não abre nenhuma ordem! não consegue entender o que está errado ...me diga se você sabe!!!
Quando você abre uma ordem pendente, estabelece um prazo de validade, digamos 23:59, a ordem fechará por si só.
nt OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
olá! problema com o código!! preciso das ordens para abrir uma a uma venda, baía, venda etc., mas a contagem foi feita durante o dia, no dia seguinte por uma nova, sem considerar a ordem de abertura de ordens do dia anterior! isso é um novo dia um novo ciclo! acima do código eu acho que deveria ser assim! exceto que a EA não abre nenhuma ordem! não consegue entender o que está errado ...me diga se você sabe!!!
E por que deveria abrir ordens, especialmente se a história está vazia. E aprender a inserir código humanamente, eu não gosto de editar os posts de outras pessoas.
Olá! Tenho uma pergunta a respeito dos indicadores na MQL4 e não consigo entendê-la completamente... Por exemplo, eu tenho um indicador fractal simples:
//+===========================================================================+ //| FRAC.mq4 | //+===========================================================================+ // Параметры: // // По умолчанию frac_5 - оранжевый, frac_3 - темно-синий. //----- // History - определяет на сколько глубоко в историю вам нужно отображение // индикатора (в количестве свечей). Минимальное значение = 2. //----- // frac_3 - если значение "on", то frac_3 отображается, иначе нет. //----- // frac_5 - если значение "on", то frac_5 отображается, иначе нет. //+===========================================================================+ #property indicator_chart_window #property indicator_buffers 4#property indicator_color1 MidnightBlue #property indicator_color2 MidnightBlue #property indicator_color3 Orange #property indicator_color4 Orange //----- externint history = 500;
externstring frac_3 = "on";
externstring frac_5 = "on";
externint metka = 20;
//----- double FRAC_3_POS[];
double FRAC_3_NEG[];
double FRAC_5_POS[];
double FRAC_5_NEG[];
//+===========================================================================+ int init()
{
SetIndexBuffer (0, FRAC_3_POS);
SetIndexStyle (0, DRAW_ARROW, 0, 3);
SetIndexArrow (0, 217);
//----- SetIndexBuffer (1, FRAC_3_NEG);
SetIndexStyle (1, DRAW_ARROW, 0, 3);
SetIndexArrow (1, 218);
//----- SetIndexBuffer (2, FRAC_5_POS);
SetIndexStyle (2, DRAW_ARROW, 0, 3);
SetIndexArrow (2, 217);
//----- SetIndexBuffer (3, FRAC_5_NEG);
SetIndexStyle (3, DRAW_ARROW, 0, 3);
SetIndexArrow (3, 218);
return(0);
}
//+===========================================================================+ int start()
{
int i,Counted_bars;
Counted_bars = IndicatorCounted();
i = Bars - Counted_bars - 1;
if (history < 2)
history = 2;
if (i > history - 1)
i = history - 1;
//i=Bars - 1;//----- if (Digits <= 3)
double K = 0.01;
else K = 0.0001;
while (i >= 0)
{
double FR_3P=0, FR_3N=0,
FR_5P=0, FR_5N=0;
//----- if (High[i+1] >= High[i+2] && High[i+1] >= High[i])
FR_3P = High[i+1] + metka*K;
//----- if (Low[i+1] <= Low[i+2] && Low[i+1] <= Low[i])
FR_3N = Low[i+1] - metka*K;
//----- if (High[i+2] >= High[i+4] && High[i+2] >= High[i+3] && High[i+2] >= High[i+1] && High[i+2] >= High[i])
FR_5P = High[i+2] + metka*K;
//----- if (Low[i+2] <= Low[i+4] && Low[i+2] <= Low[i+3] && Low[i+2] <= Low[i+1] && Low[i+2] <= Low[i])
FR_5N = Low[i+2] - metka*K;
//----- if (frac_3 != "on")
{
FR_3P = EMPTY;
FR_3N = EMPTY;
}
//----- if (frac_5 != "on")
{
FR_5P = EMPTY;
FR_5N = EMPTY;
}
//-----
FRAC_3_POS[i+1] = FR_3P;
FRAC_3_NEG[i+1] = FR_3N;
FRAC_5_POS[i+2] = FR_5P;
FRAC_5_NEG[i+2] = FR_5N;
i--;
}
return(0);
}
//+===========================================================================+
Se você compilá-lo nesta forma, ele começa a apresentar falhas ao estender a borda esquerda do gráfico e o histórico de carga e mostra marcas onde elas não deveriam estar (veja a captura de tela no anexo). Se comentarmos uma parte do código:
if (history < 2)
history = 2;
if (i > history - 1)
i = history - 1;
Depois estas falhas desaparecem... As mesmas falhas aparecem ao carregar o histórico, se você preencher apenas elementos "não vazios" da matriz de indicadores e não reinicializar o valor do indicador onde não há etiquetas...
Por que isso acontece? Por que, afinal de contas, é necessário recalcular todo o indicador ao carregar o histórico? E por que eu tenho que anular os valores dos elementos "vazios" da matriz?
Se as barras fossem indexadas da esquerda para a direita, ao carregar o histórico os índices das barras mudariam, e o indicador seria incorretamente exibido sem novo cálculo, então entenderíamos esta falha ... Mas no MT4 as barras são indexadas da direita para a esquerda, então, ao carregar o histórico, os índices das barras que estavam lá anteriormente deveriam ter permanecido os mesmos (e os valores do indicador também), então por que recalcular o indicador e de onde vêm essas mudanças de marcador?
Colegas, poderiam por favor responder a seguinte pergunta? Abro 4 ordens de compra à mão, executo um EA que apaga as ordens definidas ao preço de Licitação, o deslizamento é de 100 pips, eliminação em loop, verificação de ocupação da linha e atualizações de cotações estão presentes. Por que todas as ordens não são excluídas no loop? O log mostra que a exclusão leva algumas inicializações da função start()
int start()
{
Print("Пришёл новый тик");
int total=OrdersTotal();
Print("Всего ордеров = "+total);
for (int i=0;i<total;i++)
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
//Print("Всего ордеров = "+OrdersTotal());Print("удаляем ордер = "+i+" тикет ордера = "+OrderTicket());
while(IsTradeContextBusy())
{
Print("Торговый поток занят");
Sleep(100);
}
RefreshRates();
OrderClose(OrderTicket(),OrderLots(),Bid,100,0);
Print("ошибка="+GetLastError());
}
return(0);
}
aqui está o registro da EA:
17:16:59 temp EURUSD,M1: carregado com sucesso 17:17:51 temp EURUSD,M1: Chegou um novo tick 17:17:17:51 temp EURUSD,M1: Total de pedidos = 4 17:17:51 temp EURUSD,M1: eliminar pedido = 0 tick pedido = 2808657 17:17:17:52 temp EURUSD,M1: fechar #2808657 comprar 1.00 EURUSD a 1,28969 ao preço 1,28973 17:17:52 temp EURUSD,M1: erro=0 17:17:17:52 temp EURUSD,M1: remover pedido = 1 pedido de bilhete = 2808659 17:17:52 temp EURUSD,M1: fechar #2808659 comprar 1,00 EURUSD a 1,28974 ao preço 1.28975 17:17:52 temp EURUSD,M1: Erro=0 17:17:17:54 temp EURUSD,M1: Novo tick veio 17:17:17:54 temp EURUSD,M1: Total de pedidos = 2 17:17:54 temp EURUSD,M1: remover pedido = 0 tick pedido = 2808658 17:17:17:54 temp EURUSD,M1: fechar #2808658 comprar 1,00 EURUSD a 1,28969 pelo preço 1.28976 17:17:17:54 temp EURUSD,M1: Erro=0 17:17:17:56 temp EURUSD,M1: Novo tick veio 17:17:17:56 temp EURUSD,M1: Total de pedidos = 1 17:17:17:56 temp EURUSD,M1: remover pedido = 0 tick pedido = 2808660 17:17:17:56 temp EURUSD,M1: fechar #2808660 comprar 1.00 EURUSD a 1,28976 ao preço 1,28977 17:17:56 temp EURUSD,M1: erro=0
No tutorial MQL no capítulo Funções Padrão na seção Operações Gráficas há uma função WindowHandle com a seguinte descrição: "...retorna o descritor do sistema da janela (alça da janela) contendo o gráfico especificado".
Pergunta: o que significa "puxador de janela" (o que é) e para que serve?
P.S. A fim de não desorganizar o fórum, agradeço antecipadamente pela resposta
Resposta:
O descritor de janela é um número.
é necessário um descritor de janela para manipular uma janela
int start() { for (int i=OrdersHistoryTotal()-1;i>=0; i--) { if( OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (TimeDay (OrderOpenTime())==Day() && TimeMonth(OrderOpenTime())==Month() && TimeYear (OrderOpenTime())==Year()) if(OrderType()==OP_SELL && OrdersTotal()==0 || OrdersHistoryTotal()==0) { OrderSend( Symbol(), OP_BUY, 0.1, Ask, 5,Bid-25*Point,Bid+25*Point, "", 0, 0, Blue ); } if( OrderType()==OP_BUY && OrdersTotal()==0 || OrdersHistoryTotal()==0) { OrderSend( Symbol(), OP_SELL, 0.1, Bid, 5,Ask-25*Point,Ask+25*Point, "", 0, 0, Red ); } } } return(0); }olá! problema com o código!! preciso das ordens para abrir uma a uma venda, baía, venda etc., mas a contagem foi feita durante o dia, no dia seguinte por uma nova, sem considerar a ordem de abertura de ordens do dia anterior! isso é um novo dia um novo ciclo! acima do código eu acho que deveria ser assim! exceto que a EA não abre nenhuma ordem! não consegue entender o que está errado ...me diga se você sabe!!!
Quando você abre uma ordem pendente, estabelece um prazo de validade, digamos 23:59, a ordem fechará por si só.
nt OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
olá! problema com o código!! preciso das ordens para abrir uma a uma venda, baía, venda etc., mas a contagem foi feita durante o dia, no dia seguinte por uma nova, sem considerar a ordem de abertura de ordens do dia anterior! isso é um novo dia um novo ciclo! acima do código eu acho que deveria ser assim! exceto que a EA não abre nenhuma ordem! não consegue entender o que está errado ...me diga se você sabe!!!
E por que deveria abrir ordens, especialmente se a história está vazia. E aprender a inserir código humanamente, eu não gosto de editar os posts de outras pessoas.
Como adicionar a este assessor
//+------------------------------------------------------------------+
//| CCI.mq4 |
//| Copyright 2012, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#Copyright 2012, MetaQuotes Software Corp.
#link da propriedade "http://www.metaquotes.net"
LotTrend duplo externo = 0,1;
externo int TP=100;
externo int SL=250;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização de especialistas |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
se (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==Falso)
{
if (Licitação>iMA(Símbolo(),PERÍODO_M15,100,0,1,4,0)
)
{
OrderSend(Symbol(),OP_BUY,LotTrend,Ask,0,Ask-SL*Point,Ask+TP*Point,0,0,0,0,Green)
}
if (Bid<iMA(Symbol(),PERÍODO_M15,100,0,1,4,0)
)
{
OrderSend(Symbol(),OP_SELL,LotTrend,Bid,0,Bid+SL*Point,Bid-TP*Point,0,0,0,0,Green);
}
}
//----
retorno(0);
}
//+------------------------------------------------------------------+
1. abrir um comércio somente no fechamento de uma vela (quando o preço cruza SMA)
Se você compilá-lo nesta forma, ele começa a apresentar falhas ao estender a borda esquerda do gráfico e o histórico de carga e mostra marcas onde elas não deveriam estar (veja a captura de tela no anexo). Se comentarmos uma parte do código:
Depois estas falhas desaparecem... As mesmas falhas aparecem ao carregar o histórico, se você preencher apenas elementos "não vazios" da matriz de indicadores e não reinicializar o valor do indicador onde não há etiquetas...
Por que isso acontece? Por que, afinal de contas, é necessário recalcular todo o indicador ao carregar o histórico? E por que eu tenho que anular os valores dos elementos "vazios" da matriz?
Se as barras fossem indexadas da esquerda para a direita, ao carregar o histórico os índices das barras mudariam, e o indicador seria incorretamente exibido sem novo cálculo, então entenderíamos esta falha ... Mas no MT4 as barras são indexadas da direita para a esquerda, então, ao carregar o histórico, os índices das barras que estavam lá anteriormente deveriam ter permanecido os mesmos (e os valores do indicador também), então por que recalcular o indicador e de onde vêm essas mudanças de marcador?
Colegas, poderiam por favor responder a seguinte pergunta?
Abro 4 ordens de compra à mão, executo um EA que apaga as ordens definidas ao preço de Licitação, o deslizamento é de 100 pips, eliminação em loop, verificação de ocupação da linha e atualizações de cotações estão presentes. Por que todas as ordens não são excluídas no loop? O log mostra que a exclusão leva algumas inicializações da função start()
aqui está o registro da EA:
17:16:59 temp EURUSD,M1: carregado com sucesso
17:17:51 temp EURUSD,M1: Chegou um novo tick
17:17:17:51 temp EURUSD,M1: Total de pedidos = 4
17:17:51 temp EURUSD,M1: eliminar pedido = 0 tick pedido = 2808657
17:17:17:52 temp EURUSD,M1: fechar #2808657 comprar 1.00 EURUSD a 1,28969 ao preço 1,28973
17:17:52 temp EURUSD,M1: erro=0
17:17:17:52 temp EURUSD,M1: remover pedido = 1 pedido de bilhete = 2808659
17:17:52 temp EURUSD,M1: fechar #2808659 comprar 1,00 EURUSD a 1,28974 ao preço 1.28975
17:17:52 temp EURUSD,M1: Erro=0
17:17:17:54 temp EURUSD,M1: Novo tick veio
17:17:17:54 temp EURUSD,M1: Total de pedidos = 2
17:17:54 temp EURUSD,M1: remover pedido = 0 tick pedido = 2808658
17:17:17:54 temp EURUSD,M1: fechar #2808658 comprar 1,00 EURUSD a 1,28969 pelo preço 1.28976
17:17:17:54 temp EURUSD,M1: Erro=0
17:17:17:56 temp EURUSD,M1: Novo tick veio
17:17:17:56 temp EURUSD,M1: Total de pedidos = 1
17:17:17:56 temp EURUSD,M1: remover pedido = 0 tick pedido = 2808660
17:17:17:56 temp EURUSD,M1: fechar #2808660 comprar 1.00 EURUSD a 1,28976 ao preço 1,28977
17:17:56 temp EURUSD,M1: erro=0
Desdobrar o laço :