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
Tente algo como isto :
{
string sname=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
string tname="";
for (int i=0;i<StringLen(sname);i++)
{
string char = StringSubstr(sname,i,1);
if (char!="." && char!=":")
if (char==" ")
tname = tname+"_";
else tname = tname+char;
}
return(tname+"_"+Symbol()+Period()+".csv");
}[/php]this one adds hour, minute and seconds in the middle to make it more or less unique (so something like this "20090924_102541_EURUSD15.csv"). To make it really sure that the file does not exist it would have to be a bit more complicated (something like this :
[php]string uniqueFileName()
{
string sname=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
string tname="";
int thand;
for (int i=0;i<StringLen(sname);i++)
{
string char = StringSubstr(sname,i,1);
if (char!="." && char!=":")
if (char==" ")
tname = tname+"_";
else tname = tname+char;
}
//
//
//
//
//
tname = tname+"_"+Symbol()+Period()+".csv";
thand = FileOpen(tname,FILE_BIN|FILE_READ);
if (thand==-1)
return(tname);
else
{
FileClose(thand);
return("failed to make unique name");
}
}Ele retornará o fio"não conseguiu fazer um nome único" se falhar, neste caso você tem que decidir quantas vezes quer que ele tente novamente
PS: o uso seria algumFileName=uniqueFileName();
comentários
mladen
Olá a todos,
Sou comerciante, mas não conheço a linguagem mq4 e estou tentando fazer isso desde terça-feira ...
Preciso salvar meu gráfico em formato csv usando um script. Tenho um bom script que posso simplesmente arrastá-lo em qualquer gráfico e em qualquer período de tempo e ele faz muito bem, exceto o nome do arquivo.
Desejo que ele possa gerar automaticamente um nome de arquivo único cada vez que eu salvar o gráfico para que eu não tenha que renomeá-lo cada vez que eu salvar outro arquivo na mesma pasta.
nome da string = [data no formato AAAAMMDD] + "_"+[data - hora apenas]+"_" + Símbolo() + Período() + ".csv";
O código em questão está em negrito.
Quando eu acertei o código, eu acho que o nome do arquivo de saída será parecido com o seguinte
20090924_10_GBPJPY15.csv
Lamento não poder gastar muito tempo para ler 157 páginas deste enorme fio (eu tinha tentado e minha cabeça ficou tonta)
Agradecemos antecipadamente.Use-o assim (o mql não permite funções ou procedimentos aninhados, portanto a função ou procedimento deve ser uma função ou procedimento separado)
Funciona perfeitamente, muito obrigado.
De salvar arquivos em qualquer lugar : sim, pode ser feito usando o Windows API. Aqui está um link com um bom exemplo e uma boa explicação de como fazer isso : Operações de arquivos via WinAPI - MQL4 Artigos
Vou aprender sobre isso, e com certeza voltarei a este tópico mais tarde.
Que Deus o abençoe.
"Entrada Duplicada": Por que meu programa não funciona?
Desculpe: Eu postei isso antes, mas não posso recolocar o post no Fórum.
(Também não permite "bookmarks" do histórico do meu computador...)
De qualquer forma: escrevi um programa simples, que testa se duas barras consecutivas estão "para cima" ou "para baixo".
Ie: em "para cima", o alto na barra 1 é mais alto que na barra 2, e o baixo na barra 1
também é maior do que na barra 2. (A descida é simétrica).
O prog funciona c/ rupturas, assim em "para cima", o alto de bar1 menos o baixo
de bar2 deve estar acima de algum limite. ("Abaixo" é simétrico).
Agora trabalhando c/ M30 GBPUSD. Escolhido este "limiar de fuga" por olho,
como fez para o TakeProfit. StopLoss é como indicado no programa.
Assim: tentando ganhar experiência com MetaTrader & mql4.
Então, pode tentar outros progs, otimizar as coisas, etc.
Assim: chegar ao ponto de ter o programa compilado, e executado no Testador de Estratégia.
Mas, nunca chega à segunda metade do programa, ou imprimir que ele
entrou em uma ordem.
Para alguém que tenha experimentado, qualquer erro que eu tenha é provavelmente óbvio.
Não é evidente para mim mesmo.
Então: você poderia ajudar com isto?
Obrigado.
Prog segue.
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
//----
bool TrendUp1; duplo TakeProfitUp; duplo EE = .00500;
bool OrdTot_OK; duplo lote; duplo deslizamento;
duplo SL_Trailing_Up;bool High2Up;bool Low2Up;
int ticketup;int ticketdown;bool DownAndBig; bool UpAndBig;
bool TrendDown; double SL_Trailing_Down; double TakeProfitDown;
bool High2down; bool Low2down;
int ABC = OrdersTotal();
double Size1 = .00630;bool BigUp; double A = High[1];double B= Low[2];
duplo C= Alto[2]; duplo D= Baixo[1]; bool BigDown;
//------------------------------------down order start
se (ABC == 0)// nenhuma ordem fora é verdadeira
OrdTot_OK = verdadeiro;
se (ABC == 0)// nenhuma ordem fora é verdadeira
Imprimir ("na seqüência de ordem para baixo, nenhuma ordem saiu");
se ((C-D) > Tamanho1)//alto de 2 menos baixo de 1 > .0063
BigDown = verdadeiro;
se ((C-D) > Tamanho1)//alto de 2 menos baixo de 1 > .0063
Imprimir ("na seqüência de ordem para baixo, encontrei uma grande quebra");
se (Alto[1]< Alto[2])
High2down=verdadeiro;
se (Alto[1]< Alto[2])
Imprimir ("na seqüência de ordem decrescente, as barras consecutivas têm máximas decrescentes");
if(Baixo[1]< Baixo[2])
Low2down=verdadeiro;
if(Baixo[1]< Baixo[2])
Imprimir ("na seqüência de ordem decrescente, as barras consecutivas têm mínimos decrescentes");
se (High2down && Low2down)
TrendDown=verdadeiro;
if (High2down && Low2down)
Imprimir ("na seqüência de ordem para baixo, a bandeira TrendDown está definida");
se (TrendDown)
SL_Trailing_Down = Alto[1];
se (TrendDown)
Imprimir ("na seqüência de ordem para baixo, definiu o stop_loss");
se (TrendDown)
TakeProfitDown = Bid - (.005);
se (TrendDown)
Imprimir ("em seqüência de ordem decrescente, tem um takeprofit", TakeProfitDown);
se (TrendDown && BigDown)
DownAndBig = verdadeiro;
se (DownAndBig && OrdTot_OK)
ticketdown= OrderSend(Symbol(),OP_SELL,lot, Bid,slip,SL_Trailing_Down,TakeProfitDown,Blue);
if (DownAndBig && OrdTot_OK)
Imprimir ("na seqüência de ordem para baixo, tentou digitar um ticket", ticketdown);
se (ticketdown < 0)
Print("OrderSend_Down failed with error #",GetLastError()));
return(0);
//----------------------------------------------down order done
//---------------------------------------------------up order start
se (ABC == 0)
OrdTot_OK = verdadeiro;
se (ABC == 0)
Imprimir ("na seqüência de subida, nenhuma ordem estava fora");
se ((A - B) > Tamanho1)
BigUp = verdadeiro;
se ((A - B) > Tamanho1)
Imprimir ("na seqüência de subida, o teste de tamanho para as duas barras estava ok");
se (Alto[1] > Alto[2])
High2Up = verdadeiro;//44
se (Alto[1] > Alto[2])
Imprimir ("na seqüência de subida, o teste para aumentar as alturas foi ok");
if(Baixo[1] > Baixo[2])
Low2Up=verdadeiro;
if(Baixo[1] > Baixo[2])
Imprimir ("na seqüência de subida, o teste para aumentar as baixas foi ok");
se (High2Up && Low2Up)
TrendUp1=verdadeiro;
se (High2Up && Low2Up)
Imprimir ("na seqüência de subida, colocou a bandeira para subir");
se (TrendUp1)
SL_Trailing_Up = Baixa[1] ;
se (TrendUp1)
Imprimir ("na seqüência de subida, estabelece-se o stoploss");
se (TrendUp1)
TakeProfitUp = Pergunte + (.005);
se (TrendUp1)
Imprimir ("na seqüência de subida, estabelecer o takeprofit", TakeProfitUp);
se (TrendUp1 && BigUp)
UpAndBig = verdadeiro;
se ( UpAndBig && OrdTot_OK)
ticketup = OrderSend(Symbol(), OP_BUY,lot, Ask,slip, SL_Trailing_Up,TakeProfitUp,Red);
if (UpAndBig && OrdTot_OK)
Imprimir ("na seqüência de subida, tentou enviar um pedido", ticketup);
se (ticketup < 0)
Print("OrderSend_Up failed with error #",GetLastError()));
return(0);
//-------------------------------------------------up order done
//----
return(0);// esta linha pode ser supérflua
//+------------------------------------------------------------------+
//----
retorno(0);
}
//+------------------------------------------------------------------+
Usando múltiplos CharToStr????
Eu gostaria de colocar dois caracteres de vento. Um em cima do outro. Este é o código que estou usando para definir o primeiro caractere-----ObjectSetText("sinal "+x+"0",CharToStr(104),symbolSize, "Wingdings",Yellow);.
Gostaria de acrescentar (236) e usar uma cor diferente para ele.
É possível fazer? Se for, por favor, ajude.
Obrigado por procurar,
gever17
Sleep | IsTradeContextBusy
Saudação aos CodeMasters e todo o resto!
Tenho um EA baseado em Fractals, é usado em 1 plataforma MT4, e em múltiplos pares de moedas, no tempo D1.
Uma vez que mais de uma cópia do EA é comercializada no mesmo momento, recebo a notificação "Trade Context Is Busy" em meu Diário.
Gostaria de inserir a função Sleep ou IsTradeContextBusy em minha EA, mas não sei onde colocá-la:
- após a função Enviar pedido, separadamente para a função Vender e Comprar?
- após a função de Enviar pedido de Venda e Compra?
- como resolver este problema - com
se (IsTradeContextBusy() == verdadeiro) Dormir (5000); retornar;
???
Por favor, me aconselhe ou me indique uma solução.
Muito obrigado por sua ajuda,
Divirta-se,
Simon
EA anexado.
Aconselhamento necessário !
Olá,
Eu realmente apreciaria a ajuda de um programador com um problema pelo qual estou perdendo dinheiro. É que eu tenho uma EA que deveria abrir posições a um certo nível de preço, mas às vezes a serra de chicote faz com que ela abra muitas posições. Eu gostaria que ele abrisse apenas uma. Alguém pode me dizer se isso pode ser corrigido com uma linha de código ou se eu preciso contratar um programador?
Obrigado.
Pls adv
Oi pessoal, eu realmente não sei como MagicNumber funciona, bcos parece que DOESNT WORK???? Eu fiz 2 simples EA anexados, ainda estou aprendendo.
1. Compre quando o preço for acima de 100SMA
2. Vender quando o preço também for superior a 100SMA
significa que quando você os anexa a 2 diferentes gráficos Eurusd, deve um Comprar e outro Vender ao mesmo tempo. Como teoria, cada EA trabalha de forma independente.
Mas não funciona... Parece que quando Vender executado em 1º lugar, a EA Compra não vai funcionar, e vice-versa.
Qualquer um pode recodificar minha EA, o MagicNumber controlador? Algum erro?
Muito obrigado.
Oi pessoal, eu realmente não sei como o MagicNumber funciona, bcos parece que o DOESNT WORK???? Eu fiz 2 simples EA anexados, ainda estou aprendendo.
1. Comprar quando o preço for superior a 100SMA
2. Vender quando o preço também for superior a 100SMA
significa que quando você os anexa a 2 diferentes gráficos Eurusd, deve um Comprar e outro Vender ao mesmo tempo. Como teoria, cada EA trabalha de forma independente.
Mas não funciona... Parece que quando Vender executado em 1º lugar, a EA Compra não vai funcionar, e vice-versa.
Qualquer um pode recodificar minha EA, o MagicNumber controlador? Algum erro?
Muito obrigadoParece que você colocou o número mágico corretamente. O único problema é que você não está verificando se o pedido com o mesmo número mágico existe no pool comercial atual. Você deve caminhar por todas as ordens abertas e verificar se OrderMagicNumber() == Seu número mágico antes de entrar em uma nova negociação.