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

djdfcbr

Прохожий
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);
}
 

zQuant

Местный житель
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.

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

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


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

Проще говоря - неправильно все. Возьмите любой готовый код и посмотрите.
 

djdfcbr

Прохожий
Так с готового и взял.
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

Прохожий
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)-'Возвращение' - функция должна возвращать значение
Вообще не понятно что такое "возвращать значение".
 

Monachus

Местный знаток
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
 

djdfcbr

Прохожий
С ордерами разобрался. Спасибо zQuant за видео.
Вы наверное думаете что никуда не лазил, сразу на форум, нет, просто везде говорится "функция возвращает значение" подробно не объясняется. Возможно все просто, но здесь просто стопор какой то.

Можно объяснить как ребенку.
 

zQuant

Местный житель
С ордерами разобрался. Спасибо 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. Правда автор нудный жутко
 
Верх