[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 397
Funcionou! Honestamente, eu tive esta idéia de substituir OR por AND...., mas ... :)))))))))))))))))))))
obrigado ! agora entendo a lógica, embora para contar 15 fechados, terei que soprar o código até o tamanho de um balão!
Tudo isso pode ser espremido em um loop ? e apenas substituir o parâmetro do número de N ofícios necessários ?
Esta é uma das formas possíveis de buscar N pedidos mais recentemente fechados, e os pedidos procurados podem ser filtrados por tipo (COMPRAR, VENDER) e lucratividade (com prejuízo, lucrativo):
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+//| Автор : TarasBY, taras_bulba@tut.by |//+-----------------------------------------------------------------------------------+//| Функция получает Ticket следующего перед fdt_Time закрытого ордера |//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+int fGet_TicketLastClosePos (int fi_Type = -2, // OrderType()int fi_TypeProfit = 0, // флаг профитности ордеров: 0 - все, -1 - убыточные, 1 - прибыльныеdatetime fdt_Time = 0) // Точка отсчёта времени
{
datetime ldt_CloseTime = 0, ldt_LastTime = 0;
double ld_Profit = 0.;
int li_Ticket = 0, li_Total = OrdersHistoryTotal();
//----for (int li_ORD = li_Total - 1; li_ORD >= 0; li_ORD--)
{
//if (!fCheck_MyOrders (li_ORD, fi_Type, MODE_HISTORY)) continue;
// Здесь прописываете свою фильтрацию ордеров
ldt_CloseTime = OrderCloseTime();
//---- Пропускаем ордера, закрытые после указанной датыif (fdt_Time != 0) if (fdt_Time <= ldt_CloseTime) continue;
if (ldt_LastTime >= ldt_CloseTime) continue;
ld_Profit = OrderProfit();
//---- Фильтруем ордера по профитностиif (fi_TypeProfit > 0) if (ld_Profit < 0.) continue;
if (fi_TypeProfit < 0) if (ld_Profit > 0.) continue;
ldt_LastTime = ldt_CloseTime;
li_Ticket = OrderTicket();
}
//----return (li_Ticket);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+//| Автор : TarasBY, taras_bulba@tut.by |//+-----------------------------------------------------------------------------------+//| Функция получает Tickets N закрытых ордеров |//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+int fGet_TicketsLastCloseOrd (int fi_NUM, // Количество искомых тикетовint& ar_Tickets[], // возвращаемый массив с тикетамиint fi_Type = -2, // OrderType()int fi_TypeProfit = 0) // флаг профитности ордеров: 0 - все, -1 - убыточные, 1 - прибыльные
{
int li_cnt = 0, li_Ticket;
datetime ldt_Time = 0;
//----for (int li_IND = 0; li_IND < fi_NUM; li_IND++)
{
li_Ticket = fGet_TicketLastClosePos (fi_Type, fi_TypeProfit, ldt_Time);
if (li_Ticket > 0)
{
li_cnt++;
ArrayResize (ar_Tickets, li_cnt);
ar_Tickets[li_cnt-1] = li_Ticket;
OrderSelect (li_Ticket, SELECT_BY_TICKET);
ldt_Time = OrderCloseTime();
}
elsebreak;
}
//----return (li_cnt);
}
Após a função fGet_TicketsLastCloseOrd() ser chamada e retornar a quantidade de bilhetes encontrados de acordo com os parâmetros especificados, você pode (eu o faria) verificar com a quantidade especificada de bilhetes (fi_NUM) e o valor retornado pela função. Todos os bilhetes coletados estarão na matriz passada para a função por referência.
E nesta variante não é importante, quantos destes últimos bilhetes são pesquisados. :)
E se você precisar lucrar com estas últimas encomendas fechadas, é ainda mais fácil:
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+//| Автор : TarasBY, taras_bulba@tut.by |//+-----------------------------------------------------------------------------------+//| Функция получает Profit N последних закрытых ордеров |//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+double fGet_ProfitLastCloseOrd (int fi_NUM, // Количество просчитываемых ордеровint fi_Type = -2) // OrderType()
{
int li_Ticket;
double ld_Profit = 0.;
datetime ldt_Time = 0;
//----for (int li_IND = 0; li_IND < fi_NUM; li_IND++)
{
li_Ticket = fGet_TicketLastClosePos (fi_Type, 0, ldt_Time);
if (li_Ticket > 0)
{
OrderSelect (li_Ticket, SELECT_BY_TICKET);
ldt_Time = OrderCloseTime();
ld_Profit += (OrderProfit() + OrderSwap() + OrderCommission());
}
elsebreak;
}
//----return (ld_Profit);
}
Esta é uma das formas possíveis de procurar N tickets das últimas encomendas fechadas, e você pode filtrar as encomendas por tipo (COMPRAR, VENDER) e lucratividade (com prejuízo, lucrativo):
Após a função fGet_TicketsLastCloseOrd() ser chamada e retornar a quantidade de bilhetes encontrados de acordo com os parâmetros especificados, você pode (eu o faria) verificar com a quantidade especificada de bilhetes (fi_NUM) e o valor retornado pela função. Todos os bilhetes coletados estarão na matriz passada para a função por referência.
E nesta variante não é importante, quantos destes últimos bilhetes são pesquisados. :)
E se você precisar lucrar com estas últimas encomendas fechadas, é ainda mais fácil:
Muito obrigado. Vou fazer uma pausa, preciso descobrir o que é o que...
Olá, ajude-me a resolver este problema: quero um indicador para exibir o eurobucks, o índice do dólar e o índice do euro, mas seus valores são diferentes por vários pedidos. Como posso levá-los aos valores da mesma ordem? Basta adicionar multiplicadores - acho que não se adequa ao meu gosto...
tommy27: Olá, ajude-me a resolver este problema: quero um indicador para exibir o eurobucks, o índice do dólar e o índice do euro, mas seus valores são diferentes por vários pedidos. Como posso levá-los aos valores da mesma ordem? Acho que não é viável adicionar multiplicadores...
Ajustar os valores mínimo e máximo de todos os indicadores para os mesmos
Bom dia para vocês, meu conselho a um profissional: escrevi um indicador que sinaliza que quero usar em minha EA. Qual funcionará mais rápido, a função de indicador ou o indicador transferido?
Zhunko: Se isso acontecer, não acontecerá logo, talvez nunca.
Obrigado pela resposta.
Mas há muito tempo venho usando a mesma comparação suspeita em outro código.
E funciona com sucesso.
int start()
{
double Price=iOpen (Symbol (),0,0); int last_order_bar = 0;
int ot = OrdersTotal();
if (ot>0) //если есть ордера в рынке
{
if (OrderSelect (ot-1,SELECT_BY_POS))
if (OrderType ()==OP_BUY || OrderType ()==OP_SELL )
last_order_bar = iBarShift (Symbol (),0,OrderOpenTime ());
}
int last_hist_order_bar = 0;
int oht = OrdersHistoryTotal();
if (oht>0)
{
if (OrderSelect (oht-1,SELECT_BY_POS, MODE_HISTORY))
if (OrderType ()==OP_BUY || OrderType ()==OP_SELL)
last_hist_order_bar = iBarShift (Symbol (),0,OrderOpenTime ());
}
if (ot==0 || last_order_bar>0) if (oht==0 || last_hist_order_bar>0)
//===============================================================if(Bid==Price)if((Minute( ) ==45)&&(Minute( ) <50))
int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-1500*Point,Bid+150*Point,"jfh",123 );
}
return;
Não entendo porque esta condição não funciona no último caso. Não vejo nenhuma diferença fundamental entre estes códigos.
Funcionou! Honestamente, eu tive esta idéia de substituir OR por AND...., mas ... :)))))))))))))))))))))
obrigado ! agora entendo a lógica, embora para contar 15 fechados, terei que soprar o código até o tamanho de um balão!
Tudo isso pode ser espremido em um loop ? e apenas substituir o parâmetro do número de N ofícios necessários ?
Esta é uma das formas possíveis de buscar N pedidos mais recentemente fechados, e os pedidos procurados podem ser filtrados por tipo (COMPRAR, VENDER) e lucratividade (com prejuízo, lucrativo):
Após a função fGet_TicketsLastCloseOrd() ser chamada e retornar a quantidade de bilhetes encontrados de acordo com os parâmetros especificados, você pode (eu o faria) verificar com a quantidade especificada de bilhetes (fi_NUM) e o valor retornado pela função. Todos os bilhetes coletados estarão na matriz passada para a função por referência.
E nesta variante não é importante, quantos destes últimos bilhetes são pesquisados. :)
E se você precisar lucrar com estas últimas encomendas fechadas, é ainda mais fácil:
Esta é uma das formas possíveis de procurar N tickets das últimas encomendas fechadas, e você pode filtrar as encomendas por tipo (COMPRAR, VENDER) e lucratividade (com prejuízo, lucrativo):
Após a função fGet_TicketsLastCloseOrd() ser chamada e retornar a quantidade de bilhetes encontrados de acordo com os parâmetros especificados, você pode (eu o faria) verificar com a quantidade especificada de bilhetes (fi_NUM) e o valor retornado pela função. Todos os bilhetes coletados estarão na matriz passada para a função por referência.
E nesta variante não é importante, quantos destes últimos bilhetes são pesquisados. :)
E se você precisar lucrar com estas últimas encomendas fechadas, é ainda mais fácil:
Muito obrigado. Vou fazer uma pausa, preciso descobrir o que é o que...
Olá, ajude-me a resolver este problema: quero um indicador para exibir o eurobucks, o índice do dólar e o índice do euro, mas seus valores são diferentes por vários pedidos. Como posso levá-los aos valores da mesma ordem? Acho que não é viável adicionar multiplicadores...
Ajustar os valores mínimo e máximo de todos os indicadores para os mesmos
Bom dia para vocês, meu conselho a um profissional: escrevi um indicador que sinaliza que quero usar em minha EA. Qual funcionará mais rápido, a função de indicador ou o indicador transferido?
Obrigado
definir mínimos e máximos para todos os indicadores para os mesmos
Quais... Quero que tudo isso seja mostrado por um indicador para 3 amortecedores de linha adutora.
tommy27:
Como você os leva aos valores da mesma ordem?
a escala deve ser a mesma
Sim, e para fazer isso, faz sentido converter os três valores tampão antes de exibi-los desta forma:
Xn=(X-Xmin)/(Xmax-Xmin)
Se você fizer isso sem rodeios, você obtém algo que se parece com uma linha horizontal.
Bem, se você usar a escalada da MQ, você está pronto para ir.
Se isso acontecer, não acontecerá logo, talvez nunca.
Obrigado pela resposta.
Mas há muito tempo venho usando a mesma comparação suspeita em outro código.
E funciona com sucesso.
Não entendo porque esta condição não funciona no último caso. Não vejo nenhuma diferença fundamental entre estes códigos.