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;
#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;
}
}
}
我不明白为什么零条上的数据与现实不相符。
我得到这样的结果
2013.10.27 17:45:26 核心 1 2013.01.01 00:00:00 369878 2012.12.31 19:00:00 2012.01.02 00:00:00
2013.10.27 17:45:26 核心 1 2013.01.01 00:00:00 369878
我忘了在专家那里讲述整个事情。
或者换句话说,当测试EA 从XXX日期到YYY日期时,从XXX数据可以下载到什么深度?????????????????
我需要有关代码的建议:我从数据库中获取了一个顾问,对其进行了测试,添加了它,减去了它,更改了系数以获得良好的图像,图像似乎变成了,但在演示中没有任何效果,这是另一个一路走来,这就像邪恶一样,我正在根据所教授的文章和图表调整一切,一个月的图表增加了 100%。所以它只适用于测试人员,它是合适的,还是应该以不同的方式进行测试???我还想重新制作 TreilingParabolikSAR,这样就不会止损沿着它移动,而是在离价格给定距离的外行人,也许有人会告诉你从哪里得到它,到目前为止它还没有遇到。这是带有良好图表的结果代码之一 - 告诉我哪里出了问题,要修复什么,尽管这里的一切都可能是错误的......
测试一个特定的值,超过这个值就开仓交易。
输入的参数。
bool Sell_Condition = (signal >= sgl);我在测试器中选择变量sgl的值。
变量类型 "信号 "双。
当运行单个测试时,我看到在sgl=0.003 的情况下,在0.0024、0.0027、0.0015 等位置进行输入。
触发逻辑是正确的,但执行精度却不正确。
如何提高执行的准确性?
...
你如何提高你的表现的准确性?
试试吧。
有没有一种相对简单的方法可以将日期从 "非标准 "的字符串格式转换为日期时间,或者至少是一种容易转换的字符串格式?
特别是,如果字符串中的月份是Jan/Jeb/......,我如何将其送入脚本?我的意思是,只有通过手动从字符串中挑选出月份,通过在12种变化中替换成适当的数字?或者我是不是在哪里错过了如何指定StringToTime 等的格式?
我现在已经有一个这样的建筑在处理。
...但不知何故,我不喜欢它,尽管它在传统上是有效的。
MA_1_t - 小周期,MA_2_t - 中周期,MA_3_t - 大周期。
如果我做到以下条件。
bool Buy_Condition_1=(MA_1_t < MA_2_t && MA_2_t < MA_3_t);那么交易就开始了。
条件是相反的。
bool Buy_Condition_1=(MA_1_t > MA_2_t && MA_2_t > MA_3_t);没有一笔交易。可能的原因是什么?
EA代码。
MA_1_t - 小周期,MA_2_t - 中周期,MA_3_t - 大周期。
如果我做到以下条件。
那么交易就开始了。
条件则是相反的。
没有一笔交易。可能的原因是什么?
EA代码。
为了获得指标的值,你需要在OnInit中创建一个指标句柄,然后在OnTick中使用CopyBuffer 将值复制到一个数组中。MQL5中的交易操作 一文只是 展示了如何写出更简单的代码来开仓/平仓/订单。
你能告诉我如何关闭一个没有开仓的挂单吗?我正在尝试这样做。
或者在行mrequest.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digits);我是否应该写其他信息?谢谢你。你能告诉我如何关闭一个没有开仓的挂单吗?我正在尝试这样做。
或者在行mrequest.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digits);我是否应该写其他信息?谢谢你。