Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 1129
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
Há uma possibilidade, se a EA (ou roteiro) estiver à sua disposição do ponto de vista de tomar e corrigir o código fonte. Você precisa colocar uma condição em torno de todos os alertas verificando se o botão é pressionado. Se o botão não for pressionado, não chame os alertas.
ObrigadoVladimir - Acho que vou usar seu método ou colocar toda a EA nesta condição.
Graças a Vitalie Postolache- Vou estudar sua recomendação. Eu ainda não estudei o mql5.
Preciso escrever os dados em um arquivo hst, para que eu possa usar os dados para construir um gráfico autônomo.
Eu tenho lutado pelo segundo dia, mas nada funciona.
Código:
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
ulong last_fpos=0; //
int HandleHistory=-1;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
string symbol=Symbol();
int per=Period()*9;
ResetLastError();
if(CreateHeader()==true)//если создали заголовок
{
HandleHistory=FileOpenHistory(symbol+(string)per+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
if(HandleHistory!=INVALID_HANDLE)
{
for(int i=199;i>0;i--)//заполняем данными
{
MqlRates r;
r.time=Time[i];//просто пытаюсь записать, это так для примера
r.open=Open[i];//просто пытаюсь записать, это так для примера
r.low=Low[i];
r.high=High[i];
r.close=Close[i];
r.tick_volume=(long)10;
r.spread=0;
r.real_volume=(long)10;
uint byteswritten=FileWriteStruct(HandleHistory,r);
Print("FileOpen OK ",byteswritten," ",Time[i]);
}
FileClose(HandleHistory);
// FileFlush(HandleHistory);
}
else Print("Операция FileOpen неудачна, ошибка ",GetLastError());
}
// long id=ChartOpen(symbol,per);
//Alert(id);
}
//+------------------------------------------------------------------+
bool CreateHeader()//создаем файл с историей hst(заголовок)
{
int file_version=401;
string c_copyright;
string c_symbol=Symbol();
int i_period=Period()*9;
int i_digits=Digits;
int i_unused[13];
//---
ResetLastError();
HandleHistory=FileOpenHistory(c_symbol+(string)i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
if(HandleHistory<0)
{
Print("Error open ",c_symbol+(string)i_period,".hst file ",GetLastError());
return(false);
}
c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
ArrayInitialize(i_unused,0);
//--- write history file header
FileWriteInteger(HandleHistory,file_version,LONG_VALUE);
FileWriteString(HandleHistory,c_copyright,64);
FileWriteString(HandleHistory,c_symbol,12);
FileWriteInteger(HandleHistory,i_period,LONG_VALUE);
FileWriteInteger(HandleHistory,i_digits,LONG_VALUE);
FileWriteInteger(HandleHistory,0,LONG_VALUE);
FileWriteInteger(HandleHistory,0,LONG_VALUE);
FileWriteArray(HandleHistory,i_unused,0,13);
return(true);
}
Como resultado da execução, é criado um arquivo com histórico, mas não é criado um gráfico autônomo.
Aqui estão as informações sobre o gráfico
Por alguma razão, os dados são de 2003!
Como resultado, recebo um erro quando lanço o gráfico HistóricoBase: 196 erros em 'NZDCHF45'.
Eu entendo que escrevi algo errado. Não sei como escrevê-lo corretamente, tenho muito pouca informação. Quem sabe - por favor, avise.
talvez este seja um trecho de um projeto muito, muito antigo (C, gcc) :
/* .hst file header
*/
struct HstHeader {
uint32_t version; // +0 4 LE : database version
char copyright[64]; // +4 64 : copyright data
char symbol[12]; // +68 12 : symbol (EURUSD..)
uint32_t period; // +80 4 LE : timeframe (sec. in period)
uint32_t digits; // +84 4 LE : decimals after .
datetime timesign; // +88 4 LE : creation time sign.
datetime last_sync; // +92 4 LE : last sync. timestamp
uint8_t unused[52]; // +96 52 : reserved for feauture use
// total 148 bytes, packed, aligned by 1
};
/* .hst bar array (file payload)
*/
// when HstHeader.version==400
struct HstRates400 {
datetime ctm; // +0 4 LE : start (creation) time
double open; // +4 8 LE : open price
double low; // +12 8 LE : lowest price
double high; // +20 8 LE : highst price
double close; // +28 8 LE : close price
double volume; // +36 8 LE : volume (nr of ticks)
// total 44 bytes,packed, aligned by 1
} __attribute__((packed));
// when HstHeader.version==401
struct HstRates401 {
datetime ctm; // +0 8 LE : bar start time (with ms?)
double open; // +8 8 LE : open price
double low; // +16 8 LE : lowest price
double high; // +24 8 LE : highst price
double close; // +32 8 LE : close price
uint64_t volume; // +40 8 LE : volume (nr of ticks)
uint32_t spread; // +48 4 LE : spread
long real_volume; // +52 8 LE : real volume
// total 60 bytes,packed,aligned by 1
} __attribute__((packed));
Olá a todos, apenas continuando a refinar o que já temos
Temos uma grade irregular de ordens e uma linha horizontal que pode estar em qualquer lugar
Precisamos implementar isto:
se o preço estiver abaixo da linha fechar todos os pedidos
As dificuldades são as seguintes
1) se as ordens são de tipo não-uniforme e já na definição da linha tudo está feito, e não quando colocamos a marcação e definimos a linha (neste caso devemos também colocar a bandeira on/off)
2) Implementação de uma inscrição na parte superior direita da linha por tipo (se o pedido for fechado a este preço, o resultado será o mesmo para o saldo, ou seja, temos que mudar o mostrador a cada tic e também ao mover a linha; geralmente é semelhante a uma parada ou sling se o pedido for feito manualmente, apenas flutuando e com a possibilidade de gatilhos errôneos inicialmente)
O robô está lá, exceto pela etiqueta numérica tudo já está desenhado, a questão está na correta atribuição de valores e processamento de informações de toda a grade.
1) se as ordens são de tipo irregular
Olá. Não entendo porque o iTime às vezes dá tempo errado. Na abertura de uma nova vela PERÍODO_H1 deve mostrar o tempo no log Print(iTime(NULL,PERÍODO_M1,30)). Ele exibe tudo corretamente nos testes, mas na realidade o tempo às vezes é diferente até mesmo por várias horas. Por que é assim?
Use oCopyTime, também notei este problema ao construir objetos gráficos e oCopyTime resolveu o problema
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
Use oCopyTime, também notei este problema ao construir objetos gráficos e oCopyTime resolveu o problema
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
Esta é a primeira vez que ouço falar deles.
Aqui, o gráfico tem 5 dígitos e o indicador tem 4.
Como faço para que a escala do meu indicador mostre 5 casas decimais?
Aqui, o gráfico tem 5 dígitos e o indicador tem 4.