объяви bool STOP = true; только на глобальном уровне (перед OnTick)
и вместо if ( tiket == 1 ) сделай if ( tiket >= 0 )
попробуй, должно работать
От xbms, 13 апреля, 2013 в Уголок Программиста
Кто-нибудь имеет хорошо написанный ассоциативный словарь? Так надоело все с 0 уже писать.
vitek01
объяви bool STOP = true; только на глобальном уровне (перед OnTick)
и вместо if ( tiket == 1 ) сделай if ( tiket >= 0 )
попробуй, должно работать
vitek01
объяви bool STOP = true; только на глобальном уровне (перед OnTick)
и вместо if ( tiket == 1 ) сделай if ( tiket >= 0 )
попробуй, должно работать
Спасибо действительно помогло! при достижений уровня по условию открывается ордер на покупку, но при закрытий по стоп лоссу , сразу открывается один левый ордер на покупку, закрывшись в минус больше ордеров не открывается.
а дальше по условию. и опять левый ордер если уровень активируется .
А теперь вопрос - откуда он берется этот левак?
Еще хотелось бы уроки по созданию обьектов, линий на графике и операций с ними!
Изменено 16 февраля, 2016 пользователем vitek01
Это не верно. В реале тикеты будут совсем другие.
И последнее, условие if(tiket==1) верно, так как мы работаем с одним ордером.
Поясни что это :d а то может имеешь такую ценность и не знаешь...
Кто-нибудь имеет хорошо написанный ассоциативный словарь? Так надоело все с 0 уже писать.
Приветствую, Господа. Такой вопрос меня мучает: в рамках тех или иных уроков рассматривается инструмент, который позволяет контролировать количество открываемых сделок. Как правило сводится это к одному рыночному OP_BUY и одному OP_SELL + проверка по magic'у или установка нового ордера тем или иным образом опирается на предыдущий. Но как быть если мною писанный советник подразумевает несколько сигналов, то есть формально при трех сигналах возможно до 6 позиций по разным ценам: три вверх и три вниз. Я подошел к решению этой задачи таким образом, что думаете об этом:
bool busy(int mn)//mn - magic number
{
for(int i=0;i {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
switch(OrderType())
{
case OP_BUY:
if(OrderType() == OP_BUY && OrderMagicNumber() == mn)
{
bool b = true;
}
case OP_SELL:
if(OrderType() == OP_SELL && OrderMagicNumber() == mn)
{
b = true;
}
}
}
}
return(b);
}
Разумеется открытие ордеров, сопряженное с тем или иным сигналом, должно присваивать соответствующие magicи, а после устраивается проверка, скажем вот так:
if(busy(11) == 0 && ...)OrderSend(Symbol(),OP_BUY,0.01,Ask,0,0,0,0,11);
if(busy(12) == 0 &&...)OrderSend(Symbol(),OP_SELL,0.01,Ask,0,0,0,0,12);
if(busy(21) == 0 && ...)OrderSend(Symbol(),OP_BUY,0.01,Ask,0,0,0,0,21);
if(busy(22) == 0 &&...)OrderSend(Symbol(),OP_SELL,0.01,Ask,0,0,0,0,22);
bool b = false;
if(busy(22) &&...)
{
int k=10; // кол-во попыток
while (k>0)
{
RefreshRates(); // обновляем котировки
if (OrderSend(Symbol(),OP_SELL,0.01,Bid,0,0,0,30,22)>0) // OrderSend возвращает номер тикета ордера в случае успеха, иначе "-1"
{
break; // аварийно выходим из цикла while
}
Sleep(100); // если ордер не выставился(тикет меньше нуля) ждем 0,1 секунды и уменьшаем k на единицу
k--;
}
}
Изменено 16 февраля, 2016 пользователем dermitay
В папке Scripts_for_orders_any_1 (из архива Scripts_for_orders.rar к посту)
есть много готовых скриптов по ордерам, с настройками.
В т.ч. от Кима, закрытие/открытие ордеров с настройкой СЛ и ТП, перевода в БУ, закрыть все прибыльные ордера,
Удаление всех тейков и стопов, Удалить все отложенные ордера, Удаление всех объектов,
к-е явно можно завести на кнопки в панельку от индикатора и использовать в окне пары.
Думаю, что добавить скрипт: Установить стоп-ордер вместо стоп-лосса,
либо изменить так код скрипта выставляющего СЛ и ТП со стоп-ордером вместо СЛ сразу, также вполне возможно.
***
Много таких полезных скриптов по ордерам тут:
1. __http://time-forex.com/skripty
в т.ч.
-Тейк профит для отложенных ордеров, -Установка отложенных ордеров мышкой, -Скрипт удаления отложенных ордеров,
-Скрипт - Стопы на все ордера (для переделки на: Стоп-ордера на все ордера и Заменить стоп-лосс на стоп-орлдер по всем ордерам),
- Расчет волатильности рынка, -Скрипт риска и расчета стоп лосс и тейк профит,
- Скрипт определения уровня без убытка, -Скрипт set 2 stop orders – два отложенных ордера(в 2 стороны)
2. __http://forexpunkt.ru/script/
-Закрыть ордера Buy, -Закрыть ордера Sell, -Лёгкая установка отложенных ордеров
3. Скрипт Stop Orders Mouse __http://forexva.ru/skript-stop-orders-mouse/
В зависимости от того, в какую точку вы кинете скрипт, он и выставит отложенный ордер — если выше цены Buystop, ниже Sellstop.
В настройках скрипта есть возможность установки фиксированного лота или процента от депо, стоплосса, тейкпрофити и магика ордеров.
Выставление ордеров мышью на графике
__http://finbay.ru/skripty-metatrader4/ustanovka-orderov-myshju.html
Скрипты для упрощения работы с ордерами.
__http://forum.roboforex.ru/showthread.php?t=1992
__http://ruforum.mt5.com/threads/68817-neskolko-skriptov-dlya-uproshcheniya-torgovli
Сборки скриптов от пользователей форума Forum Forex-Investo'RU → Рынок Форекс → Советники, АТС, Индикаторы, сигналы
__http://forum.forex-investo.ru/index.php?/topic/1912-%D0%BF%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D1%8B-%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%BD%D0%B0%D1%8F-%D0%BC%D0%B5%D0%BB%D0%BE%D1%87%D1%8C-%D0%BE%D0%B1%D0%B7%D0%BE%D1%80-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82/
Цитата1.8. Замена стоп-лосс уровней на Buy Stop Limit и Sell Stop Limit ордера в своем эксперте
Снова вернемся к нашей панели, описанной в пункте 1.5 данной статьи.
Попробуем модифицировать ее, чтобы помимо входа в рынок с помощью лимитных ордеров
она позволяла устанавливать нам защитные остановки с помощью Buy Stop Limit и Sell Stop Limit ордеров.
Для этого в панели создадим еще одно поле "Stop Loss Level".
Теперь наша панель будет выглядеть следующим образом:
Рис. 14. Установка стоп-лосс уровня в панели DevaitionPanel.
Наиболее значимых изменений в уже знакомом нам коде два:
//+------------------------------------------------------------------+
//| End obj click |
//+------------------------------------------------------------------+
void CDevPanel::OnObjClick(string sparam)
{
if(sparam==m_buy_button_name)
{
if(Trade.BuyLimit(1,CalcCurrentPrice(OP_BUY)))
SendStopLoss(OP_BUY);
}
if(sparam==m_sell_button_name)
{
if(Trade.SellLimit(1,CalcCurrentPrice(OP_SELL)))
SendStopLoss(OP_SELL);
}
ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
Sleep(100);
ChartRedraw();
}
//+------------------------------------------------------------------+
//| Send SL order |
//+------------------------------------------------------------------+
bool CDevPanel::SendStopLoss(int op_type)
{
if(op_type==OP_BUY)
{
double bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
if(m_sl_level>=0.0 && m_sl_level {
MqlTradeRequest request={0};
request.action = TRADE_ACTION_PENDING;
request.symbol = Symbol();
request.volume = 1.0;
request.price=m_sl_level;
request.stoplimit=m_sl_level -(m_deviation*Point());
request.type=ORDER_TYPE_SELL_STOP_LIMIT;
request.type_filling=ORDER_FILLING_RETURN;
request.type_time=ORDER_TIME_DAY;
MqlTradeResult result;
bool res=OrderSend(request,result);
if(!res)
Print("Error set S/L. Reason: "+(string)GetLastError());
return res;
}
}
else if(op_type==OP_SELL)
{
double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
if(m_sl_level>=0.0 && m_sl_level>ask)
{
MqlTradeRequest request={0};
request.action = TRADE_ACTION_PENDING;
request.symbol = Symbol();
request.volume = 1.0;
request.price=m_sl_level;
request.stoplimit=m_sl_level+(m_deviation*Point());
request.type=ORDER_TYPE_BUY_STOP_LIMIT;
request.type_filling=ORDER_FILLING_RETURN;
request.type_time=ORDER_TIME_DAY;
MqlTradeResult result;
bool res=OrderSend(request,result);
if(!res)
Print("Error set S/L. Reason: "+(string)GetLastError());
return res;
}
if(CharToStr(StringGetChar(data,strlen-1))=='.')
StringSetChar(data,strlen-1,'');
}
return false;
}
Изменено 17 февраля, 2016 пользователем erkon
Тут был вопрос ответ на который нашелся в статье ТИПИЧНЫЕ ОШИБКИ В ПРОГРАММАХ НА MQL4 И МЕТОДЫ ИХ УСТРАНЕНИЯ Статья уже не раз помогла мне. Пользуйтесь на здоровье.
Изменено 16 февраля, 2016 пользователем Nicole White
Всем привет.
Снова у меня пробла с медленным тестированием сов.
Выше я уже писал, что сова из третьего урока "3 MQL программирование как написать советник на индикаторе", написанным мной тестировалась очень медленно.
4 часа ушло на тест с 15 по 16 год на 15минутках. Вместо пары минут, как на видео.
Я провел эксперимент, скачал с форума сову VelociGrid v2.05.
Загнал ее в тестер. 10 лет протестировал за 10 секунд.
Из чего я сделал вывод, что дело не в компьютере.
Следующее предположение, что сов на индикаторе ТМА, поэтому медленно тестит.
Я прошел 4 урок и написал код из него. Советник на мартине.
И он опять тупит на тесте.
Из чего я сделал предположение, что дело в коде.
Хотя все делал по уроку.
Гляньте плиз. Может у меня в коде очевидный БАГ, который я не вижу?
Или как вариант, скомпилируйте код и посмотрите сколько времени у вас тестится. Плииииз!
Вот код
//+------------------------------------------------------------------+
//| Martin.mq4 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link " "
#property version "1.00"
#property strict
extern double Lots = 0.01 ;
extern int TakeProfit = 50;
extern int Step = 60;
extern double Multiplier = 2;
extern int Magic = 123;
extern int Slippage = 3;
double tp, price, lastlot;
int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if (Digits == 3 || Digits == 5)
{
TakeProfit *= 10;
Step *= 10;
Slippage *= 10;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double ima = iMA(Symbol(), PERIOD_H1, 14, 0, MODE_SMA, PRICE_CLOSE, 1);
if (CountTrade() == 0)
{
if( Ask > ima)
{
tp= NormalizeDouble(Ask + TakeProfit*Point, Digits);
ticket= OrderSend( Symbol(), OP_BUY, Lots, Ask, 5, 0, tp, "", Magic, 0, Blue);
}
else
{
tp= NormalizeDouble(Bid - TakeProfit*Point, Digits);
ticket= OrderSend( Symbol(), OP_SELL, Lots, Ask, 5, 0, tp, "", Magic, 0, Red);
}
}
else
{
int order_type = FindLastOrderType();
if(order_type == OP_BUY)
{
price = FindLastOrderPrice(OP_BUY);
if (Ask {
lastlot = FindLastLots(OP_BUY);
lastlot = NormalizeDouble(lastlot*Multiplier, 2);
ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, 5, 0, 0, "", Magic, 0, Blue);
if(ticket Print("Osibka otkr ord na pokyp");
ModifyOrders(OP_BUY);
}
}
if(order_type == OP_SELL)
{
price = FindLastOrderPrice(OP_SELL);
if (Bid >= price + Step*Point)
{
lastlot = FindLastLots(OP_SELL);
lastlot = NormalizeDouble(lastlot*Multiplier, 2);
ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, 5, 0, 0, "", Magic, 0, Red);
if(ticket Print("Osibka otkr ord na prodajy");
ModifyOrders(OP_SELL);
}
}
}
}
//+------------------------------------------------------------------+
void ModifyOrders(int otype)
{
double avg_price, order_lots=0;
price = 0;
for( int i=OrdersTotal()-1; 1>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
price+= OrderOpenPrice()*OrderLots();
order_lots += OrderLots();
}
}
}
avg_price = NormalizeDouble(price / order_lots, Digits);
if (otype == OP_BUY) tp = NormalizeDouble(avg_price+ TakeProfit*Point, Digits);
if (otype == OP_SELL) tp = NormalizeDouble(avg_price - TakeProfit*Point, Digits);
for(int i= OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
if( OrderModify(OrderTicket(), OrderOpenPrice(), 0, tp, 0))
Print("Order modificirovan");
else Print("Oshibka modificii orderov");
}
}
}
}
//+------------------------------------------------------------------+
double FindLastLots(int otype)
{
int oldticket;
double oldprice=0;
ticket=0;
for( int ont = OrdersTotal()-1 ; ont >= 0 ; ont--)
{
if(OrderSelect(ont, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()== Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
ticket = oldticket;
oldprice = OrderOpenPrice();
}
}
}
}
return(oldprice);
}
//+------------------------------------------------------------------+
double FindLastOrderPrice(int otype)
{
int oldticket;
double oldlots, oldprice=0;
ticket=0;
for( int ont = OrdersTotal()-1 ; ont>= 0 ; ont--)
{
if(OrderSelect(ont, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()== Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
ticket = oldticket;
oldlots = OrderLots();
}
}
}
}
return(oldprice);
}
//+------------------------------------------------------------------+
int FindLastOrderType()
{
for(int i = OrdersTotal() - 1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()== Symbol() && OrderMagicNumber() == Magic)
return(OrderType());
}
}
return(-1);
}
//+------------------------------------------------------------------+
int CountTrade()
{
int count=0;
for(int i= OrdersTotal()-1; i>0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()== Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
count++;
}
}
}
}
return(count);
}
Изменено 17 февраля, 2016 пользователем Старик
Поясни что это :d а то может имеешь такую ценность и не знаешь...
Кто-нибудь имеет хорошо написанный ассоциативный словарь? Так надоело все с 0 уже писать.
Прости QJ, Вы профессионал. Здесь народ попроще и пока этой "штуки" не видел.
Поясни что это :d а то может имеешь такую ценность и не знаешь...
Кто-нибудь имеет хорошо написанный ассоциативный словарь? Так надоело все с 0 уже писать.
Вот примеры:
~https://msdn.microsoft.com/ru-ru/library/xfhwa508(v=vs.110).aspx
~http://www.cplusplus.com/reference/map/map/
Изменено 16 февраля, 2016 пользователем 0ll
Я провел эксперимент, скачал с форума сову VelociGrid v2.05.
Загнал ее в тестер. 10 лет протестировал за 10 секунд.
Друзья, пытаюсь написать советник на трендовом индикаторе. В качестве экземпляра взял вот такой. Написал, пока условие, чтобы покупал, если цена ниже линии и продавал, когда выше линии. Торгует, но на цвет линии внимание не обращает. Может ли кто-то помочь, чтобы в условии было покупать только, если линия зеленая и продавать, только если линия красная. Мучаюсь и никак не получается. Вроде буферы на цвета линии 2 и 3. Спасибо огромное заранее!
//+------------------------------------------------------------------+
extern string perfora = " Настройки советника";
extern double Lots = 0.01;
extern int TakeProfit = 15;
extern int StopLoss = 30;
extern int Magic = 1234;
double priceliniaGREEN, priceliniaRED, TP,SL;
//+------------------------------------------------------------------+
extern string perfora1 = "Настройки индикатора beforexguru-2";
extern double Sensitivity = 38.0;
extern bool PopUp_Alert = TRUE;
extern bool Email_Alert = FALSE;
//+------------------------------------------------------------------+
void OnTick()
{
int ticket;
priceliniaGREEN = iCustom(NULL, 0, "beforexguru-2",Sensitivity, PopUp_Alert, Email_Alert, 2, 0);
priceliniaRED = iCustom(NULL, 0, "beforexguru-2",Sensitivity, PopUp_Alert, Email_Alert, 3, 0);
if(CountBuy() ==0 && Ask {
ticket = OrderSend( Symbol(), OP_BUY, Lots, Ask, 5, 0, 0, "", Magic, 0, Blue);
TP = NormalizeDouble( Ask + TakeProfit*Point, Digits);
SL = NormalizeDouble( Ask - StopLoss*Point, Digits);
if(OrderSelect(ticket,SELECT_BY_TICKET))
if(OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Ордер успешно модифицирован");
}
....
erkon ты серьезно думаешь что кто-либо возьмется за то, что ты хочешь? ты сам пробовал перечитать своё полотно? первая мысль которая приходит когда прогер натыкается на такое - "да ну его наф! совсем псих? листаем дальше".
надо быть катастрофическим фатальным альтруистом мозга чтобы писать что-то по твоим ТЗ, да еще и на шару :d >:d
с твоими хотелками я советую тебе изучать хотя бы базовые аспекты mql4. месяц-два-полгода и ты сам уже будешь писать все что тебе надо. а так ты просто тупо тратишь своё время, имхо.
Изменено 17 февраля, 2016 пользователем erkon
Помогу erkon с ТЗ для управляющего индюка:
- сделать индюк с 6 кнопками
- в настройках индюка для каждой кнопки 2 параметра
1. строка = название кнопки
2. символ = горячая клавиша для запуска скрипта.
Это всё.
Как пользоваться: у нас есть набор скриптов, выбираем 6 шт и назначаем им горячие клавиши в МТ. Затем запускаем индюк, настраиваем название кнопок и указываем символ горячей клавиши.
пример запуска скрипта из эксперта/индикатора.
Вопрос выставления стоп-ордеров: Buy Stop, Sell Stop вместо СЛ, при открытии ордера, сразу,
в скриптах по выставлению ордеров BUY, SELL
как-то м.б. решён?
И с созданием скрипта заменяющего к ордерам все уже имеющиеся в зоне убытка СЛ на стоп-ордера: Buy Stop, Sell Stop ?
Изменено 17 февраля, 2016 пользователем erkon
Научите, Люди добрые, добавлять частичное закрытие и БУ в советники!
Столкнулась с проблемой и сломала мозг :
К примеру, ордер в Sell открывается от верхней линии ТМА и при пересечении средней линии должно произойти закрытие 50% лота и перестановка Стоплосса в БУ оставшейся части ордера. Остаток должен закрыться только на нижней линии либо по БУ.
Во всех тех примерах советников с открытым кодом, что я нашла, закрытие части и БУ есть только при достижении заданных пунктов. Мне оттуда "обрезанный" алгоритм не подходит, так как при пересечении ценой средней ТМА советник сначала закрывает одну часть ордера ... а потом другую - сразу же! Видимо, должна быть какая-то проверка, (и в сети говорят, что даже по Стоплоссу - раз он у нас изменился при переводе в БУ и "так удобно" числиться теперь у брокера), но воплотить это в код ума у меня не хватило.
Если у кого найдётся время (или из жалости и сострадания :(( ) "продемонстрируйте", пожалуйста, это мне на коде из урока "Обучение MQL", что в приложении. Там же и индикатор из урока, по которому советник написан.
(Как-то же надо новичкам учиться, а уроков и "образцов" нет :( )
В теме обучения не пишу, потому что мне и показать-то к исправлению нечего. Мне именно нужно доработать советник из урока :d
Всем, кто откликнется, буду очень признательна! Может кто и простой ссылочкой поможет :)
Изменено 17 февраля, 2016 пользователем Viper
я код не смотрел но ты права - должна быть проверка. ну... например, заведи интовый динамический массив.
при открытиии ордера увеличивай размерность массива на единицу и в последний элемент добавляй этот тикет этого ордера.
(OrderSend() возвращает именно ткет открываемого ордера)
суть: когда заходишь в условие частичного закрытия - проверяй тикет ордера, если таковой существует в массиве закрывай его частично. если нет - игнорим такой ордер. ну а если идет уже персечение противоположной линии - то закрывай безо всяких условий.
минус - надо подумать когда удалять тикеты первых ордеров из массива. иначе он тебя будет пухнуть до бесконечности.
Предложу алгоритм попроще.
1. Действительно по СЛ: есть сохранённое в отдельной переменной значение СЛ = СЛ1.
проверяем: если ( СЛордера == СЛ1 ) { переносим СЛ в БУ; закрываем 50%; }
таким образом исключаем повторное частичное закрытие.
2. То же только с лотом ордера = лот1:
проверяем: если ( Лотордера == лот1 ) { закрываем 50%; переносим СЛ в БУ; }
Спасибо большое за ответы. Зделал изменения в функци iCustom, но все равно торгует, не обращая внимание на цвет. Когда добавил дополнительное условие, ( Bid >= priceliniaRED && priceliniaRED > 0 ), то почему-то вообще стал открывать ордера бай и селл сразу. Или чего-то то не понял. Вроде бы без этого условия работает. Открывает только 1 ордер, в зависимоти от положения к линии.
Скажите пожалуйста, а можно ли функции iCustom придавать логическое значение и проверять, истинно или нет. Т.е. истина ли, что линия зеленая, а потом проверять на другие условия? Или как вообще в советниках реализуется принцип торговли строго вверх или строго вниз по индикатору. спасибо
P.S. вроде бы нашел нужное /ugolok-programmista/13/obuchenie-yazyku-mql4-pod-metatrader-4/4034
Вот кусок кода из подобного советника:
bufBuy = iCustom(NULL,0,"beforexguru_orig",Sensitivity, false, false,3,1);
bufSell = iCustom(NULL,0,"beforexguru_orig",Sensitivity, false, false,4,1);
if (bufBuy != EMPTY_VALUE) ordOpen(OP_BUY);
if (bufSell != EMPTY_VALUE) ordOpen(OP_SELL);
Стрелки в разных буферах. Значения в этих буферах либо пусто (EMPTY_VALUE) или цена где рисовать стрелку.
Изменено 17 февраля, 2016 пользователем haiduc
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем