Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 255
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Как вы вычисляете tp?
указываю в переменной double tp=50;
указываю в переменной double tp=50;
теперь пишет
2021.12.04 13:56:09.509 TestGenerator: unmatched data error (high value 1.13110 at 2021.12.03 23:45 is not reached from the least timeframe, high price 1.13104 mismatches)
поставил на минутку.. работает..
но уровень стопа другой -
1 2021.09.16 05:59 sell 1 0.01 1.18190 51.18192 1.18140 0.00 10000.00
теперь пишет
2021.12.04 13:56:09.509 TestGenerator: unmatched data error (high value 1.13110 at 2021.12.03 23:45 is not reached from the least timeframe, high price 1.13104 mismatches)
Правил всё онлайн, так что сам проверяйте.
Правил всё онлайн, так что сам проверяйте.
Спасибо!
Добрый вечер господа, подскажите пожалуйста почему советник при открытии второго ордера выдает ошибку?
сам текст советника
//+----------------------Параметры-----------------------------------+
input int TakeProfit = 100; // Прибыль в пунктах
input int StopLoss = 50; // Убыток в пунктах
input double Lot = 0.01; // Стартовый лот
input double Multilot = 1.95; // Множитель стартового лота
input int Slippage =30; // Проскальзывание
input int MagicNumber = 333 ; // Уникальный номер
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
double tp=0;
double sl=0;
int OnInit()
{
tp=NormalizeDouble(TakeProfit*Point(),Digits());
sl=NormalizeDouble(StopLoss*Point(),Digits());
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--цикл проверяет есть ли открытые ордера при включении советника и подсчитывает их.
int buy=0; //Количество ордеров BUY
int sell=0; //Количество ордеров SELL
for(int i = OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol())
if(OrderMagicNumber()== MagicNumber)
{
if(OrderType()==OP_BUY)
buy++;
if(OrderType()==OP_SELL)
sell++;
}
//--цикл получает данные последнего закрытого ордера при включении советника
int type=-1; //Тип закрытого ордера
int history_close_orders=0; //Количество закрытых ордеров
double lot=0; //Лот последнего закрытого ордера
double profit =0; //Профит с которым закрылся последний ордер
datetime time=0; //Время закрытия последнего ордера
for(int i = OrdersHistoryTotal()-1; i>=0; i--)
if(OrderSelect(i, SELECT_BY_POS,MODE_HISTORY))
if(OrderSymbol()==Symbol())
if(OrderMagicNumber()== MagicNumber)
if(OrderCloseTime()>time)
{
history_close_orders++;
time = OrderCloseTime();//время закрытия последнего ордера
lot = OrderLots();// Лот последнего закрытого ордера
type= OrderType();// Тип последнего закрытого ордера
profit=OrderProfit()*OrderSwap()*OrderCommission();//Результат закрытого ордера
}
// Расчитываем лот с которым будет работать советник
double Lots_Work=0;// рабочий лот
if(history_close_orders==0 || profit>0)// если нет закрытых ордеров, или последний ордер закрылся в плюс
Lots_Work=Lot;// рабочий лот равняется начальному лоту
if(history_close_orders>0 && profit<0) // если последний ордер закрылся в минус
Lots_Work=1;//рабочий лот будет равен лот последнего ордера умноженного на множитель
// Открытие первого ордера на покупку
if(buy==0 || profit>0)
{
int ticket=OrderSend(Symbol(),OP_BUY,Lots_Work,Ask,Slippage,0,0,"Советник Test fair",MagicNumber,0,clrGreen);
if(ticket<0)
Print("OrderSend завершилась с ошибкой #",GetLastError());
else
Print("Функция OrderSend успешно выполнена");
}
// Открытие второго и последующих ордеров на покупку
if(buy==0 && type==OP_BUY && profit<0)
{
int ticket=OrderSend(Symbol(),OP_BUY,Lots_Work,Ask,Slippage,0,0,"Советник Test fair",MagicNumber,0,clrGreen);
if(ticket<0)
Print("OrderSend завершилась с ошибкой #",GetLastError());
else
Print("Функция OrderSend успешно выполнена");
}
// Открытие первого ордера на продажу
if(sell==0 || profit>0)
{
int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0,"Советник Test fair",MagicNumber,0,clrRed);
if(ticket<0)
Print("OrderSend завершилась с ошибкой #",GetLastError());
else
Print("Функция OrderSend успешно выполнена");
}
// Открытие второго и последующих ордеров на покупку
if(sell==0 && (type==OP_SELL && profit<0))
{
int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0,"Советник Test fair",MagicNumber,0,clrRed);
if(ticket<0)
Print("OrderSend завершилась с ошибкой #",GetLastError());
else
Print("Функция OrderSend успешно выполнена");
}
//--Модифицируем ордер дрбавляя тейк профит и стоп лосс
for(int i = OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i, SELECT_BY_POS))
if(OrderSymbol()==Symbol())
if(OrderMagicNumber()== MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(OrderStopLoss()==0 || OrderTakeProfit()==0)
if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-sl,Digits()),NormalizeDouble(OrderOpenPrice()+tp,Digits()),0,clrGreen))
Print("OrderModify OK!");
else
Print("OrderModify BUY завершилась с ошибкой #", GetLastError());
}
if(OrderType()==OP_SELL)
{
if(OrderStopLoss()==0 || OrderTakeProfit()==0)
if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+sl,Digits()),NormalizeDouble(OrderOpenPrice()-tp,Digits()),0,clrRed))
Print("OrderModify OK!");
else
Print("OrderModify SELL завершилась с ошибкой #", GetLastError());
}
}
}
//+------------------------------------------------------------------+
На старом ноуте с процессором i3 до сих пор был установлен WinXP 32 бит, не поддерживаемый МТ5. Недавно увеличил память до 6 Гб, хочу установить 64 бит ОС, в которой бы работали МТ4 и МТ5. Что предпочтительней - Win7 или Win8.1 ?
10
10