Ответить
16.03.2016, 16:00
Аватар для djdfcbr
djdfcbr djdfcbr вне форума Интересующийся
Регистрация: 20.03.2010 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 1

По умолчанию Почему не открывает лот?

extern bool NP = true;//Первый BUY
extern double Lot = 1;//Лот в %n
extern int TP = 20;//Тейк профит
extern int SL = 20;//Стоп лосс
extern int ExpertID = 546847;//Магик номер

int start()
{

//Лот
double Lot2;
Lot2 = AccountBalance()*Lot/100;
if(Lot2 < MarketInfo(Symbol(),MODE_MINLOT))Lot2 = MarketInfo(Symbol(),MODE_MINLOT);
//------------------------------------------------------------------+
//Первые ордера

if (NP == true)
OrderSend(Symbol(),(OP_BUY), Lot2,Ask,3,SL,TP,"",ExpertID,Lime,0);

if (NP == false)
OrderSend(Symbol(),(OP_SELL), Lot2,Ask,3,SL,TP,"",ExpertID,Red,0);
}
16.03.2016, 16:09
Аватар для zQuant
zQuant zQuant вне форума Местный житель
Регистрация: 21.01.2016 / Адрес: https://www.mql5.com/ / Сообщений: 393
Поблагодарили 238 раз(а) / Репутация: 238
extern bool NP = true;//Первый BUY
extern double Lot = 1;//Лот в %n
extern int TP = 20;//Тейк профит
extern int SL = 20;//Стоп лосс
extern int ExpertID = 546847;//Магик номер

int start()
{

//Лот
double Lot2;
Lot2 = AccountBalance()*Lot/100;
if(Lot2 < MarketInfo(Symbol(),MODE_MINLOT))Lot2 = MarketInfo(Symbol(),MODE_MINLOT);
//------------------------------------------------------------------+
//Первые ордера

if (NP == true)
OrderSend(Symbol(),(OP_BUY), Lot2,Ask,3,SL,TP,"",ExpertID,Lime,0);

if (NP == false)
OrderSend(Symbol(),(OP_SELL), Lot2,Ask,3,SL,TP,"",ExpertID,Red,0);
}
Что в ошибках пишет?
SELL надо открывать по Bid.

СЛ и ТП если просто числа, то неправильно. А их вычисления не вижу.

Если стп/есн счета, то нельзя открываться с рынка с выставленными стопами и тейками.


В конце концов. лот не нормализован под брокера.

Проще говоря - неправильно все. Возьмите любой готовый код и посмотрите.
16.03.2016, 16:17
Аватар для djdfcbr
djdfcbr djdfcbr вне форума Интересующийся
Регистрация: 20.03.2010 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 1
Так с готового и взял.
extern int TP = 20;//Тейк профит
extern int SL = 20;//Стоп лосс

if(EndHistoryBS() == 0 && NP == true && Orders(OP_BUY)+Orders(OP_SELL) == 0)OrderOpen(OP_BUY, Lot2, 0, SL, TP, "", ExpertID, Lime,0);

Последний раз редактировалось djdfcbr; 16.03.2016 в 16:20.
16.03.2016, 16:20
Аватар для djdfcbr
djdfcbr djdfcbr вне форума Интересующийся
Регистрация: 20.03.2010 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 1
Как выглядит расчет стопов?
16.03.2016, 19:53
Аватар для zQuant
zQuant zQuant вне форума Местный житель
Регистрация: 21.01.2016 / Адрес: https://www.mql5.com/ / Сообщений: 393
Поблагодарили 238 раз(а) / Репутация: 238
Как выглядит расчет стопов?
Для покупок, например, как то так
double sl = Ask - SL * Point;
double tp = Ask + TP * Point;
16.03.2016, 23:41
Аватар для djdfcbr
djdfcbr djdfcbr вне форума Интересующийся
Регистрация: 20.03.2010 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 1
extern bool NP = true;//Первый BUY
extern double Lot = 1;//Лот в %n
extern int TP = 20;//Тейк профит
extern int SL = 20;//Стоп лосс

extern int ExpertID = 546847;//Магик номер
//±-----------------------------------------------------------------+
//| script program start function |
//±-----------------------------------------------------------------+
int start()
{

//Лот
double Lot2;
Lot2 = AccountBalance()*Lot/100;
if(Lot2 < MarketInfo(Symbol(),MODE_MINLOT))Lot2 = MarketInfo(Symbol(),MODE_MINLOT);
//------------------------------------------------------------------+
//Первые ордера
if (NP == true)
OrderSend(Symbol(),(OP_BUY), Lot2,Ask,3,Bid-SL*Point,Bid+SL*Point,"",ExpertID,Lime,0);
if (NP == false)
OrderSend(Symbol(),(OP_SELL), Lot2,Ask,3,Bid-SL*Point,Bid+SL*Point,"",ExpertID,Red,0);
}


Сейчас открывает только когда NP=true, когда false нет.

И еще взял с учебника
int start() // Спец. функция start()
{ // Открытие BUY
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);
return; // Выход из start()
}
при компилировании пишет ('return' - function must return a value)-'Возвращение' - функция должна возвращать значение
Вообще не понятно что такое "возвращать значение".
17.03.2016, 16:55
Аватар для Monachus
Monachus Monachus на форуме Местный знаток
Регистрация: 17.02.2011 / Адрес: Симферополь / Сообщений: 356
Поблагодарили 591 раз(а) / Репутация: 592
  • Отправить сообщение для Monachus с помощью ICQ
extern bool NP = true;//Первый BUY
extern double Lot = 1;//Лот в %n
extern int TP = 20;//Тейк профит
extern int SL = 20;//Стоп лосс

extern int ExpertID = 546847;//Магик номер
//±-----------------------------------------------------------------+
//| script program start function |
//±-----------------------------------------------------------------+
int start()
{

//Лот
double Lot2;
Lot2 = AccountBalance()*Lot/100;
if(Lot2 < MarketInfo(Symbol(),MODE_MINLOT))Lot2 = MarketInfo(Symbol(),MODE_MINLOT);
//------------------------------------------------------------------+
//Первые ордера
if (NP == true)
OrderSend(Symbol(),(OP_BUY), Lot2,Ask,3,Bid-SL*Point,Bid+SL*Point,"",ExpertID,Lime,0);
if (NP == false)
OrderSend(Symbol(),(OP_SELL), Lot2,Ask,3,Bid-SL*Point,Bid+SL*Point,"",ExpertID,Red,0);
}


Сейчас открывает только когда NP=true, когда false нет.

И еще взял с учебника
int start() // Спец. функция start()
{ // Открытие BUY
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);
return; // Выход из start()
}
при компилировании пишет ('return' - function must return a value)-'Возвращение' - функция должна возвращать значение
Вообще не понятно что такое "возвращать значение".
1.Сейчас открывает только когда NP=true, когда false нет.
все правильно-у Вас так и написано - if (NP == true) OrderSend
2. До сих пор оба ордера открываются по Ask
3.напишите return(0)
4.Вообще не понятно что такое "возвращать значение" - учите MQL
18.03.2016, 10:26
Аватар для djdfcbr
djdfcbr djdfcbr вне форума Интересующийся
Регистрация: 20.03.2010 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 1
С ордерами разобрался. Спасибо zQuant за видео.
Вы наверное думаете что никуда не лазил, сразу на форум, нет, просто везде говорится "функция возвращает значение" подробно не объясняется. Возможно все просто, но здесь просто стопор какой то.

Можно объяснить как ребенку.
18.03.2016, 11:16
Аватар для zQuant
zQuant zQuant вне форума Местный житель
Регистрация: 21.01.2016 / Адрес: https://www.mql5.com/ / Сообщений: 393
Поблагодарили 238 раз(а) / Репутация: 238
С ордерами разобрался. Спасибо zQuant за видео.
Вы наверное думаете что никуда не лазил, сразу на форум, нет, просто везде говорится "функция возвращает значение" подробно не объясняется. Возможно все просто, но здесь просто стопор какой то.

Можно объяснить как ребенку.
В принципе, функция, это кусок кода.
Если функция ничего не возвращает, то ее объявляют с типом
void functionName()
{
}

Если функция должна вернуть что-то, например, стоп лосс, то объявляют тип данных, которой возвращают

double GetStopLoss(int cmd, int SL)
{
double result = Ask - SL * Point;
if(cmd == OP_SELL)
result = Bid + SL * Point;

return(result); --- так это и означает вернуть значение
}

Дальше с эту функцию можно использовать

double currSL = GetStopLoss(OrderType(), 200)...

Если функция Ваша ничего не должна возвращать, то просто объявите ее void.... Если что-то возвращает, или стандартная, а Вы не хотите никак ее использовать, можете просто в конце писать return(0)... то есть Ваши функции всегда будут возвращать 0...

p.s. видео - это не я...
А вообще у Павла на сайте вроде есть уроки по MQL. Правда автор нудный жутко
Ответить


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 08:31. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO