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
Erro por erro de compilação
Olá a todos
Eu tenho o seguinte erro:
<'-diferentes tipos em comparação
Eu tento modificar a linha:
(NonLagMA_2D_S2&&D_S2Switch==1)
para
(Price_NowD_S2&&D_S2Switch==1)
Onde está o problema?
Desculpe, não é possível carregar o arquivo mql-. Não é o meu script.
Olá a todos
Eu tenho o seguinte erro:
<'-diferentes tipos em comparação
Eu tento modificar a linha:
(NonLagMA_2D_S2&&D_S2Switch==1)
para
(Price_NowD_S2&&D_S2Switch==1)
Onde está o problema?
Desculpe não poder carregar o arquivo mql-. Não é o meu scriptFechando posições múltiplas por número mágico - Ajuda
Olá a todos.
Eu sou novo na programação do mt4 e abaixo estão minhas primeiras EA. O objetivo deste EA é fechar todas as posições independentemente de qualquer par de moedas com base no mesmo número mágico.
Digamos que sob o número mágico 8675310, eu tenho 2 posições EURUSD & USDCFh. Ela será capaz de fechar todos esses pares quando atingir determinada meta de lucro.
O problema com este EA é,
Transação aberta nº 1 EURUSD (capaz de fechar)
Transação aberta nº 2 USDCFh (não poderá fechar)
NÃO SERÁ CAPAZ DE FECHAR A TRANSAÇÃO Nº 2.
Alguma idéia ?
Obrigado
//+------------------------------------------------------------------+
//| Encerramento_Comércio_Por_Magic_No_v1 .mq4 |
//| Mina |
//| Software de Comércio Forex: Plataforma de negociação Forex MetaTrader 4 |
//+------------------------------------------------------------------+
#propriedade copyright "Mine" (Meu)
#link da propriedade "http://www.metaquotes.net"
//---- parâmetros de entrada
externo int MagicNumber1=8675310;
extern int Profit1=10;
externo int MagicNumber2=8675311;
extern int Lucro2=15;
externo int MagicNumber3=8675312;
extern int Lucro3=15;
externo int MagicNumber4=8675313;
extern int Lucro4=15;
externo int MagicNumber5=8675314;
extern int Lucro5=15;
externo int MagicNumber6=0;
extern int Lucro6=10;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
onScreenComment(98, "Tengak Initialize...");
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
string myMessage="";
myMessage = myMessage + ProfitLossMonitor(1,MagicNumber1,Pr ofit1,myMessage);
myMessage = myMessage + ProfitLossMonitor(2,MagicNumber2,Pr ofit2,myMessage);
myMessage = myMessage + ProfitLossMonitor(3,MagicNumber3,Pr ofit3,myMessage);
myMessage = myMessage + ProfitLossMonitor(4,MagicNumber4,Pr ofit4,myMessage);
myMessage = myMessage + ProfitLossMonitor(5,MagicNumber5,Pr ofit5,myMessage);
myMessage = myMessage + ProfitLossMonitor(6,MagicNumber6,Pr ofit6,myMessage);
onScreenComment(98,myMessage);
//----
//----
retorno(0);
}
string ProfitLossMonitor(int myGroupNumber,int myMagicNumber, int myProfit,string myMessage )
{
int total = EncomendasTotal();
dobro MyCurrentProfit=0;
string MyOrderNo=""";
para (int cnt = 0; cnt < total; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_ TRADES);
if (OrderMagicNumber() == myMagicNumber)
{
MyCurrentProfit += OrderProfit();
MyOrderNo= MyOrderNo + "," + OrderTicket();
}
}
if(MyCurrentProfit>=myProfit)
CloseAll(myMagicNumber);
myMessage="Group Position #" + myGroupNumber + " " + myMagicNumber + "=" + myProfit + "(" + DoubleToStr(MyCurrentProfit,2) + " " + MyOrderNo + ")" + "\n" ;
retornar (myMessage);
}
CloseAll(int myMagicNumber)
{
int total = EncomendasTotal();
para (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_ TRADES);
if (OrderMagicNumber() == myMagicNumber)
if(OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots( ),Bid,5,Violet);
if(OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots( ),Ask,5,Violet);
}
}
vazio noScreenComment(int myEvent, string myComment)
{
interruptor (myEvent)
{
caso 98: Comentário(myComment); pausa;
}
}
//+------------------------------------------------------------------+
Editar/eliminar mensagem
Open Transaction # 1 EURUSD (able to close)
Transação aberta nº 2 USDCFh (não poderá fechar)
NÃO SERÁ CAPAZ DE FECHAR A TRANSAÇÃO Nº 2.
Alguma idéia ?
Presumo que você esteja correndo a ea no gráfico do EURUSD no momento em que tentar fechar as ordens. já que essas posições estão fechando ok. Quando seu código tenta fechar o USDCHF(um pouco desleixado?) posiciona o mesmo usando o lance errado e ou pergunta, o preço de fechamento que usa é do par de moedas que a ea não está anexada ao preço do símbolo das possibilidades. Se você tentar fechar outro par de moedas a partir de um gráfico que não corresponda a essa moeda, você deve primeiro recuperar o preço correto antes de tentar fechá-lo.
keit
editar: Também a moeda, USDCHF neste caso deve ser exibida em sua janela de observação do mercado no momento em que você tentar recuperar as cotações corretas para fechar as ordens. Se o USDCHF não estiver listado na janela de observação do mercado, você não poderá obter qualquer cotação para aquele par.
Obrigado cockeyedcowboy !.
"você deve primeiro recuperar o preço correto antes de tentar fechá-lo".
Poderia sua parte a sintaxe ou função que pode fazer as necessidades acima;
como não negociar até o próximo bar
Eu tentei programar pela primeira vez, mas tenho um problema.
- Se eu fechar um negócio em um bar, só posso abrir um novo negócio quando o novo bar abrir.
Eu tentei o seguinte;
data/hora0=0;
int início()
se (tempo0 == Tempo[0]) retornar;
{
"código do programa".
}
tempo0 = Tempo[0];
retorno(0);
Se eu tirar esta parte, recebo várias entradas em vários bares. Com ela, recebo muito menos entradas (de 70 em um backtest. a 4), mas com entradas faltando.
Qualquer pessoa sabe o que estou fazendo de errado.
Obrigado de antemão.
Você pode usar a função NewBar() abaixo.
Como if(NewBar(){ ........programando aqui
bool NewBar() {
static datetime LastTime = 0;
if (Time[0] != LastTime) {
LastTime = Time[0];
return (true);
} else
return (false);
}
Você também pode querer testar para pedidos abertos se você quiser apenas um pedido de cada vez.
Espero que isso ajude.
Lux
Lux
Obrigado por sua ajuda com isto.
Acho que já descobri o que estava acontecendo no programa.
Eu estava anteriormente verificando uma nova barra no início, então o programa acabou de verificar o primeiro tique da nova barra para ver se concordava com meus sinais, sem verificar os outros tiquetaques. É por isso que poucos sinais de comércio vieram através do backtest.
Agora eu coloquei o código corretamente, (ou seja, onde está minha instução de pedido) parece estar funcionando bem.
Estou correto em meu raciocínio?
Por favor, ajude a atualizar o código de especialista.
Há um especialista simples. O código é claro e simples também, mas eu tenho um grande problema - o perito tem apenas UMA tentativa de abrir/fechar o pedido.
Alguém pode ajudar a consertá-lo?
O perito deve tentar 5-10 vezes para abrir/fechar o pedido.
Talvez n=número de tentativas, e por favor, sem "enquanto".
Muito obrigado.
Meu código para "ajustar lotes após a perda", preciso de ajuda...obrigado
Meu código abaixo para "ajustar lotes após perda", mas fez uma massagem de erro"posição inicial incorreta 0 para a função ArraySort" durante os testes. Qualquer pessoa pode me ajudar a consertá-lo... precisa de ajuda...
double AdjtLotsByWinRate( int magicnumber,double NormLots)
{
int i,counter;
int ProfitAndTime[][2];
double Profits[];
//----
ArrayResize(ProfitAndTime,OrdersHistoryTotal());
for (i=0;i<OrdersHistoryTotal();i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if (OrderType()<=OP_SELL && OrderMagicNumber()==magicnumber ) // 0 OP_BUY 1 OP_SELL 2 OP_BUYLIMIT 3 OP_SELLLIMIT 4 OP_BUYSTOP 5 OP_SELLSTOP
{
ProfitAndTime[counter][0]=OrderCloseTime();
ProfitAndTime[counter][1]=OrderProfit();
counter++;
}
}
}
ArrayResize(ProfitAndTime,counter);
ArrayResize(Profits,counter);
ArraySort(ProfitAndTime);
for (i=0;i<counter;i++)
{
Profits=ProfitAndTime[1];
}
//Print(Profits);
int err=GetLastError();
int WinRate_N=0,WinRate_A=5;
double WinRate;
for (i=counter;i<counter-WinRate_A+1;i--)
{
if (Profits>0){
WinRate_N=WinRate_N+1;
}
else if (Profits<0)
{
WinRate_N=WinRate_N-1;
}
else
{
WinRate_N=WinRate_N+0;
}
}
WinRate=WinRate_N/WinRate_A;
double NewLots;
if (WinRate>=0.7)
{
NewLots=NormLots*1.5;
}
else if (WinRate>=0.5 && WinRate<0.7)
{
NewLots=NormLots*1;
}
else if (WinRate>=0.3 && WinRate<0.5)
{
NewLots=NormLots*0.5;
}
else //if (WinRate<0.3)
{
NewLots=NormLots*0.1;
}
return(NewLots);
}