Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Hey mladen, mais uma pergunta:
Como posso verificar todas as ordens abertas, se seu lucro é inferior a -20 e fechá-las então?
Algo parecido com isto?
//int currentTicket;
for(int i0=OrdensTotal()-1; i0>=0; i0--) {
//currentTicket = OrderSelect(i0, SELECT_BY_POS, MODE_TRADES);
if(OrderProfit() <= -20) {
OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);
}
}arroganzmaschine
Sim, isso deve ser suficiente.
Você pode mudar apenas a linha onde você verifica o lucro para isto :
se ((OrderProfit()+OrderSwap()+OrderComission()) <= -20)
para ter certeza de que é um lucro "puro" que você está verificando
Tenho que fazer um Bid ou Ask at OrderClose? Ou a linha é correta?
Hm, há algo errado. O backtest não fecha as encomendas que estão em lucro negativo. No final do teste, há ordens abertas com -230 de lucro.
int start()
{
for(int i0=OrdensTotal()-1; i0>=0; i0--) {
if((OrderProfit()+OrderSwap()+OrderComission()) <= -20) {
OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);
}
}
}
Isto não funciona.
int start()
{
for(int i0=OrdensTotal()-1; i0>=0; i0--) {
if((OrderProfit()+OrderSwap()+OrderComission()) <= -20) {
OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);
}
}
}
Isto não funciona.Você esqueceu a OrderSelect() (você sempre tem que selecionar o pedido antes de fazer qualquer coisa com ele). Também seria uma boa idéia adicionar a parte que verifica que tipo de ordem você está tentando fechar
Algo parecido com isto :
if (OrderSelect(u0,SELECT_BY_POS,MODE_TRADES))
if((OrderProfit()+OrderSwap()+OrderCommission()) <= -20)
{
if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);
if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,0,CLR_NONE);
}
alguém poderia me ajudar na conversão do histograma em barras no indicador TrendHistogram? Eu gostaria de obter as mesmas barras que as do indicador TrendFilter em anexo
O TrendHistogram precisa do indicador EMA_Adaptativo para funcionar corretamente
alguém poderia me ajudar na conversão do histograma em barras no indicador TrendHistogram? Gostaria de obter as mesmas barras do indicador TrendFilter em anexo TrendHistogram precisa do indicador EMA_Adaptativo para funcionar corretamente
freakout
Aqui você vai
Coloque os DrawAsBars em realidade e ele desenhará da maneira que você descreveu. Se você deixar que esse parâmetro seja falso, ele funcionará como o original.
Hi,
Qualquer pessoa pode me ajudar a editar este código de teste de retorno é bom, mas a EA não trabalha em Demo / Real Account.
//+------------------------------------------------------------------+
//| Hans123Trader v1 |
//+------------------------------------------------------------------+
#incluir
#propriedade copyright "hans123"
#ligação de propriedade ""
// programado por fukinagashi
int int externo Início da sessão1=6;(durante o backtest eu edito e defino 0 para todas as sessões, obtendo assim resultados finais)
int exterior EndSession1=10;
int externo InícioSessão2=10;
int externo FimSessão2=14;
duplo TrailingStop externo = 0;
duplo TakeProfit externo = 452;
duplo Exterior InitialStopLoss=40;
duplo Lots = 0,1;
datatime bartime = 0;
duplo Slippage=3;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, err, i, j, cmd;
int MagicNumber;
duplo ts, tp, Preço mais baixo, Preço mais alto, Preço;
bool Ordem[5];
configuração de cordas;
data/hora Validade=0;
if(IsTesting() && Bars<100) retorno(0);
MagicNumber = 50000 + func_Symbol2Val(Symbol())*100;
setup="H123_" + Símbolo();
se (bartime == Tempo[0]) {
retorno(0);
} else {
bartime = Tempo[0];
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// MODIFICAÇÕES EM PEDIDOS ABERTOS ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(cnt=OrdensTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) {
if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {
Imprimir(".");
OrderClose(OrderTicket(), Lots, Bid, 3, Red);
if (err>1) { Print("Erro ao fechar pedido de compra [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (OrderStopLoss()==0) {
if (TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point;
} else { tp=0; }
if (InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point;
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White);
if (err>1) { Imprimir("Erro modificando pedido de compra [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (TrailingStop>0) {ts = Bid-Point*TrailingStop;
if (OrderStopLoss()0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
}
} else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4)) {
if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {
Imprimir(".");
OrderClose(OrderTicket(), Lots, Ask, 3, Red);
if (err>1) { Print("Error closing Sell order [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (OrderStopLoss()==0) {
if (TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point;
} else { tp=0; }
if (InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point;
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White);
if (err>1) { Imprimir("Erro modificando ordem de venda [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (TrailingStop>0) {ts = Ask+Point*TrailingStop;
if (OrderStopLoss()>ts && OrderProfit()>0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// DEFINIÇÃO DE PEDIDOS ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(AccountFreeMargin()<(1000*Lots)) retorno(0);
Validity=StrToTime(TimeYear(Time[0])) + "." + TimeMonth(Time[0]) + "." + TimeDay(Time[0]) + "." 23:59");
if (TimeHour(Time[0])==EndSession1 && TimeMinute(Time[0])==0) {
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];
Preço mais alto=Alto;
//// o seguinte é necessário, para evitar um preço BUYSTOP/SELLSTOP que está muito próximo de Bid/Ask,
//// neste caso, obtemos 130 paradas inválidas.
//// Eu experimentei mudar para OP_BUY e OP_SELL, mas os resultados não foram satisfatórios.
//if (Preço mais alto+5*Point<Ask+Spread*Point) {
//cmd=OP_BUY;
//Price=Ask;
//} else {/} else {
cmd=OP_BUYSTOP;
Preço=Preço mais alto+5*Ponto;
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green);
err = GetLastError();
if (err>1) { Imprimir("Erro modificando ordem de venda [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
//if (Preço mais baixo - 5*Ponto>Bid-Spread*Ponto) {
//cmd=OP_SELL;
//Price=Bid;
//} else {/} else {
cmd=OP_SELLSTOP;
Preço=Preço mais baixo - 5*Ponto;
//}
ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green);
err = GetLastError();
if (err>1) { Imprimir("Erro modificando ordem de venda [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
}
if (TimeHour(Time[0])==EndSession2 && TimeMinute(Time[0])==0) {
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];
Preço mais alto=Alto;
//if (Preço mais alto+5*Point<Ask+Spread*Point) {
//cmd=OP_BUY;
//Price=Ask;
//} else {/} else {
cmd=OP_BUYSTOP;
Preço=Preço mais alto+5*Ponto;
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green);
err = GetLastError();
if (err>1) { Imprimir("Erro modificando ordem de venda [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
//if (Preço mais baixo -5*Ponto>Bid-Spread*Ponto) {
//cmd=OP_SELL;
//Price=Bid;
//} else {/} else {
cmd=OP_SELLSTOP;
Preço=Preço mais baixo - 5*Ponto;
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green);
err = GetLastError();
if (err>1) { Imprimir("Erro modificando ordem de venda [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// DIVERSAS SUB-ROTINAS /////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int func_Symbol2Val(string symbol) {
if(symbol=="AUDUSD") {retorno(01);
} else if(symbol==="CHFJPY") {return(10);
} else if(symbol=="EURAUD") {return(10);
} else if(symbol=="EURCAD") {retorno(11);
} else if(symbol=="EURCHF") {return(12);
} else if(symbol=="EURGBP") {return(13);
} else if(symbol=="EURJPY") {return(14);
} else if(symbol=="EURUSDm") {return(15);
} else if(symbol==="GBPCHF") {return(20);
} else if(symbol=="GBPJPY") {return(21);
} else if(symbol=="GBPUSD") { return(22);
} else if(symbol=="USDCAD") {retorno(40);
} else if(symbol=="USDCHF") {retorno(41);
} else if(symbol=="USDJPY") {return(42);
} else if(symbol=="GOLD") {return(90);
} else {Comment("unexpected Symbol"); return(0);
}
}
int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) {
data/hora OldCurTime;
int timeout=30;
int ticket;
OldCurTime=CurTime();
while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) {
if(OldCurTime+timeout<=CurTime()) {
Imprimir("Erro no PedidoEnviadoExtendido(): Timeout encontrado");
retorno(0);
}
Sleep(1000);
}
GlobalVariableSet("InTrade", CurTime()); // definir indicador de bloqueio
bilhete = OrderSend(symbol, cmd, volume, preço, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
GlobalVariableDel("InTrade"); // indicador de bloqueio claro
retorno(bilhete);
}
Hi,
Qualquer pessoa pode me ajudar a editar este código de teste de retorno é bom, mas a EA não trabalha em Demo / Real Account.
//+------------------------------------------------------------------+
//| Hans123Trader v1 |
//+------------------------------------------------------------------+
#incluir
#propriedade copyright "hans123"
#ligação de propriedade ""
// programado por fukinagashi
int int externo Início da sessão1=6;(durante o backtest eu edito e defino 0 para todas as sessões, obtendo assim resultados finais)
int exterior EndSession1=10;
int externo InícioSessão2=10;
int externo FimSessão2=14;
duplo TrailingStop externo = 0;
duplo TakeProfit externo = 452;
duplo Exterior InitialStopLoss=40;
duplo Lots = 0,1;
datatime bartime = 0;
duplo Slippage=3;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, err, i, j, cmd;
int MagicNumber;
duplo ts, tp, Preço mais baixo, Preço mais alto, Preço;
bool Ordem[5];
configuração de cordas;
data/hora Validade=0;
if(IsTesting() && Bars<100) retorno(0);
MagicNumber = 50000 + func_Symbol2Val(Symbol())*100;
setup="H123_" + Símbolo();
se (bartime == Tempo[0]) {
retorno(0);
} else {
bartime = Tempo[0];
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// MODIFICAÇÕES EM PEDIDOS ABERTOS ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(cnt=OrdensTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) {
if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {
Imprimir(".");
OrderClose(OrderTicket(), Lots, Bid, 3, Red);
if (err>1) { Print("Erro ao fechar pedido de compra [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (OrderStopLoss()==0) {
if (TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point;
} else { tp=0; }
if (InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point;
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White);
if (err>1) { Imprimir("Erro modificando pedido de compra [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (TrailingStop>0) {ts = Bid-Point*TrailingStop;
if (OrderStopLoss()0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
}
} else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4)) {
if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {
Imprimir(".");
OrderClose(OrderTicket(), Lots, Ask, 3, Red);
if (err>1) { Print("Error closing Sell order [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (OrderStopLoss()==0) {
if (TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point;
} else { tp=0; }
if (InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point;
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White);
if (err>1) { Imprimir("Erro modificando ordem de venda [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (TrailingStop>0) {ts = Ask+Point*TrailingStop;
if (OrderStopLoss()>ts && OrderProfit()>0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// DEFINIÇÃO DE PEDIDOS ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(AccountFreeMargin()<(1000*Lots)) retorno(0);
Validity=StrToTime(TimeYear(Time[0])) + "." + TimeMonth(Time[0]) + "." + TimeDay(Time[0]) + "." 23:59");
if (TimeHour(Time[0])==EndSession1 && TimeMinute(Time[0])==0) {
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];
Preço mais alto=Alto;
//// o seguinte é necessário, para evitar um preço BUYSTOP/SELLSTOP que está muito próximo de Bid/Ask,
//// neste caso, obtemos 130 paradas inválidas.
//// Eu experimentei mudar para OP_BUY e OP_SELL, mas os resultados não foram satisfatórios.
//if (Preço mais alto+5*Point<Ask+Spread*Point) {
// cmd=OP_BUY;
// Preço=Ask;
//} else {/} else {/
cmd=OP_BUYSTOP;
Preço=Preço mais alto+5*Ponto;
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green);
err = GetLastError();
if (err>1) { Imprimir("Erro modificando ordem de venda [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
//if (Preço mais baixo - 5*Ponto>Bid-Spread*Ponto) {
// cmd=OP_SELL;
// Price=Bid;
//} else {/} else {
cmd=OP_SELLSTOP;
Preço=Preço mais baixo - 5*Ponto;
//}
ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green);
err = GetLastError();
if (err>1) { Imprimir("Erro modificando ordem de venda [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
}
if (TimeHour(Time[0])==EndSession2 && TimeMinute(Time[0])==0) {
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];
Preço mais alto=Alto;
//if (Preço mais alto+5*Point<Ask+Spread*Point) {
// cmd=OP_BUY;
// Preço=Ask;
//} else {/} else {/
cmd=OP_BUYSTOP;
Preço=Preço mais alto+5*Ponto;
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green);
err = GetLastError();
if (err>1) { Imprimir("Erro modificando ordem de venda [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
//if (Preço mais baixo -5*Ponto>Bid-Spread*Ponto) {
// cmd=OP_SELL;
// Price=Bid;
//} else {/} else {
cmd=OP_SELLSTOP;
Preço=Preço mais baixo - 5*Ponto;
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green);
err = GetLastError();
if (err>1) { Imprimir("Erro modificando ordem de venda [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// DIVERSAS SUB-ROTINAS /////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int func_Symbol2Val(string symbol) {
if(symbol=="AUDUSD") { return(01);
} else if(symbol=="CHFJPY") { return(10);
} else if(symbol=="EURAUD") { return(10);
} else if(symbol=="EURCAD") { return(11);
} else if(symbol=="EURCHF") { return(12);
} else if(symbol=="EURGBP") { return(13);
} else if(symbol=="EURJPY") { return(14);
} else if(symbol=="EURUSDm") { return(15);
} else if(symbol=="GBPCHF") { return(20);
} else if(symbol=="GBPJPY") { return(21);
} else if(symbol=="GBPUSD") { return(22);
} else if(symbol=="USDCAD") { return(40);
} else if(symbol=="USDCHF") { return(41);
} else if(symbol=="USDJPY") { return(42);
} else if(symbol=="GOLD") { return(90);
} else { Comment("unexpected Symbol"); return(0);
}
}
int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) {
data/hora OldCurTime;
int timeout=30;
int ticket;
OldCurTime=CurTime();
while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) {
if(OldCurTime+timeout<=CurTime()) {
Imprimir("Erro no PedidoEnviadoExtendido(): Timeout encontrado");
retorno(0);
}
Sleep(1000);
}
GlobalVariableSet("InTrade", CurTime()); // definir indicador de bloqueio
bilhete = OrderSend(symbol, cmd, volume, preço, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
GlobalVariableDel("InTrade"); // indicador de bloqueio claro
retorno(bilhete);
}Tente multiplicar o InitialStopLoss por 10 em uma conta ativa. Essa EA é escrita para corretores de 4 dígitos
______________________
PS : você também deve multiplicar o TakeProfit por 10 para ser consistente e ter isso como pips, mas se você o testou com esses números, você não obterá os mesmos resultados que nos testes anteriores (simplesmente porque o teste anterior permitiu que você usasse valores para aqueles dois que nem a conta demo nem a conta ativa lhe permitirão)
zigflipLast dois psar como em "último par de psar superior/inferior" ou "últimas 2 barras"?
Desculpe pelo atraso na resposta mladen, pensei que tinha uma assinatura por e-mail, mas...
Quero dizer, o último par de salmões!
Eu quero principalmente monitorar o último psar, mas quando ocorrer a mudança de cima para baixo precisaria dos dois últimos níveis, hmm talvez devessem ser x barras de volta... agh vejo o que você diz agora, em segundos pensamentos talvez o último conjunto de altos/baixos, que se apara para a última mudança na chegada do primeiro novo psar de direção!
Obrigado por sua ajuda nisto,