Вопрос по коду советников - страница 3

 

Какой извращенный стиль! ))))

NormalizeDouble(Ask,Digits); //для цены <- ЧТО ЭТО?!!!
NormalizeDouble(L1,2); //для лота. <- ЧТО ЭТО?!!!
ticket.1=OrderSend ("AUDCAD", OP_BUY, L1, Ask, 3, 0, 0, 0, 0, CLR_NONE);

Нормализовали, ок, но куда результат поместили?

 
ktest0:

Какой извращенный стиль! ))))

NormalizeDouble(Ask,Digits); //для цены <- ЧТО ЭТО?!!!
NormalizeDouble(L1,2); //для лота. <- ЧТО ЭТО?!!!
ticket.1=OrderSend ("AUDCAD", OP_BUY, L1, Ask, 3, 0, 0, 0, 0, CLR_NONE);

Нормализовали, ок, но куда результат поместили?


))) первая строчка - нормализация цены, вторая - нормализация лота )))


В код добавил в раздел переменные:

extern double ask=0.0;

строчки:

NormalizeDouble(Ask,Digits); //для цены <- ЧТО ЭТО?!!!

NormalizeDouble(L1,2); //для лота. <- ЧТО ЭТО?!!!

Поменял на:

ask=NormalizeDouble(Ask,Digits); //для цены

L1=NormalizeDouble(L1,2); //для лота.


И все равно не работает. (((



 

Что пишет GetLastError сразу после попытки открыть ордер?

И еще - не используйте имена переменных сходных с зарезервированными словами - рискуете малой ошибкой обрести большие (в обнаружении) сложности.

(я про Ask и ask в данном случае)

Очень, нет - ОЧЕНЬ(!!!!) рекомендую использовать правила написания хорошего кода, иначе проекты выше 2-3 сотен строк кода будут приносить "удовольствие" на уровне "испанского сапога". Достаточно подробно тут -> http://rsdn.ru/article/mag/200401/codestyle.XML

 
ktest0:

Что пишет GetLastError сразу после попытки открыть ордер?

И еще - не используйте имена переменных сходных с зарезервированными словами - рискуете малой ошибкой обрести большие (в обнаружении) сложности.

(я про Ask и ask в данном случае)

Очень, нет - ОЧЕНЬ(!!!!) рекомендую использовать правила написания хорошего кода, иначе проекты выше 2-3 сотен строк кода будут приносить "удовольствие" на уровне "испанского сапога". Достаточно подробно тут -> http://rsdn.ru/article/mag/200401/codestyle.XML


Интересно, но почему то в одном терминале нормализованные мной ордера (без присвоения переменной) открываются, а в другом - нет.


Программу модифицировал, GetLastError 131. И что это за ошибка? Тут нет https://book.mql4.com/ru/trading/ordersend описания ошибки 131.


extern double L1=0.01;
extern double ask.1=0.0;
extern int ticket.1;
extern int M=0;
int MassivTicketov[3]={0, 0, 0};
int init()
{
return(0);
}

int start()
{
Alert(" 1 ");
RefreshRates(); // Обновление данных
ask.1=NormalizeDouble(Ask,Digits); //для цены
L1=NormalizeDouble(L1,2); //для лота.
ticket.1=OrderSend ("AUDCAD", OP_BUY, L1, Ask, 3, 0, 0, 0, 0, CLR_NONE);
Alert (GetLastError());
Alert(" 1.2 ");
RefreshRates(); // Обновление данных
L1=NormalizeDouble(Bid,Digits); //для цены
ask.1=NormalizeDouble(L1,2); //для лота.
ticket.1=MassivTicketov[M]; M++;
OrderSelect(ticket.1, SELECT_BY_TICKET);
OrderClose (ticket.1, L1, Bid, 3);
return(0);
}
int deinit()
{
return(0);
}

Ссылку http://rsdn.ru/article/mag/200401/codestyle.XML начал изучать.

 

Ну как нет ошибки 131:

Смотрите.

У разных ДЦ может быть разный шаг изменения лота. Может 0.01, может 0.1, и даже 1.0))

 

Коды ошибок -> https://docs.mql4.com/ru/constants/errors

Маркетинфо - определения минимального и максимального лота, а так-же шага лота для вашего ДЦ -> https://docs.mql4.com/ru/common/MarketInfo

Оперируя этим можно устранить ошибку.

 
Ozero:

И все равно не работает. (((




добавьте в start() до открытия ордеров строку

L1 = MarketInfo(Symbol(),MODE_MINLOT);
Причина обращения: