Sou novo na MQL4 e estou tentando obter o valor anterior da CCI. Tentei usar a função iCCI com um valor de Shift de 1, mas isso não me dá o valor anterior. Como eu faria isso sem salvar o valor atual para uma variável? Estou tentando determinar a direção que o CCI está tomando.
O código é baseado em tick, portanto, se não houver tick naquele momento, então o código perderá a verificação do tempo. Acho que não se pode chegar ao segundo exato sem algum tipo de loop que esteja funcionando de forma contente.
Seu problema está no tamanho de seu lote (volume) em seu pedido enviar statment. que retorna um -1 por causa do erro. o bilhete verificável não contém um número de bilhete que contém a bandeira de erro -1 que acionou os outros erros com a função ordermodify. Você deve corrigir a variável de tamanho de lote mylotsi, para conter um valor aceitável. segundo você deve verificar o valor de retorno na variável do bilhete para ver se ele não contém uma bandeira de erro antes de chamar a rotina de ordermodificação.
Vamos dizer que tenho alguns pedidos de compra e venda
O que eu quero fazer é :
- Sair de todos os negócios " Basket" a 5 pips a mais do que o preço do breakeven dos negócios abertos
O que estou tentando fazer no primeiro para loop é encontrar o valor de negócios abertos + trocar e convertê-lo em pips , e esta é a parte em que estou ficando preso
Tentei poucas idéias, mas cheguei a um beco sem saída, sei que o problema está na primeira afirmação, mas não consigo resolvê-lo, qualquer ajuda é altamente apropriada
SymbolPL = 0;
OrdLots = 0;
Equity = 0;
MinPro = 5;
for(i = 0; i < OrdersTotal(); i++)
{OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
Pergunta iCCI
Sou novo na MQL4 e estou tentando obter o valor anterior da CCI. Tentei usar a função iCCI com um valor de Shift de 1, mas isso não me dá o valor anterior. Como eu faria isso sem salvar o valor atual para uma variável? Estou tentando determinar a direção que o CCI está tomando.
Obrigado por sua ajuda.
O código é baseado em tick, portanto, se não houver tick naquele momento, então o código perderá a verificação do tempo. Acho que não se pode chegar ao segundo exato sem algum tipo de loop que esteja funcionando de forma contente.
Ajuda com a edição da EA
Estou tentando descobrir isso... você pode, por favor, ajudar?
MB Trading - Opções de Ações Negociação de Futuros Forex com Desconto Online
Eu mudei isto:
OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,sl,tp, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);
return(0);
Para:
int ticket = OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,0,0, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);
Sleep(1500);
OrderModify(ticket,OrderOpenPrice(),sl sl,tp,0,ArrowsColor);
=================================== ======
Estou recebendo estes erros:
2009.02.28 17:32:59 2009.01.01 20:42 AUDJPY,H1: bilhete inválido para a função OrderModify
2009.02.28 17:32:59 2009.01.01 20:42 AUDJPY,H1: OrderSend error 131
2009.02.28 17:32:59 2009.01.01.01 20:42 AUDJPY,H1: OrderModify error 4051
=====================
Estou tentando descobrir isso... você pode, por favor, ajudar?
MB Trading - Opções sobre Ações Negociação de Futuros Forex com Desconto Online
Eu mudei isto:
OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,sl,tp, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);
return(0);
Para:
int ticket = OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,0,0, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);
Sleep(1500);
OrderModify(ticket,OrderOpenPrice(),sl sl,tp,0,ArrowsColor);
=================================== ======
Estou recebendo estes erros:
2009.02.28 17:32:59 2009.01.01 20:42 AUDJPY,H1: bilhete inválido para a função OrderModify
2009.02.28 17:32:59 2009.01.01 20:42 AUDJPY,H1: OrderSend error 131
2009.02.28 17:32:59 2009.01.01.01 20:42 AUDJPY,H1: OrderModify error 4051
=====================Seu problema está no tamanho de seu lote (volume) em seu pedido enviar statment. que retorna um -1 por causa do erro. o bilhete verificável não contém um número de bilhete que contém a bandeira de erro -1 que acionou os outros erros com a função ordermodify. Você deve corrigir a variável de tamanho de lote mylotsi, para conter um valor aceitável. segundo você deve verificar o valor de retorno na variável do bilhete para ver se ele não contém uma bandeira de erro antes de chamar a rotina de ordermodificação.
keit
Posição máxima da EA
qualquer um pode adicionar posições máximas para este EA
ou deixá-lo correr apenas uma posição ?
agradecimentos antecipados
É melhor usar
MathAbs(NormalizeDouble(Bid,4)-NormalizeDouble(pivot,4))<Delta*Point,
Onde Delta=2...5
Alguém poderia me dizer o código para parar a perda e o CP. Preciso adicioná-lo a este EA.
este SL e TP escondidos
int TakeProfit=20; // 20 pips take profit
int StopLoss =40; // 40 pips stoploss
int Slippage = 3;
int MagicNumber=1;
int i;
int start(){
//----- exit @ TP
if((ScanTrades()>=1)&& (ProfitInPips()>=TakeProfit)){
//----- This part will close all open orders and delete pending trades
for(i = OrdersTotal()-1; i >=0; i--)
{ OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )
{
if (OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Plum);
if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Plum);
if (OrderType() == OP_SELLLIMIT) OrderDelete(OrderTicket());
if (OrderType() == OP_BUYLIMIT) OrderDelete(OrderTicket());
if (OrderType() == OP_BUYSTOP) OrderDelete(OrderTicket());
if (OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket());
}
}
}
//------exit @ SL
if((ScanTrades()>=1)&& (ProfitInPips()<= -StopLoss)){
//----- This part will close all open orders and delete pending trades
for(i = OrdersTotal()-1; i >=0; i--)
{ OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )
{
if (OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Plum);
if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Plum);
if (OrderType() == OP_SELLLIMIT) OrderDelete(OrderTicket());
if (OrderType() == OP_BUYLIMIT) OrderDelete(OrderTicket());
if (OrderType() == OP_BUYSTOP) OrderDelete(OrderTicket());
if (OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket());
}
}
}
return (0);
}
//----------- Call functions
int ScanTrades()
{
int Tot = OrdersTotal();
int Numb = 0;
for(int cnt=0; cnt<=Tot-1; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) Numb++;
}
return(Numb);
}
double ProfitInPips()
{
RefreshRates();
double Prof=0;
int i;
int totalOrders=OrdersTotal();
for(i=0;i<totalOrders;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()==MagicNumber)
{
if(OrderType()==0)
{
Prof+=(MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);
}
if(OrderType()==1)
{
Prof+=(OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))/MarketInfo(OrderSymbol(),MODE_POINT);
}
}
}
return(Prof);
}
Vamos dizer que tenho alguns pedidos de compra e venda
O que eu quero fazer é :
- Sair de todos os negócios " Basket" a 5 pips a mais do que o preço do breakeven dos negócios abertos
O que estou tentando fazer no primeiro para loop é encontrar o valor de negócios abertos + trocar e convertê-lo em pips , e esta é a parte em que estou ficando preso
Tentei poucas idéias, mas cheguei a um beco sem saída, sei que o problema está na primeira afirmação, mas não consigo resolvê-lo, qualquer ajuda é altamente apropriada
SymbolPL = 0;
OrdLots = 0;
Equity = 0;
MinPro = 5;
for(i = 0; i < OrdersTotal(); i++)
{OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{if(OrderType() == OP_BUY) OrdLots += OrderLots();
if(OrderType() == OP_SELL) OrdLots -= OrderLots();
Equity += OrderProfit() + OrderSwap();
}
}
MinPro= MathRound (MathAbs(Equity /OrdLots)+MinPro);
//--- Count the open trades
int i;
int count=0;
for(i=0;i<OrdersTotal();i++)
{ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()==MagicNumber && OrderType()<2)
{ count++;
}
}
//--- find the profit in pips of the open trades
RefreshRates();
double profits=0,openPrice=0,points=0;
string sym="";
int i;
int totalOrders=OrdersTotal();
for(i=0;i<totalOrders;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()==MagicNumber)
{
sym=OrderSymbol();
openPrice=OrderOpenPrice();
if(OrderType()==0)
{
profits+=(MarketInfo(sym,MODE_BID)-openPrice)/MarketInfo(sym,MODE_POINT);
}
if(OrderType()==1)
{
profits+=(OrderOpenPrice()-MarketInfo(sym,MODE_ASK))/MarketInfo(sym,MODE_POINT);
}
}
}
//--- Close when the open trades are 5 pips more than the breakeven price
if (count>1 && profits>MinPro )
{
for(i = OrdersTotal()-1; i >=0; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Plum);
}
}
}
Acho que você pode usar uma constante "equity_per_lotpoint", que seria computada como:
[/PHP]
and then you'd have what you need after the first loop, with:
[PHP]if ( Equity > 5 * equity_per_lotpoint * MathAbs( OrdLots ) ) { ...
Obrigado Ralph, mas eu estaria perdendo a troca, e quero incluir o lucro/perda da troca no fechamento da decisão de compra.