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
apenas comprar, não vender
criando uma ea lucrativa, mas poderia ser duas vezes melhor (talvez) por enquanto só são feitas compras, nunca vendas de encomendas.
Alguém sabe por quê?
//+------------------------------------------------------------------+
//| Início do sinal |
//+------------------------------------------------------------------+
double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0, 0);
double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0);
duplo Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1);
se (sig_buy>0 && Sg>0) Ordem = SINAL_BUY;
if (sig_sell>0 && Sg<0 ) Ordem = SINAL_SELL;
//+------------------------------------------------------------------+
//| Fim do sinal |
//+------------------------------------------------------------------+
publicar o código total, há outra coisa errada...
o segundo passo talvez seja suas funções iCustom().
criando uma ea lucrativa, mas poderia ser duas vezes melhor (talvez) por enquanto só são feitas compras, nunca vendas de pedidos.
Alguém sabe por quê?
//+------------------------------------------------------------------+
//| Início do sinal |
//+------------------------------------------------------------------+
double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0, 0);
double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0);
duplo Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1);
se (sig_buy>0 && Sg>0) Ordem = SINAL_BUY;
if (sig_sell>0 && Sg<0 ) Ordem = SINAL_SELL;
//+------------------------------------------------------------------+
//| Fim do sinal |
//+------------------------------------------------------------------+Colocando e Visualizando Objetos em Datas Futuras?
Olá, alguém sabe se a MQL4 suporta colocar um objeto indicador no futuro e visualizar o objeto futuro? Eu tentei ObjectMove para uma data futura (sem retorno de erro), mas a visualização pára na última data do tick. Obrigado
Os MA têm uma característica de turno... se é isso que você quer dizer. +2 o deslizará para a frente 2 barras TF. -2 irá deslizar para trás 2.
publicar o código total, há outra coisa errada...o segundo passo talvez seja suas funções iCustom().
#link da propriedade "https://www.forex-tsd.com"
número interno externo MagicNumber = 1001;
bool externo EachTickMode = Falso;
double Lots externo = 0,01;
Exterior int Slippage = 4;
bool StopLossMode externo = Verdadeiro;
StopLoss int externo = 70;
bool TakeProfitMode externo = Verdadeiro;
extern int TakeProfit = 300;
bool TrailingStopMode = Verdadeiro; bool StopLossMode = Verdadeiro;
Exterior int TrailingStop = 25;
extern double MaximumRisk =0;//0.15
duplo DiminuiçãoFator externo =3;
Exterior int MaxOrders = 3000;
externo bool UseHourTrade = Falso;
extern int FromHourTrade = 8;
externo int ToHourTrade = 18;
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
no BarCount;
int Corrente;
bool TickCheck = Falso;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init() {
BarCount = Barras;
se (CadaTickMode) Corrente = 0; caso contrário Corrente = 1;
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit() {
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start() {
se (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comentário ("Não chegou a hora do comércio!");
retorno(0);
}
}
int Ordem = SIGNAL_NONE;
int Total, Bilhete;
nível duplo StopLossLevel, TakeProfitLevel;
int digit = MarketInfo(Symbol(),MODE_DIGITS);
if (CadaTickMode && Bars != BarCount) CadaTickMode = Falso;
Total = OrdensTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Início do sinal |
//+------------------------------------------------------------------+
double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0, 0);
double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0);
duplo Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1);
se (sig_buy>0 && Sg>0) Ordem = SINAL_BUY;
if (sig_sell>0 && Sg<0 ) Ordem = SINAL_SELL;
//+------------------------------------------------------------------+
//| Fim do sinal |
//+------------------------------------------------------------------+
//Compra
if (Order === SIGNAL_BUY && ((EachTickMode && !TickCheck) ||| (!EachTickMode && (Bars != BarCount)))) {
if(ScanTrades() < MaxOrders) {
//Cheque margem livre
if (AccountFreeMargin() < (1000 * Lotes)) {
Imprimir("Nós não temos dinheiro. Margem Livre = ", AccountFreeMargin());
devolução(0);
}
StopLossLevel = Perguntar - StopLoss * Ponto;
TakeProfitLevel = Ask + TakeProfit * Ponto;
Ticket = OrderSend(Symbol(), OP_BUY, LotsOptimized(),
NormalizeDuplo(Pergunte,dígito),
Slippage,
NormalizeDuplo(StopLossLevel,digit),
NormalizeDuplo(TakeProfitLevel,digit),
"Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
se (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) Imprimir("ordem de compra aberta : ", OrderOpenPrice()); ou Imprimir("erro de abertura da ordem de compra: ", GetLastError()));
}
se (EachTickMode) TickCheck = Verdadeiro;
se (!EachTickMode) BarCount = Bars;
return(0);
}
}
//vender
if (Order === SIGNAL_SELL && ((EachTickMode && !TickCheck) ||| (!EachTickMode && (Bars != BarCount)))) {
if(ScanTrades() < MaxOrders) {
//Cheque margem livre
if (AccountFreeMargin() < (1000 * Lotes)) {
Imprimir("Nós não temos dinheiro. Margem Livre = ", AccountFreeMargin());
devolução(0);
}
StopLossLevel = Bid + StopLoss * Ponto;
TakeProfitLevel = Bid - TakeProfit * Ponto;
Ticket = OrderSend(Symbol(), OP_SELL, LotsOptimized(),
NormalizeDuplo(Bid,digit),
Slippage,
NormalizeDuplo(StopLossLevel,digit),
NormalizeDuplo(TakeProfitLevel,digit),
"Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
se (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) Imprimir("Pedido de VENDA aberto : ", OrderOpenPrice()); ou Imprimir("Erro na abertura do pedido de VENDA : ", GetLastError()));
}
se (EachTickMode) TickCheck = Verdadeiro;
se (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Cheque posição
para (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
if(OrderType() == OP_BUY && OrderMagicNumber()==MagicNumber ) {
//Close
if (Order === SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
se (EachTickMode) TickCheck = Verdadeiro;
if (!EachTickMode) BarCount = Bars;
return(0);
}
// Parada de trilha
if(TrailingStopMode && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Ponto * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
se (!EachTickMode) BarCount = Bars;
retorno(0);
}
}
}
{} else {
if(OrderType()==OP_SELLL && OrderMagicNumber()==MagicNumber)
{
//Close
if (Order === SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))
{
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
se (EachTickMode) TickCheck = Verdadeiro;
if (!EachTickMode) BarCount = Bars;
return(0);
}
// Parada de trilha
se (TrailingStopMode && TrailingStop > 0)
{
if((OrderOpenPrice() - Ask) > (Ponto * TrailingStop)) {
if((OrderStopLoss() > (Pergunte + Ponto * TrailingStop)) ||| (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
se (!EachTickMode) BarCount = Bars;
retorno(0);
}
}
}
}}
}
}
se (!EachTickMode) BarCount = Bars;
retorno(0);
}
int ScanTrades()
{
int total = EncomendasTotal();
int numords = 0;
for(int cnt=0; cnt<total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
if(OrderSymbol() == Symbol() && OrderType()<=OP_SELLSTOP && OrderMagicNumber() == MagicNumber)
numords++;
}
retorno(numords);
}
//bool ExistPosições() {
//for (int i=0; i<OrdersTotal(); i++) {
//if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
//if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) {
//retorno(Verdadeiro);
//}
//}
//}
//retorno(falso);
//}
duplo LotsOptimized()
{
lote duplo=Lotes;
int orders=HistoryTotal(); // histórico total de ordens
int losses=0; // número de ordens de perdas sem intervalo
//---- selecione o tamanho do lote
if(MaximumRisk>0)lot=NormalizeDouble(Lots*AccountFreeMargin()*MaximumRisk/1000.0,1);
//---- calcule o número de ordens de perdas sem uma pausa
if(DiminaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==falso) { Print("Erro na história!"); break; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELLL) continua;
//----
if(OrderProfit()>0) quebra;
if(OrderProfit()<0) perdas++;
}
if(perdas>1) lote=NormalizarDuplo(lote-lot*losses/DecreaseFactor,1);
}
//---- tamanho do lote de retorno
if(lote<0,1) lote=0,1;
retorno(lote);
}
//+------------------------------------------------------------------+
Você recebe algum código de erro ou alguma outra coisa (em testes anteriores) que lhe dá uma dica do que está dando errado?
#link da propriedade "https://www.forex-tsd.com"
número de MagicNumber int externo = 1001;
external bool EachTickMode = False;
extern double Lots = 0,01;
extern int Slippage = 4;
bool StopLossMode externo = Verdadeiro;
StopLoss int externo = 70;
bool TakeProfitMode externo = Verdadeiro;
extern int TakeProfit = 300;
bool TrailingStopMode = Verdadeiro; bool StopLossMode = Verdadeiro;
Exterior int TrailingStop = 25;
extern double MaximumRisk =0;//0.15
duplo DiminuiçãoFator externo =3;
Exterior int MaxOrders = 3000;
externo bool UseHourTrade = Falso;
extern int FromHourTrade = 8;
externo int ToHourTrade = 18;
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
no BarCount;
int Corrente;
bool TickCheck = Falso;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init() {
BarCount = Barras;
se (CadaTickMode) Corrente = 0; caso contrário Corrente = 1;
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit() {
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start() {
se (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comentário ("Não chegou a hora do comércio!");
retorno(0);
}
}
int Ordem = SIGNAL_NONE;
int Total, Bilhete;
nível duplo StopLossLevel, TakeProfitLevel;
int digit = MarketInfo(Symbol(),MODE_DIGITS);
if (CadaTickMode && Bars != BarCount) CadaTickMode = Falso;
Total = OrdensTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Início do sinal |
//+------------------------------------------------------------------+
double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0, 0);
double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0);
duplo Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1);
se (sig_buy>0 && Sg>0) Ordem = SINAL_BUY;
if (sig_sell>0 && Sg<0 ) Ordem = SINAL_SELL;
//+------------------------------------------------------------------+
//| Fim do sinal |
//+------------------------------------------------------------------+
//Compra
if (Order === SIGNAL_BUY && ((EachTickMode && !TickCheck) ||| (!EachTickMode && (Bars != BarCount)))) {
if(ScanTrades() < MaxOrders) {
//Cheque margem livre
if (AccountFreeMargin() < (1000 * Lotes)) {
Imprimir("Nós não temos dinheiro. Margem Livre = ", AccountFreeMargin());
devolução(0);
}
StopLossLevel = Perguntar - StopLoss * Ponto;
TakeProfitLevel = Ask + TakeProfit * Ponto;
Ticket = OrderSend(Symbol(), OP_BUY, LotsOptimized(),
NormalizeDuplo(Pergunte,dígito),
Slippage,
NormalizeDuplo(StopLossLevel,digit),
NormalizeDuplo(TakeProfitLevel,digit),
"Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
se (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) Imprimir("ordem de compra aberta : ", OrderOpenPrice()); ou Imprimir("erro de abertura da ordem de compra: ", GetLastError()));
}
se (EachTickMode) TickCheck = Verdadeiro;
se (!EachTickMode) BarCount = Bars;
return(0);
}
}
//vender
if (Order === SIGNAL_SELL && ((EachTickMode && !TickCheck) ||| (!EachTickMode && (Bars != BarCount)))) {
if(ScanTrades() < MaxOrders) {
//Cheque margem livre
if (AccountFreeMargin() < (1000 * Lotes)) {
Imprimir("Nós não temos dinheiro. Margem Livre = ", AccountFreeMargin());
devolução(0);
}
StopLossLevel = Bid + StopLoss * Ponto;
TakeProfitLevel = Bid - TakeProfit * Ponto;
Ticket = OrderSend(Symbol(), OP_SELL, LotsOptimized(),
NormalizeDuplo(Bid,digit),
Slippage,
NormalizeDuplo(StopLossLevel,digit),
NormalizeDuplo(TakeProfitLevel,digit),
"Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
se (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) Imprimir("Pedido de VENDA aberto : ", OrderOpenPrice()); ou Imprimir("Erro na abertura do pedido de VENDA : ", GetLastError()));
}
se (EachTickMode) TickCheck = Verdadeiro;
se (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Cheque posição
para (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
if(OrderType() == OP_BUY && OrderMagicNumber()==MagicNumber ) {
//Close
if (Order === SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
se (EachTickMode) TickCheck = Verdadeiro;
if (!EachTickMode) BarCount = Bars;
return(0);
}
// Parada de trilha
if(TrailingStopMode && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Ponto * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
se (!EachTickMode) BarCount = Bars;
retorno(0);
}
}
}
{} else {
if(OrderType()==OP_SELLL && OrderMagicNumber()==MagicNumber)
{
//Close
if (Order === SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))
{
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
se (EachTickMode) TickCheck = Verdadeiro;
if (!EachTickMode) BarCount = Bars;
return(0);
}
// Parada de trilha
se (TrailingStopMode && TrailingStop > 0)
{
if((OrderOpenPrice() - Ask) > (Ponto * TrailingStop)) {
if((OrderStopLoss() > (Pergunte + Ponto * TrailingStop)) ||| (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
se (!EachTickMode) BarCount = Bars;
retorno(0);
}
}
}
}}
}
}
se (!EachTickMode) BarCount = Bars;
retorno(0);
}
int ScanTrades()
{
int total = EncomendasTotal();
int numords = 0;
for(int cnt=0; cnt<total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
if(OrderSymbol() == Symbol() && OrderType()<=OP_SELLSTOP && OrderMagicNumber() == MagicNumber)
numords++;
}
retorno(numords);
}
//bool ExistPosições() {
// para (int i=0; i<OrdersTotal(); i++) {
// se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {/ if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
// if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) {
// retorno(Verdadeiro);
// }
// }
// }
// retorno(falso);
//}
duplo LotsOptimized()
{
lote duplo=Lotes;
int orders=HistoryTotal(); // histórico total de ordens
int losses=0; // número de ordens de perdas sem intervalo
//---- selecione o tamanho do lote
if(MaximumRisk>0)lot=NormalizeDouble(Lots*AccountFreeMargin()*MaximumRisk/1000.0,1);
//---- calcule o número de ordens de perdas sem uma pausa
if(DiminaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==falso) { Print("Erro na história!"); break; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELLL) continua;
//----
if(OrderProfit()>0) quebra;
if(OrderProfit()<0) perdas++;
}
if(perdas>1) lote=NormalizarDuplo(lote-lot*losses/DecreaseFactor,1);
}
//---- tamanho do lote de retorno
if(lote<0,1) lote=0,1;
retorno(lote);
}
//+------------------------------------------------------------------+Estou fazendo um backtest agora apenas com o RSIFilter, uso o RSIMixFilter alguns posts atrás neste tópico, publiquei esse indicador, e recebo BUYS e SELLS, então a lógica para fazer as ordens COMPRAR e VENDER estão bem, a questão é com seus sinais iCustom...
RSIMixFilter, não está neste tópico, desculpe, está aqui ASK
criando uma ea lucrativa, mas poderia ser duas vezes melhor (talvez) por enquanto só são feitas compras, nunca vendas de encomendas.
Alguém sabe por quê?
//+------------------------------------------------------------------+
//| Início do sinal |
//+------------------------------------------------------------------+
double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0, 0);
double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0);
duplo Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1);
se (sig_buy>0 && Sg>0) Ordem = SINAL_BUY;
if (sig_sell>0 && Sg<0 ) Ordem = SINAL_SELL;
//+------------------------------------------------------------------+
//| Fim do sinal |
//+------------------------------------------------------------------+Fiz alguns testes, EURUSD H1 desde abril de 2007 até agora, apenas com este RSIMixFilter...
Tem que ser 90% de qualidade de modelagem, não sei porque não aparece.
criando uma ea lucrativa, mas poderia ser duas vezes melhor (talvez) por enquanto só são feitas compras, nunca vendas de encomendas.
Alguém sabe por quê?
//+------------------------------------------------------------------+
//| Início do sinal |
//+------------------------------------------------------------------+
double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0, 0);
double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0);
duplo Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1);
se (sig_buy>0 && Sg>0) Ordem = SINAL_BUY;
if (sig_sell>0 && Sg<0 ) Ordem = SINAL_SELL;
//+------------------------------------------------------------------+
//| Fim do sinal |
//+------------------------------------------------------------------+Este backtesting, ele deu compras e vendas ou apenas uma delas? Comigo só consegui comprar (ou só vender quando mudei o código).
Eu realmente não vi nada que mostrasse um erro.
Estou fazendo um backtest agora apenas com o RSIFilter, uso o RSIMixFilter há poucos posts neste tópico, publiquei esse indicador, e recebo BUYS e SELLS, então a lógica para fazer as ordens COMPRAR e VENDER está bem, a questão é com seus sinais iCustom...
Então isto está bem?
duplo Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1);
se ( Sg>0) Ordem = SIGNAL_BUY;
se ( Sg<0 ) Ordem = SIGNAL_SELL;