[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 591
para (int i=0; i<OrdersHistoryTotal(); i++)// Para todas as encomendas if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==verdadeiro)
depois filtrar por número mágico
se (OrderMagicNumber()==12)
O filtro satisfaz 3 posições, mas preciso apenas da última fechada
não consegue descobrir como deixar apenas o último?
Obrigado
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает номер бара закрытия последней позиции или -1. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
datetime t;int i, k=OrdersHistoryTotal();
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) t=OrderCloseTime();
}
}
}
}
}
}
return(iBarShift(sy, tf, t, True));
}
Pessoal, aqui vai uma pergunta, um EA tenta abrir um pedido, mas o preço muda e exibe um preço errado, como posso contorná-lo, então ele tenta comprar até comprar?
void CLOSEORDER(string ord)
{
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUY && ord=="Buy")
OrderClose(OrderTicket(),OrderLots(),Bid,30,CLR_NONE);// Закрываем Buyif (OrderType()==OP_SELL && ord=="Sell")
OrderClose(OrderTicket(),OrderLots(),Ask,30,CLR_NONE);// Закрываем Sell
}
}
}
//--------------------------------------------------------------------void OPENORDER(string ord)
{
int error;
if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, LOT,Ask,20,SL,TP,"", 1,3);
if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,LOT,Bid,20,SL,TP,"",-1,3);
if (error==-1) //неудачная покупка OK
{
ShowERROR(error,0,0);
}
Costumava ser.
Bid,3,CLR_NONE
Acrescentei 30 porque tenho um sinal de 5, mas é inútil.
Ainda há mais um incômodo, há seções onde há apenas um fechamento de uma posição e não uma inversão, embora as condições para uma parada e abertura de uma nova posição sejam as mesmas.
Estas situações podem ocorrer porque as condições de compra e venda no Expert Advisor não são mutuamente exclusivas. Tente rastrear os valores das variáveis requeridas no testador de acordo com
if(Time[0]=='время_нужного_бара') //чтоб не засорять логи берем на конкретном баре - посмотрите на картинке, где именно ошибка
{
Print("переменная=", значение);
}
Pessoal, aqui vai uma pergunta, um EA tenta abrir um pedido, mas o preço muda e exibe um preço errado, como posso contorná-lo, então ele tenta comprar até comprar?
Costumava ser.
Acrescentei 30 porque tenho um sinal de 5, mas é inútil.
Faça um pedido enquanto(true), verifique 135 erros e depois RefreshRates(). Veja, há scripts com exemplos no pacote com o terminal, tudo é explicado lá.
Isto precisa ser investigado em detalhes, tais situações podem surgir porque as condições de abertura de compra e venda na EA não são mutuamente exclusivas. Tente rastrear os valores das variáveis requeridas no testador de acordo com as linhas de
OK, em que parte do código deve ser inserida, como aplicar na prática?
SergNF: O que é relevante para sua pergunta é sublinhado.
então seleciono a última ordem fechada e preciso da última fechada com o mágico, por exemplo, são as linhas 3,6 e 9, portanto preciso da linha 3, pois é a última fechada com o mágico
Ajude-me a resolver um problema
Eu recolho amostras de todos os itens fechados
para (int i=0; i<OrdersHistoryTotal(); i++)// Para todas as encomendas
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==verdadeiro)
depois filtrar por número mágico
se (OrderMagicNumber()==12)
O filtro satisfaz 3 posições, mas preciso apenas da última fechada
não consegue descobrir como deixar apenas o último?
Obrigado
Mais uma vez, muito necessário.
Ajude-me a resolver o problema.
Estou selecionando por todas as posições fechadas
para (int i=0; i<OrdersHistoryTotal(); i++)// em todas as ordens do terminal
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)===verdadeiro)
depois filtrar por número mágico
se (OrderMagicNumber()==12)
o filtro corresponde a 3 posições, mas só preciso da última fechada
Não consegue descobrir como deixar apenas o último?
Obrigado
Por favor, ajude! Preciso dele para abrir o pedido imediatamente após fechar o antigo, a preço de Tp ou SL.
#direitos autorais "Copyright © 2010, MetaQuotes Software Corp.
#link da propriedade "http://www.metaquotes.net"
#property show_confirmar
externo int MaxRisk=3;
bool externo Comprar=falso; // para abrir um pedido de compra
bool externo Sell=true; // para abrir uma ordem de venda.
número mágico externo interno=7749;
TP externo=210;
externo inttern SL=420;
{
double point=MarketInfo(Symbol(),MODE_POINT);//ponto de solicitação
duplo Free=AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
lote duplo =MathFloor(Livre*MaxRisk/100/One_Lot/Step)*Step;
int pos,total=OrdensTotal();
//----
if(Buy===true && OrderTotal()<=1)
{
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-SL*Point,Ask+TP*Point, "777"+ Symbol(), MagicNumber, 0, DarkGreen);
Comprar=falso;
}
if(Sell===true && OrderTotal()<=1)
{
OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+SL*Point,Bid-TP*Point, "4949"+ Symbol(), MagicNumber, 0, DarkGreen);
Sell=false;
}
para (pos=0; pos<total; pos+++)
if(OrderSelect(pos,SELECT_BY_POS )==verdadeiro)
if(OrdersTotal()==OP_BUY)
if(PRICE_CLOSE==OrderTakeProfit()) Buy=true;
if(PRICE_CLOSE===OrderStopLoss()) Sell=true;
}
}
if(OrderSelect(pos,SELECT_BY_POS )==verdadeiro)
se (OrderTotal()==OP_SELL)
{
if(PRICE_CLOSE==OrderStopLoss()) Buy=true;
if(PRICE_CLOSE===OrderTakeProfit()) Sell=true;
}
} }
//----
retorno(0);
}
//+------------------------------------------------------------------+
Pessoal, aqui vai uma pergunta, um EA tenta abrir um pedido, mas o preço muda e exibe um preço errado, como posso contorná-lo, então ele tenta comprar até comprar?
Costumava ser.
Acrescentei 30 porque tenho um sinal de 5, mas é inútil.
Mais uma vez, muito necessário.
Ajude-me a resolver o problema.
Estou recolhendo amostras de todos os itens fechados.
Comece no final, depois o primeiro a combinar é o primeiro.
for (int i=OrdersHistoryTotal()-1;i>=0; i--)//
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==verdadeiro)
Ainda há mais um incômodo, há seções onde há apenas um fechamento de uma posição e não uma inversão, embora as condições para uma parada e abertura de uma nova posição sejam as mesmas.
Estas situações podem ocorrer porque as condições de compra e venda no Expert Advisor não são mutuamente exclusivas. Tente rastrear os valores das variáveis requeridas no testador de acordo com
if(Time[0]=='время_нужного_бара') //чтоб не засорять логи берем на конкретном баре - посмотрите на картинке, где именно ошибка { Print("переменная=", значение); }Pessoal, aqui vai uma pergunta, um EA tenta abrir um pedido, mas o preço muda e exibe um preço errado, como posso contorná-lo, então ele tenta comprar até comprar?
Costumava ser.
Acrescentei 30 porque tenho um sinal de 5, mas é inútil.
Isto precisa ser investigado em detalhes, tais situações podem surgir porque as condições de abertura de compra e venda na EA não são mutuamente exclusivas. Tente rastrear os valores das variáveis requeridas no testador de acordo com as linhas de
O que é relevante para sua pergunta é sublinhado.