Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 256
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
На старом ноуте с процессором i3 до сих пор был установлен WinXP 32 бит, не поддерживаемый МТ5. Недавно увеличил память до 6 Гб, хочу установить 64 бит ОС, в которой бы работали МТ4 и МТ5. Что предпочтительней - Win7 или Win8.1
мне 7ка ближе. В конторе и 8ка и 10ка и 7ка. Терминалы на 7ке стабильней. По непонятным причинам тестеры в 7ке быстрее на слабых компах. 8ка вообще переходная, как то не очень. Жрет ресурсов больше всех. 10ка сама по себе требует для себя ресурсов больше.
На старом ноуте с процессором i3 до сих пор был установлен WinXP 32 бит, не поддерживаемый МТ5. Недавно увеличил память до 6 Гб, хочу установить 64 бит ОС, в которой бы работали МТ4 и МТ5. Что предпочтительней - Win7 или Win8.1 ?
Заходите на сайт производителя вашего ноута и смотрите под какую максимальную ОС есть официальные драйвера, та ОС и будет предпочтительная. Если драйвера есть под Win 8.1 то можно попробовать Win 10. Если драйвера заканчиваются на Win 7 то выбор ОС небольшой.
добрый день, помогите пожалуйста.
Нужно добавить тейк профит в этот советник и вывести параметры для изменения при запуске советника.
есть два предупреждения return value of 'OrderClose' should be checked также прошу исправить
extern double Lots = 0.1;
extern double MaximumRisk = 0.3;
extern double DecreaseFactor = 100;
double st1,st2;
//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
//+------------------------------------------------------------------+
//| Calculate optimal lot size |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots;
int orders=HistoryTotal(); // history orders total
int losses=0; // number of losses orders without a break
//---- select lot size
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,3);
//---- calcuulate number of losses orders without a break
if(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//---- return lot size
if(lot<0.1) lot=0.1;
return(lot);
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void CheckForOpen()
{
int res;
if(Volume[0]>1) return;
//---- покупаем -----------------------
if ( (iStochastic(NULL,0,15,26,10,MODE_SMA,0,MODE_MAIN,0)>iStochastic(NULL,0,15,26,10,MODE_SMA,0,MODE_SIGNAL,0)))
if ((Open[0]<Open[1])&&(Close[0]<Close[1]))
//
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,15,0,"",0,0,Blue);
return;
}
//---- продаем ------------------------
if ((iStochastic(NULL,0,15,26,10,MODE_SMA,0,MODE_MAIN,0)<iStochastic(NULL,0,15,26,10,MODE_SMA,0,MODE_SIGNAL,0)))
if((Open[0]>Open[1])&&(Close[0]>Close[1]))
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,15,0,"",0,0,Red);
return;
}
}
//------------Закрытие позиций----------------------------------------
void CheckForClose2()
{
if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,Blue);
//CheckForOpen();
}
//
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void CheckForClose1()
{
if(Volume[0]>1) return;
//проверка на проигрыш
if ((AccountProfit()<0)&&(MathAbs(AccountProfit())>=(AccountMargin()*MaximumRisk)))
{
CheckForClose2();
Print(" убыток", AccountProfit());
}/**/
//---- check order type
if(OrderType()==OP_BUY)
{
if ((iStochastic(NULL,0,15,26,10,MODE_SMA,0,MODE_MAIN,0)<iStochastic(NULL,0,15,26,10,MODE_SMA,0,MODE_SIGNAL,0)))
if ((Open[0]>Open[1])&&(Close[0]>Close[1]))
CheckForClose2();
}
if(OrderType()==OP_SELL)
{
if ((iStochastic(NULL,0,15,26,10,MODE_SMA,0,MODE_MAIN,0)>iStochastic(NULL,0,15,26,10,MODE_SMA,0,MODE_SIGNAL,0)))
if ((Open[0]<Open[1])&&(Close[0]<Close[1]))
CheckForClose2();
}
}
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void start()
{
//---- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose1();
//---
}
//+-----------------------------------------------+
Добавил вычисление СЛ и ТП, но не мешало бы добавить их проверку. Как это сделать можно прочитать в статье https://www.mql5.com/ru/articles/2555#invalid_SL_TP_for_position.
Предупреждение ваше не критично. Просто результат OrderClose игнорируется, поэтому и предупреждение. Можете сделать, например, чтобы функция CheckForClose2 возвращала результат выполнения OrderClose. А можете оставить как есть.
Еще, что я заметил, это странные названия функций CheckForClose2, CheckForOpen и т.п. Слово "Check" значит проверять. А у вас они выполняют торговые операции.
Всем здравствуйте. Может кто-нибудь помочь подредактировать советника. Нужно убрать функцию открытия ордеров, чтобы советник сам не открывал ордера, а работал только с открытыми вручную ордерами. Заранее спасибо.
Убираем функцию открытия ордеров и устанавливаем magic в 0. Робот будет подхватывать открытые вручную ордера и сопровождать их. Если нужно, чтобы робот сопровождал только отдельные ордера, а не все подряд, то делаем вход в Buy и Sell, например, по нажатию соответствующей кнопки которые робот должен создать и обрабатывать в OnChartEvent событие CHARTEVENT_OBJECT_CLICK каждой из них. Magic в этом случае должен быть больше 0, чтобы работать только со своими ордерами.
Приветствую. Может кто подсказать, как добавить функцию торговли по времени в советник mt4. Чтобы советник работал допустим с 00.00 до 23.00, а оставшийся час ничего не делал. Может есть у кого кусок кода и как его реализовать. Спасибо.
https://www.mql5.com/ru/forum/131859/page9#434297
isTradeTimeString()
isTradeTimeInt()
Здравствуйте.
Такой глюк... Тестирую одного! Эксперта на 3-х компьютерах. На 2-х работают по коду четко, а на одном постоянно какие то косяки с расчетами - в основном неправильно рассчитывает стоп лосы, или ложные срабатывания.
Железо не новое, но и не древнее.
Кто то сталкивался с таким?
Здравствуйте.
Такой глюк... Тестирую одного! Эксперта на 3-х компьютерах. На 2-х работают по коду четко, а на одном постоянно какие то косяки с расчетами - в основном неправильно рассчитывает стоп лосы, или ложные срабатывания.
Железо не новое, но и не древнее.
Кто то сталкивался с таким?
Все три подключены к одному серверу брокера/дилера? (Т.е., история одна и та же?) Если нет - первым делом в эту сторону копать.