Preciso de conselhos sobre o código: peguei um conselheiro do banco de dados, testei, adicionei, subtraí, alterei os coeficientes para obter uma boa imagem, a imagem parece sair, mas nada funciona na demonstração, é a outra maneira ao redor, é como o mal, estou ajustando tudo de acordo com os artigos ensinados e gráficos bons para um mês por aumentos de 100%. Portanto, é apenas para o testador e é adequado ou deve ser testado de alguma forma diferente ??? Eu também gostaria de refazer o TreilingParabolikSAR para que não pare as perdas ao longo dele, mas leigos a uma determinada distância do preço, talvez alguém lhe diga onde obtê-lo, até agora não encontrou. Aqui está um dos códigos resultantes com bons gráficos - diga-me o que está errado, o que corrigir, embora tudo possa estar errado aqui ...
Existe uma forma relativamente fácil de converter uma data de um formato de string "não normalizado" para um formato de string de data ou pelo menos um formato de string facilmente convertível?
Em particular, se o mês na corda é Jan/Jeb/..., como é que o alimento para o guião? Quer dizer, apenas escolhendo manualmente o mês fora da corda, substituindo-o pelo número correspondente em 12 variações? Ou falta-me alguma forma de especificar o formato para StringToTime, etc.?
Tenho uma construção como esta a manipulá-la agora mesmo:
int nmonth = buff[1]=="Jan"?01:buff[1]=="Feb"?02:buff[1]=="Mar"?03:buff[1]=="Apr"?04:buff[1]=="May"?05:buff[1]=="Jun"?06:
buff[1]=="Jul"?07:buff[1]=="Aug"?08:buff[1]=="Sep"?09:buff[1]=="Oct"?10:buff[1]=="Nov"?11:buff[1]=="Dec"?12:01;
...mas de alguma forma não me agrada, embora funcione de forma convencional.
Não há uma única profissão. Qual poderia ser a razão?
Código EA:
#property copyright""#property link""#property version"1.00"//--- input parametersinputushort StopLoss=600;
inputushort TakeProfit=450;
inputint EA_Magic=12345; // Magic Number советникаinputuchar ma_period_1=5;
inputuchar ma_period_2=15;
inputuchar ma_period_3=30;
inputdouble Lot=0.01;
//--- глобальные переменныеint STP,TKP; // будут использованы для значений Stop Loss и Take Profit//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- Для работы с брокерами, использующими 5-ти значные котировки,//--- умножаем на 10 значения SL и TP
STP = StopLoss;
TKP = TakeProfit;
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
double MA_1_t = iMA(NULL,0,ma_period_1,0,MODE_EMA,PRICE_CLOSE);
double MA_2_t = iMA(NULL,0,ma_period_2,0,MODE_EMA,PRICE_CLOSE);
double MA_3_t = iMA(NULL,0,ma_period_3,0,MODE_EMA,PRICE_CLOSE);
//---MqlTick latest_price; // Будет использоваться для текущих котировокMqlTradeRequest mrequest; // Будет использоваться для отсылки торговых запросовMqlTradeResult mresult; // Будет использоваться для получения результатов выполнения торговых запросовMqlRates mrate[]; // Будет содержать цены, объемы и спред для каждого бараZeroMemory(mrequest); // Инициализация полей структуры mrequest//--- Получить текущее значение котировки в структуру типа MqlTickif(!SymbolInfoTick(_Symbol,latest_price))
{
Alert("Ошибка получения последних котировок - ошибка:",GetLastError(),"!!");
return;
}
//--- есть ли открытые позиции?bool Buy_opened=false; // переменные, в которых будет храниться информация bool Sell_opened=false; // о наличии соответствующих открытых позицийif(PositionSelect(_Symbol)==true) // есть открытая позиция
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
Buy_opened=true; //это длинная позиция
}
elseif(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
Sell_opened=true; // это короткая позиция
}
}
bool Buy_Condition_1=(MA_1_t > MA_2_t && MA_2_t > MA_3_t);
//--- собираем все вместеif(Buy_Condition_1)
{
// есть ли в данный момент открытая позиция на покупку?if(Buy_opened)
{
Alert("Уже есть позиция на продажу!!!");
return; // не добавлять к открытой позиции на продажу
}
mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // последняя цена ask
mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
mrequest.symbol = _Symbol; // символ
mrequest.volume = Lot; // количество лотов для торговли
mrequest.magic = EA_Magic; // Magic Number
mrequest.type = ORDER_TYPE_BUY; // ордер на покупку
mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
mrequest.deviation=100; // проскальзывание от текущей цены//--- отсылаем ордерOrderSend(mrequest,mresult);
// анализируем код возврата торгового сервераif(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
{
Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
}
else
{
Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
return;
}
}
}
MA_1_t - período pequeno, MA_2_t - período médio, MA_3_t - período grande.
Se eu fizer as seguintes condições:
depois são abertas as negociações.
As condições são o contrário:
Não há uma única profissão. Qual poderia ser a razão?
Código EA:
Para obter um valor indicador, é necessário criar um cabo indicador no OnInit, e depois copiar o valor para uma matriz usando CopyBuffer no OnTick. O artigo Trading Operations in MQL5 apenas mostra como escrever um código mais fácil para abrir/fechar uma posição/ordem.
paladin800: Para obter o valor do indicador é necessário criar um manípulo indicador no OnInit, e depois copiar o valor para uma matriz usando CopyBuffer no OnTick. O artigo Trading Operations in MQL5 apenas mostra como escrever um código mais fácil para abrir/fechar uma posição/ordem.
Obrigado! É bastante diferente na MQL4, é mais simples. Mas a MQL5 é mais rápida e mais precisa, na minha opinião.
Não percebo porque é que os dados sobre a barra de zero não estão correctos, por favor informe
Este resultado é meu
2013.10.27 17:45:26 Core 1 2013.01.01.01 00:00:00 369878 2012.12.31 19:00:00 2012.01.02 00:00:00
2013.10.27 17:45:26 Core 1 2013.01.01.01 00:00:00 369878
Esqueci-me de contar tudo no perito.
Ou por outras palavras, ao testar EA de XXX data para YYYY data, até que profundidade a partir de XXX dados pode ser descarregado?????????????????
Preciso de conselhos sobre o código: peguei um conselheiro do banco de dados, testei, adicionei, subtraí, alterei os coeficientes para obter uma boa imagem, a imagem parece sair, mas nada funciona na demonstração, é a outra maneira ao redor, é como o mal, estou ajustando tudo de acordo com os artigos ensinados e gráficos bons para um mês por aumentos de 100%. Portanto, é apenas para o testador e é adequado ou deve ser testado de alguma forma diferente ??? Eu também gostaria de refazer o TreilingParabolikSAR para que não pare as perdas ao longo dele, mas leigos a uma determinada distância do preço, talvez alguém lhe diga onde obtê-lo, até agora não encontrou. Aqui está um dos códigos resultantes com bons gráficos - diga-me o que está errado, o que corrigir, embora tudo possa estar errado aqui ...
Testando um certo valor, acima do qual é aberto um comércio.
Parâmetros de entrada:
bool Sell_Condition = (signal >= sgl);Eu escolho o valor da variável sgl no testador:
variável tipo "sinal" duplo.
Ao executar um único teste vejo que com sgl=0,003 a entrada é executada a 0,0024, 0,0027, 0,0015, etc.
A lógica de activação é correcta, mas a precisão de execução não o é.
Como posso melhorar a precisão da execução?
...
Como se melhora a precisão do seu desempenho?
Experimente-o:
Existe uma forma relativamente fácil de converter uma data de um formato de string "não normalizado" para um formato de string de data ou pelo menos um formato de string facilmente convertível?
Em particular, se o mês na corda é Jan/Jeb/..., como é que o alimento para o guião? Quer dizer, apenas escolhendo manualmente o mês fora da corda, substituindo-o pelo número correspondente em 12 variações? Ou falta-me alguma forma de especificar o formato para StringToTime, etc.?
Tenho uma construção como esta a manipulá-la agora mesmo:
...mas de alguma forma não me agrada, embora funcione de forma convencional.
MA_1_t - período pequeno, MA_2_t - período médio, MA_3_t - período grande.
Se eu fizer as seguintes condições:
bool Buy_Condition_1=(MA_1_t < MA_2_t && MA_2_t < MA_3_t);depois são abertas as negociações.
As condições são invertidas:
bool Buy_Condition_1=(MA_1_t > MA_2_t && MA_2_t > MA_3_t);Não há uma única profissão. Qual poderia ser a razão?
Código EA:
MA_1_t - período pequeno, MA_2_t - período médio, MA_3_t - período grande.
Se eu fizer as seguintes condições:
depois são abertas as negociações.
As condições são o contrário:
Não há uma única profissão. Qual poderia ser a razão?
Código EA:
Para obter o valor do indicador é necessário criar um manípulo indicador no OnInit, e depois copiar o valor para uma matriz usando CopyBuffer no OnTick. O artigo Trading Operations in MQL5 apenas mostra como escrever um código mais fácil para abrir/fechar uma posição/ordem.
Pode dizer-me como fechar uma ordem pendente que não tenha sido aberta? Estou a tentar fazê-lo desta forma:
Ou na linha mrequest.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digitos); devo escrever outras informações? Obrigado.Pode dizer-me como fechar uma ordem pendente que não tenha sido aberta? Estou a tentar fazê-lo desta forma:
Ou na linha mrequest.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digitos); devo escrever outras informações? Obrigado.