Здравствуйте! Просьба дополнить торговую панель с использованием классов стандартной библиотеки МТ4
из поста блога AM2
mql.opentraders.ru/33213.html
1. Добавить функции на кнопки:
Закрыть:
Sell[X]/Buy[X] = закрыть все Sell/Buy ордера
SPrf[X]/BPrf[X] = закрыть все профитные Sell/Buy ордера
CloseAllProfit=«Prft[X]» = закрыть все профитные ордера
CloseAll=«CLOSE» = закрыть все ордера
CloseStopOrders=«Stp[X]» = удалить все стоп ордера
CloseLimitOrders=«Lim[X]» = удалить все лимит ордера
ClosePendingOrders=«PO[X]» = удалить все отложенные ордера
Открыть:
SellLimit=«S-Lim», SellStop=«S-Stop», BuyLimit=«B-Lim», BuyStop=«B-Stop»
Добавить в параметры:
Отступы от цены: — для Stop ордеров, — для Limit ордеров
//extern int StopDelta = 150; // отступ от цены Stop ордеров
//extern int LimitDelta = 150; // отступ от цены Limit ордеров
Кнопки уже добавлены в панельку, см. рис.
Функции можно взять свои, или из советника Скрипт управления ордерами — скрипт для MetaTrader 4 (пример)(может работать как советник или как скрипт)
www.mql5.com/ru/code/15091
Оттуда же добавить функцию вывода по кнопке вертикального отрезка захвата группы ордеров, которые надо обработать (закрыть)
на кнопку GroupOrdersVLine=
«Group». Кнопка фиксируемая (залипает).
Когда она нажата — выводится вертикальный отрезок(линия) который можно менять по высоте, захватив конкретную группу ордеров.
Тогда по остальным кнопкам/функциям закрытия ордеров закрываются только те ордера, которые захватывает (пересекает) этот отрезок линии. Остальные ордера остаются нетронутыми.
Когда отжата — вертикальный отрезок(линия) удаляется(отстутствует) и по кнопкам/функциям обработки ордеров обрабатываются/закрываются все соответствующие ордера на графике.
Слева вверху также выводятся данные захваченных отрезком(или всех) ордеров (код/функция в советнике)
см. рис.
2. Сделать независимых 2 поля ввода лотности ордеров — для Sell и Buy отдельные.
Начальное значение лот(ов) устанавливается по умолчанию из параметров советника,
при замене значения в полях лотов — значение для ордеров меняется и берётся оттуда (изменённое).
3. Поправить корректность вывода панельки при перемещении и смене ТФ в окне (сейчас остаются какие-то следы), при замене советника на другой или закрытии его — иногда закрывается всё окно графика, где он установлен.
см. рис.
— В приложении: вариант панельки с подготовленным под функции/кнопки кодом TradePanel_1.0.mq4
TradePanel_1.0.mq4 (34 Kb)
В коде советника (панельки) сделаны предварительные заготовки: разметка кнопок, операторы:
class: public CAppDialog стр. 30-100
//+------------------------------------------------------------------+
//| class CTradePanel |
//+------------------------------------------------------------------+
class CTradePanel : public CAppDialog
{
private:
// CLabel Lots_label; // Display label " Lots"
CEdit Lots; // Display volume of next order
// CEdit LotsSell; // Display volume of next order SELL
// CEdit LotsBuy; // Display volume of next order BUY
CButton SELL,BUY; // Sell and Buy Buttons
// CButton CloseAll; // Close buttons
// добавлены кнопки
// 1 колонка
CButton CloseSell; // CloseAllSell buttons
CButton CloseSellProfit; // CloseSellProfit buttons
CButton CloseAll; // Close buttons
CButton SellLimit; // SellLimit buttons
CButton SellStop; // CloseAllSell buttons
CButton CloseStopOrders; // CloseAllStopOrders buttons
CButton ClosePendingOrders; // CloseAllPendingOrders buttons
// 2 колонка
CButton CloseBuy; // CloseAllBuy buttons
CButton CloseBuyProfit; // CloseBuyProfit buttons
CButton CloseAllProfit; // CloseAllProfit buttons
CButton BuyLimit; // BuyLimit buttons
CButton BuyStop; // BuyStop buttons
CButton CloseLimitOrders; // CloseAllLimitOrders buttons
CButton GroupOrdersVLine; // GroupOrdersVerticalLine buttons
//--- Create Label object
bool CreateLabel(const long chart,const int subwindow,CLabel &object,const string text,const uint x,const uint y,label_align align);
//--- Create Button
bool CreateButton(const long chart,const int subwindow,CButton &object,const string text,const uint x,const uint y,const uint x_size,const uint y_size);
//--- Create Edit object
bool CreateEdit(const long chart,const int subwindow,CEdit &object,const string text,const uint x,const uint y,const uint x_size,const uint y_size);
//--- On Event functions
void LotsEndEdit(void); // Edit Lot size
// void LotsSellEndEdit(void); // Edit Lot size Sell
// void LotsBuyEndEdit(void); // Edit Lot size Buy
//--- variables of current values
double cur_lot; // Lot of next order
// double cur_lotsell; // Lot of next order Sell
// double cur_lotbuy; // Lot of next order Buy
void BuyClick(); // Click BUY button
void SellClick(); // Click SELL button
// void CloseClick(); // Click CLOSE button
// добавлены кнопки
// 1 колонка
void CloseSellClick(); // CloseSell buttons
void CloseSellProfitClick(); // CloseSellProfit buttons
void CloseClick(); // Close buttons
void SellLimitClick(); // SellLimit buttons
void SellStopClick(); // SellStop buttons
void CloseStopOrdersClick(); // CloseStopOrders buttons
void ClosePendingOrdersClick(); // ClosePendingOrders buttons
// 2 колонка
void CloseBuyClick(); // CloseBuy buttons
void CloseBuyProfitClick(); // CloseBuyProfit buttons
void CloseAllProfitClick(); // CloseAllProfit buttons
void BuyLimitClick(); // BuyLimit buttons
void BuyStopClick(); // BuyStop buttons
void CloseLimitOrdersClick(); // CloseLimitOrders buttons
void GroupOrdersVLineClick(); // GroupOrdersVerticalLine buttons
Create object и Event Handling стр. 221-286
//+------------------------------------------------------------------+
//| CTradePanel |
//+------------------------------------------------------------------+
bool CTradePanel::Create(const long chart,const string name,const int subwin=0,const int x1=20,const int y1=20,const int x2=320,const int y2=420)
{
// At first call create function of parents class
CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2);
// Calculate coordinates and size of BID object
// Create object
// CreateLabel(chart,subwin,LotsSell_label,"LOT",55,5,0);
CreateEdit(chart,subwin,Lots,"0.1",3,3,45,20);
// CreateEdit(chart,subwin,LotsSell,"0.1",3,3,45,20);
CreateButton(chart,subwin,SELL,"SELL",3,25,45,20);
CreateButton(chart,subwin,CloseSell,"Sell[X]",3,48,45,20);
CreateButton(chart,subwin,CloseSellProfit,"SPrf[X]",3,71,45,20);
CreateButton(chart,subwin,CloseAll,"CLOSE",3,94,45,20);
CreateButton(chart,subwin,SellLimit,"S-Lim",3,117,45,20);
CreateButton(chart,subwin,SellStop,"S-Stop",3,140,45,20);
CreateButton(chart,subwin,CloseStopOrders,"Stp[X]",3,163,45,20);
CreateButton(chart,subwin,ClosePendingOrders,"PO[X]",3,186,45,20);
////////// 2 колонка
CreateEdit(chart,subwin,Lots,"0.1",50,3,45,20);
// CreateEdit(chart,subwin,LotsBuy,"0.1",50,3,45,20);
CreateButton(chart,subwin,BUY,"BUY",50,25,45,20);
CreateButton(chart,subwin,CloseBuy,"Buy[X]",50,48,45,20);
CreateButton(chart,subwin,CloseBuyProfit,"BPrf[X]",50,71,45,20);
CreateButton(chart,subwin,CloseAllProfit,"Prft[X]",50,94,45,20);
CreateButton(chart,subwin,BuyLimit,"B-Lim",50,117,45,20);
CreateButton(chart,subwin,BuyStop,"B-Stop",50,140,45,20);
CreateButton(chart,subwin,CloseLimitOrders,"Lim[X]",50,163,45,20);
CreateButton(chart,subwin,GroupOrdersVLine,"Group",50,186,45,20);
return(true);
}
//+------------------------------------------------------------------+
//| Event Handling |
//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CTradePanel)
ON_EVENT(ON_END_EDIT,Lots,LotsEndEdit)
//ON_EVENT(ON_END_EDIT,LotsSell,LotsEndEdit)
//ON_EVENT(ON_END_EDIT,LotsBuy,LotsEndEdit)
ON_EVENT(ON_CLICK,SELL,SellClick)
ON_EVENT(ON_CLICK,BUY,BuyClick)
//ON_EVENT(ON_CLICK,CloseAll,CloseClick)
// добавлены кнопки
// 1 колонка
//ON_EVENT(ON_CLICK,CloseSell,CloseSellClick)
//ON_EVENT(ON_CLICK,CloseSellProfit,CloseSellProfitClick)
ON_EVENT(ON_CLICK,CloseAll,CloseClick)
//ON_EVENT(ON_CLICK,SellLimit,SellLimitClick)
//ON_EVENT(ON_CLICK,SellStop,SellStopClick)
//ON_EVENT(ON_CLICK,CloseStopOrders,CloseStopOrdersClick)
//ON_EVENT(ON_CLICK,ClosePendingOrders,ClosePendingOrdersClick)
////////// 2 колонка
//ON_EVENT(ON_CLICK,CloseBuy,CloseBuyClick)
//ON_EVENT(ON_CLICK,CloseBuyProfit,CloseBuyProfitClick)
//ON_EVENT(ON_CLICK,CloseAllProfit,CloseAllProfitClick)
//ON_EVENT(ON_CLICK,BuyLimit,BuyLimitClick)
//ON_EVENT(ON_CLICK,BuyStop,BuyStopClick)
//ON_EVENT(ON_CLICK,CloseLimitOrders,CloseLimitOrdersClick)
//ON_EVENT(ON_CLICK,GroupOrdersVLine,GroupOrdersVLineClick)
//
EVENT_MAP_END(CAppDialog)
Координаты панельки: стр. 118
// Create Trade Panel
TradePanel.Create(ChartID(),"Panelka",0,100,1,206,240);
Компиляция:
Комментарии (14)
35 AM2 Сообщений: 16250 - Андрей
35 AM2 Сообщений: 16250 - Андрей
Могу там разметку панели с этими полями и кнопками сделать Редактирован: 22 декабря 2021, 14:47
11 preasto Автор Сообщений: 445
35 AM2 Сообщений: 16250 - Андрей
www.opentraders.ru/downloads/3205/
35 AM2 Сообщений: 16250 - Андрей
35 AM2 Сообщений: 16250 - Андрей
Окна для дистанции отложек с записью прямо в панеле тоже весьма удобны при работе.
По окнам дистанций для отложек:
Для Sell всё нормально:
Для Sell Limit берёт значение из правого окна, под кн. «Lim[X]»
для Sell Stop берёт дистанцию из левого окна под кн. «St[X]»
Но для Buy и Limit и Stop — всё берёт из левого окна под кн. «St[X]».
Просьба поправить, сделать взятие дистанции для Buy Limit из правого окна, под кн. «Lim[X]»
Т.е. левое окно дистанций отложек — для всех Стоп-ордеров,
правое — для всех Лимит-ордеров
Также панелька не работает в тестере… Хорошо бы, чтобы и в тестере заработала.
И, по-возможности, добавить параметр/функцию — виртуальные отложки (да/нет), когда выводит линию места отложки, а ордер открывает при достижении её ценой, для того же тестера в т.ч.
11 preasto Автор Сообщений: 445
правое окно селллимит селлстоп. тоже по лотам
35 AM2 Сообщений: 16250 - Андрей
правое окно — только селллимит
левое байстоп байлимит, и селлстоп
Редактирован: 28 декабря 2021, 21:27
11 preasto Автор Сообщений: 445
35 AM2 Сообщений: 16250 - Андрей
она ни с того, ни с сего пропадает из окна через неск. мин,
*глюк был в версии от 25.12.21, в версии от 28.12.21 пока всё норм.
Но когда открываешь свойства советника кнопкой с графика из меню и снова сохраняешь, появляется со сдвигом слоёв,
при этом меняешь в параметрад отступ(дельту) на 250 или др. — а вылазит в окнах всегда 300**:
**проблема начала решаться, см. след пост ниже
Редактирован: 29 декабря 2021, 11:26
11 preasto Автор Сообщений: 445
левое байстоп байлимит,
правое окно селллимит селлстоп.
И глюков при перезапуске и смене ТФ, в новой версии от 28.12.21 вроде нет, пока всё норм.
Но при смене лотов и делты в параметрах (на 0.2 и 250) — в окнах остаются те же значения: 0.1 и 300**
**проблема начала решаться, см. след пост ниже
Редактирован: 29 декабря 2021, 11:26
11 preasto Автор Сообщений: 445
35 AM2 Сообщений: 16250 - Андрей
стало в окна выводить то, что задано в этих параметрах свойств советника.
При компиляции по этим строкам пишет предупреждение:
implicit conversion from 'number' to 'string' TradePanel_28.12.21.mq4 162(строка) 33(столбец)
внесённые надписи и Lot и Delta там выделены тёмно-красным (остальной код черным)
Может что-то некорректно по правилам кода?
Что подправить?
Редактирован: 28 декабря 2021, 23:53
11 preasto Автор Сообщений: 445
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий