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
Classificei uma solução para o filtro de tempo Fechar tudo
Variáveis externas
extern string timefilter="Time Filter";
extern int gmtshift=1; // gmt offset of the broker
extern bool generalfilter=false; // enable time filter
extern int starthour=7; // start hour to trade after this hour
extern int startminutes=0; // minutes of the start hour
extern int endhour=21; // stop to trade after this hour
extern int endminutes=0; // minutes of the start hour
extern bool tradesunday=true; // trade on sunday
extern bool fridayfilter=false; // enable special time filter on friday
extern int fridayhour=21; // stop to trade after this hour
extern int fridayminutes=0; // minutes of the friday hour
[/CODE]
string istarthour,istartminutes,iendhour,iendminutes,ifridayhour,ifridayminutes;
datetime tstart,tend,tfriday;[/CODE]
Place Code in Start,
[CODE] if(generalfilter){
nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24;
if(nstarthour<10)istarthour="0"+nstarthour;
if(nstarthour>9)istarthour=nstarthour;
if(startminutes<10)istartminutes="0"+startminutes;
if(startminutes>9)istartminutes=startminutes;
tstart=StrToTime(istarthour+":"+istartminutes);
nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24;
if(endhour<10)iendhour="0"+nendhour;
if(endhour>9)iendhour=nendhour;
if(endminutes<10)iendminutes="0"+endminutes;
if(endminutes>9)iendminutes=endminutes;
tend=StrToTime(iendhour+":"+iendminutes);
}
if(fridayfilter){
nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24;
if(nfridayhour<10)ifridayhour="0"+nfridayhour;
if(nfridayhour>9)ifridayhour=nfridayhour;
if(fridayminutes<10)ifridayminutes="0"+fridayminutes;
if(fridayminutes>9)ifridayminutes=fridayminutes;
tfriday=StrToTime(ifridayhour+":"+ifridayminutes);
}
if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))
|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))
{
CloseAll();
Comment("Non-trading Hours All Positions Closed");
return(0);
}and the CloseAll function.
[CODE]
void CloseAll(){
int total = OrdersTotal();
for(int i=total-1;i>=0;i--){
OrderSelect(i, SELECT_BY_POS);
int type = OrderType();
bool result = false;
switch(type){
//Close opened long positions
case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Lime); break;
//Close opened short positions
case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, LightGreen );
} if(result == false){
Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
Sleep(3000);
}
}
return(0);
}
obrigado pelas dicas e dicas Kalenzo
StopLoss
Gidday
Tenho tentado um experimento para calcular um SL com base no valor do tick a max dd e porcentagem por comércio.
double lotSize = NormalizeDouble(Kellylot(),2);
double Pip = Point;
if(Digits==3 || Digits==5) Pip = 10*Point;
double Bal = AccountBalance(); // $1000
double TV = MarketInfo(Symbol(), MODE_TICKVALUE); // $1
double Risk = 2; // 2%
double MaxDD = 10; // 10%
double RiskCapital = Bal*MaxDD/100; // Total Exposure 10% of $1000 = $100
double RPT = Bal*Risk/100; // 2% of $1000 = $20
double stopLoss = NormalizeDouble(RPT/TV*lotSize/Pip,Digits); //$20/1*0.01/10 = 0.02000
double Positions = MathAbs(RiskCapital/RPT); // Maximum 5 positions 100 / 20
A idéia é que, dependendo do par e dos pares, o valor do tick individual e o tamanho do lote pode ser definido.
Acho que está certo, mas gostaria que alguém o verificasse, se possível.
Gidday
Tenho tentado um experimento para calcular um SL com base no valor do tick a max dd e porcentagem por comércio.
double lotSize = NormalizeDouble(Kellylot(),2);
double Pip = Point;
if(Digits==3 || Digits==5) Pip = 10*Point;
double Bal = AccountBalance(); // $1000
double TV = MarketInfo(Symbol(), MODE_TICKVALUE); // $1
double Risk = 2; // 2%
double MaxDD = 10; // 10%
double RiskCapital = Bal*MaxDD/100; // Total Exposure 10% of $1000 = $100
double RPT = Bal*Risk/100; // 2% of $1000 = $20
double stopLoss = NormalizeDouble(RPT/TV*lotSize/Pip,Digits); //$20/1*0.01/10 = 0.02000
double Positions = MathAbs(RiskCapital/RPT); // Maximum 5 positions 100 / 20
A idéia é que, dependendo do par e dos pares, o valor do tick individual e o tamanho do lote pode ser definido.
Acho que é um direito, mas gostaria que alguém o verificasse, se possível.Bom trabalho, Beno,
É sempre melhor dar cana de pesca do que peixe. Estou muito feliz por poder ajudá-los com alguns comentários.
Quanto à parada de perda, a idéia é boa, mas tente também considerá-la de forma inversa:
primeira parada de perda definida
segundo tamanho comercial definido
Desta forma, você ajustará a entrada/saída do sistema às condições do mercado, e não arriscará mais do que X% de sua conta, mas a saída dependerá da lógica do sistema em vez do percentual de risco.
Bom trabalho Beno,
É sempre melhor dar cana de pesca do que peixe. Estou muito feliz por poder ajudá-los com alguns comentários.
Quanto à parada de perda, a idéia é boa, mas tente também considerá-la de forma inversa:
primeira parada de perda definida
segundo tamanho comercial definido
Desta forma, você ajustará a entrada/saída do sistema às condições do mercado, e não arriscará mais do que X% de sua conta, mas a saída dependerá da lógica do sistema em vez do percentual de risco.Gidday Kalenzo
Estou recebendo um pedido de VENDA de abertura de erro: paradas inválidas com a EA estão na conta demo e ao vivo e nenhuma negociação está abrindo. mas funciona bem com o testador e não tem mensagens de erro.
EURUSD,Daily: modificar #1 comprar 0.01 EURUSD a 1.43348 sl: 1.43895 tp: 0.00000 ok
A diferença de pontos SL 0,00547
Eu verifiquei o
MODE_FREEZELEVEL 0.0000
MODE_STOPLEVEL 0.0000
double Bal = AccountFreeMargin();
double TV = MarketInfo(Symbol(), MODE_TICKVALUE);
double Risk = 0.3;
double MaxDD = 10;
double RiskCapital = Bal*MaxDD/100;
double RPT = Bal*Risk/100;
double stopLoss = NormalizeDouble((RPT/TV)*lotSize/pips2dbl,Digits);
double Positions = MathAbs(RiskCapital/RPT);
double SL;
//---- sell conditions
if(sellsig && ttime!=Time[0]){
double bid = NormalizeDouble(Bid, Digits);
SL = NormalizeDouble(Bid + stopLoss * pips2dbl, Digits);
res=OrderSend(symbol,OP_SELL,lotSize,bid,slippage * pips2dbl,SL,0,"Pivot_Sell",SpecificMagic,0,Red);
if( res<0 )
{
Print("Error opening SELL order : ",ErrorDescription(GetLastError()));
Print("Bid=" + DoubleToStr(bid,Digits) + " : SL=" + DoubleToStr(SL,Digits));
res=0;
}
else //now enter in the SL and TP via OrderModify to make compatible with ECN broker
{
if (OrderSelect(res, SELECT_BY_TICKET))
{
if (!OrderModify(res, Bid, SL, 0, 0, Red))
Print("Error modifying order");
}
}
ttime=Time[0];
return;
}
//---- buy conditions
if(buysig && ttime!=Time[0]) {
double ask = NormalizeDouble(Ask, Digits);
SL = NormalizeDouble(Ask - stopLoss * pips2dbl, Digits);
res=OrderSend(symbol,OP_BUY,lotSize,ask,slippage * pips2dbl,SL,0,"Pivot Buy",SpecificMagic,0,Blue);
if( res<0 )
{
Print("Error opening BUY order : ",ErrorDescription(GetLastError()));
Print("Ask=" + DoubleToStr(ask,Digits) + " : SL=" + DoubleToStr(SL,Digits));
res=0;
}
else //now enter in the SL and TP via OrderModify to make compatible with ECN broker
{
if (OrderSelect(res, SELECT_BY_TICKET))
{
if (!OrderModify(res, Ask, SL, 0, 0, Blue))
Print("Error modifying order");
}
}
ttime=Time[0];
return;
}
}Eu nunca passei por isso antes.
Saúde
Beno
Função Latch/Unlatch
Existe uma maneira de codificar uma função de travamento/destravamento em mq4. Você travaria um pouco verdadeiro com base em uma condição e armazenaria este valor até ser destravado por outra condição.
cmfxtrader
Gidday Kalenzo
Estou recebendo um pedido de VENDA de abertura de erro: paradas inválidas com a EA estão na conta demo e ao vivo e nenhuma negociação está abrindo. mas funciona bem com o testador e não tem mensagens de erro.
EURUSD,Daily: modificar #1 comprar 0.01 EURUSD a 1.43348 sl: 1.43895 tp: 0.00000 ok
A diferença de pontos SL 0,00547
Eu verifiquei o
MODE_FREEZELEVEL 0.0000
MODE_STOPLEVEL 0.0000
double Bal = AccountFreeMargin();
double TV = MarketInfo(Symbol(), MODE_TICKVALUE);
double Risk = 0.3;
double MaxDD = 10;
double RiskCapital = Bal*MaxDD/100;
double RPT = Bal*Risk/100;
double stopLoss = NormalizeDouble((RPT/TV)*lotSize/pips2dbl,Digits);
double Positions = MathAbs(RiskCapital/RPT);
double SL;
//---- sell conditions
if(sellsig && ttime!=Time[0]){
double bid = NormalizeDouble(Bid, Digits);
SL = NormalizeDouble(Bid + stopLoss * pips2dbl, Digits);
res=OrderSend(symbol,OP_SELL,lotSize,bid,slippage * pips2dbl,SL,0,"Pivot_Sell",SpecificMagic,0,Red);
if( res<0 )
{
Print("Error opening SELL order : ",ErrorDescription(GetLastError()));
Print("Bid=" + DoubleToStr(bid,Digits) + " : SL=" + DoubleToStr(SL,Digits));
res=0;
}
else //now enter in the SL and TP via OrderModify to make compatible with ECN broker
{
if (OrderSelect(res, SELECT_BY_TICKET))
{
if (!OrderModify(res, Bid, SL, 0, 0, Red))
Print("Error modifying order");
}
}
ttime=Time[0];
return;
}
//---- buy conditions
if(buysig && ttime!=Time[0]) {
double ask = NormalizeDouble(Ask, Digits);
SL = NormalizeDouble(Ask - stopLoss * pips2dbl, Digits);
res=OrderSend(symbol,OP_BUY,lotSize,ask,slippage * pips2dbl,SL,0,"Pivot Buy",SpecificMagic,0,Blue);
if( res<0 )
{
Print("Error opening BUY order : ",ErrorDescription(GetLastError()));
Print("Ask=" + DoubleToStr(ask,Digits) + " : SL=" + DoubleToStr(SL,Digits));
res=0;
}
else //now enter in the SL and TP via OrderModify to make compatible with ECN broker
{
if (OrderSelect(res, SELECT_BY_TICKET))
{
if (!OrderModify(res, Ask, SL, 0, 0, Blue))
Print("Error modifying order");
}
}
ttime=Time[0];
return;
}
}Eu nunca passei por isso antes.
Saúde
BenoProvavelmente seu stop loss está muito próximo. Tente multiplicar o valor de stop loss por 10. É um problema freqüente quando você estava testando o sistema em um corretor de 4 dígitos e o está negociando em um corretor de 5 dígitos. Você também poderia testá-lo em um corretor de 5 dígitos, mas nunca conectá-lo ao corretor (em modo offline) e então o metatrader terá configurações antigas (a partir de 4 dígitos).
Primeiro a partir desta linha:
NormalizeDouble(Ask - stopLoss * pips2dbl, Dígitos);
Imprima este valor => stopLoss*pips2dbl
então você conhecerá o valor real do stop loss.
se será como 20 ou 10 então significa que você precisará multiplicá-lo pelo valor do ponto
NormalizeDouble(Ask - (stopLoss * pips2dbl) *Point, Digits);
se será como 0,00009 então você precisa multiplicar por 10 porque deve ser 0,0009 (claro que se você deseja definir 9 pips stop loss)
Existe uma maneira de codificar uma função de travamento/destravamento em mq4. Você travaria um pouco verdadeiro com base em uma condição e armazenaria este valor até ser destravado por outra condição.cmfxtrader
Não tenho certeza se o entendi bem. Você deseja ligar/desligar parte específica de ea(função) ou deseja desativar a função de ea A através da ação tomada em ea B ? Desta forma ou de outra forma, ambas são possíveis.
Converter valor monetário em preço (para cálculo da meta de lucro)
Eu gostaria de programar uma função que devolva um valor de preço para uma determinada meta de lucro de uma cesta de ofícios, mas estou tendo dificuldades. A meta que eu gostaria de atingir, é uma linha horizontal simples a ser desenhada na tela que indica a meta de lucro. Entretanto, a meta de lucro é uma variável definível pelo usuário na forma de um valor monetário e não de um valor de preço. (por exemplo, meta = 100 euros em vez de meta = 1,2000)
A rotina que eu tenho até agora:
(Minha conta está em EUR!)
1) Digamos que eu abro várias posições de compra para o USDJPY (em posições aleatórias para criar uma situação de exemplo)
2) Calculo o preço médio da cesta aberta (digamos 1.1500, mais uma vez hipotéticamente) e mostro uma linha horizontal para indicar isso
3) Eu tenho uma variável com uma meta de lucro definida: digamos meta = 100 euros
4) Eu posso fechar com sucesso todas as posições abertas quando a cesta lucrativa >= alvo
Falta o passo intermediário. Preciso de uma função: duplo targetPrice(){} que retorna o targetPrice. Desenhar a linha horizontal não é o problema: calcular o preço-alvo é!
O preço-alvo = preço médio aberto + alvo de valor monetário (100 euros)
Então o que eu basicamente gostaria de saber: como converter um valor monetário em gratificações. Desta forma, posso adicionar os pips ao preço médio e voilá tenho meu preço-alvo. Lembre-se que isto também tem que levar em conta o fato de que tenho uma conta em EUR e estou negociando USDJPY. Acho que também há armadilhas?
ECN SL não funciona
Gidday
Estou tentando montar um EA que funcionará em um ECN, entendo que o SL e TP devem ser colocados / modificados e acho que a configuração está correta, o pedido abre agora, mas o SL não é colocado externamente o StopLoss duplo = 100; qualquer ajuda seria ótima.
if(buysig && ttime!=Time[0]) {
ticket = OrderSend(Symbol(), OP_BUY, lotSize, MarketInfo(Symbol(), MODE_ASK), 2, 0, 0, "", 12345);
if(ticket > -1){
if (!OrderSelect(ticket, SELECT_BY_TICKET)) {
error_code = GetLastError();
Print("Error: " + ErrorDescription(error_code));
return(-1);
}
Print("order "+ticket+" successfully opened");
//now enter in the SL and TP via OrderModify to make compatible with ECN broker
SL = MarketInfo(Symbol(), MODE_ASK) - (StopLoss * pips2points);
Print("Ask = " + DoubleToStr(Ask,Digits) + " : SL = " + DoubleToStr(SL,Digits));
//round to nearest Tickvalue
SL = DoubleRound(SL, MarketInfo(Symbol(), MODE_TICKSIZE));
Print("SL rounded: " + SL);
if(!OrderModify(ticket, entry_price, SL, 0, Blue)) {
error_code = GetLastError();
Print("Error: " + ErrorDescription(error_code));
return(-1);
}
Print("Stoploss successfully set");
ttime=Time[0];
return(0);
}
}
}
//Tickvalue Rounding
double DoubleRound(double number, double step){
double mod = MathMod(number, step);
if(mod < step/2.0)
step = 0;
double rounded = number - mod + step;
return (rounded);
},,,,,,,,,,,,,.,,,,,,,,,