Работа с графиком и свечамифункции работы с графиками (свечи, объемы, MACD)
свечи:
GetCandleOpen(AIdx) - получить цену открытия свечи
GetCandleClose(AIdx) - получить цену закрытия свечи
GetCandleHigh(AIdx) - получить максимальную цену по свечи
GetCandleLow(AIdx) - получить минимальную цену по свечи
GetCandleDown(AIdx) - низ тела свечи
GetCandleUp(AIDx) - верх тела свечи
GetCandleAvgB(AIdx) - среднее по телу свечи (B - body)
GetCandleAvgS(AIdx) - среднее по тени свечи (S - shadow)
GetCandleType(AIdx) - тип свечи
0 = никакая (т.е. без тела)
-1 = падающая
1 = возрастающая
объем торгов:
GetCandleVolume(AIdx) - получить объем по свечи
AIdx - порядковый номер свечи(текущая свеча которая прорисовывается в данный момент имеет номер 0)
нумерация справа налево. Следующая 1 и так далее.
Пример:
Опишем фигуру "МОЛОТ"
тут небольшой код для описания как зеленой так и красной свечи "Молот".
промежуток от цены закрытия до цены открытия берем за единицу.
Верхняя часть должны быть меньше 0.2
Нижняя больше 1.8
(
(GetCandleOpen(1) > GetCandleClose(1))
and
((GetCandleHigh(1)-GetCandleOpen(1)) <
0.2*(GetCandleOpen(1)-GetCandleClose(1)))
and
((GetCandleClose(1)-GetCandleLow(1))>
1.8*(GetCandleOpen(1)-GetCandleClose(1)))
)
or
(
( GetCandleOpen(1) < GetCandleClose(1) )
and
( (GetCandleHigh(1)-GetCandleClose(1)) <
0.2*(GetCandleClose(1)-GetCandleOpen(1)) )
and
(
(GetCandleOpen(1)-GetCandleLow(1))>
1.8*(GetCandleClose(1)-GetCandleOpen(1))
)
)
гистограмма-индикатор MACD
GetMACDH(AIdx) - получить значение MACD по свечи
Условия (ветвления IF THEN)IfThen (УСЛОВИЕ, ПАРАМЕТР1, ПАРАМЕТР2) - Функция ветвления If Then (позволяет выбрать один из двух вариантов при выполнении условия , или же не выполнении)
УСЛОВИЕ - Формула с условием
ПАРАМЕТР1 - Возвращается функцией если УСЛОВИЕ сработало
ПАРАМЕТР2 - Возвращается функцией если УСЛОВИЕ не сработало
Примеры:
Простой абстрактный пример.
Если два значения SellPrice = 14
BuyPrice = 13
IfThen(SellPrice > BuyPrice , 1, 0)
- вернет 1. Так как 14>13.
поддерживает вложенность функций - можно строить сложные ветвления:
к примеру еще две переменных содержат значения:
highPrice30s=13.5
lowPrice=13
IfThen(SellPrice > BuyPrice , IfThen(highPrice30s>lowPrice , 0, 1), 0)
- сначала проверит
SellPrice > BuyPrice (14>13)
затем
highPrice30s>lowPrice
и вернет 0.
Вот применимость этой функции к динамическом BUY SIZE:
В примере на рисунке если цена будет ниже цены последней партии бот будет покупать частями по 100 (партиями), если выше то по 50.
Функции для работы с даннымиGetBuyPrice(количество секунд назад) - получить цену покупки (тикера) несколько секунд назад
GetSellPrice(количество секунд назад) - получить цену продажи (тикера) несколько секунд назад
пример использования:
GetBuyPrice(300) вернет buyPrice 300 секунд (т.е. 5 минут) назад
допускается писать также GetBuyPrice(5*60), GetBuyPrice(60*3*60)
Правило на покупку
курс вырос за 5 минут на 0.2%
в функциях все в секундах
поэтому 5 минут множим на 60
((buyPrice/GetBuyPrice(5*60))-1)*100>=0.2
Правило на продажу
курс упал за 5 минут на 0.2%
( (sellPrice/GetSellPrice(5*60)) -1 ) *100<=-0.2
если упал то будет минус 0.2
или меньше
GetBuyVolume(ASecondsFrom,ASecondsTo) - получить объем покупки за произвольный период времени
GetSellVolume(ASecondsFrom,ASecondsTo) - получить объем продажи за произвольный период времени
пример использования:
GetBuyVolume(600,300) вернет BuyVolume между 600 и 300 секунд назад (т.е. между 10 и 5 мин. назад)
GetBuyVolume(600,0) вернет BuyVolume за последние 600 секунд (т.е. 10 мин.)
допускается писать также GetBuyVolume(10*60,5*60)
Смотрим минутный график
(buyPrice - GetBuyPrice(1*60) ) - Изменение цены за 60 секунд (считается не от текущего момента, а от времени по тикеру (Время сервера)) -- Ближняя свечка к текущему моменту
GetBuyPrice(1*60) - Цена 60 секунд назад
GetBuyPrice(1*60) - GetBuyPrice(2*60) - Изменение от минуты до двух минут назад (вторая свечка от текущего момента по минутному графику)
GetBuyPrice(2*60) - GetBuyPrice(3*60) - Изменение от двух минут назад до трех минут (третья свечка от текущего момента по минутному графику)
Тоже самое для объемов
GetBuyVolume(60,0) - объем за минуту назад (объем покупки первой свечки)
GetBuyVolume(2*60,60) - объем от 2 минут до минуты назад назад (объем покупки второй свечки)
GetBuyVolume(3*60,60) - объем от 3 минут до 2 минут назад назад (объем покупки третьей свечки)
GetProfitPrice(APrice,APercent) - расчетная точка безубыточности
пример использования:
GetProfitPrice(botMinBuyPrice,0.4) вернет цену, при достижении которой получим профит 0.4%
с учетом обеих комиссий, разумеется, т.е. это чистые 0.4% будут
т.е. вместо
sellPrice>botBuyPrice*1.007
можно писать
sellPrice>GetProfitPrice(botBuyPrice,0.3)
и это будет универсально (функция сама учитывает комиссии на покупку и на продажу по валютной паре)
т.е. сработает правильно независимо от того что торгуем: BTC/USD(0.2%) или USD/RUR(0.5%) или еще что-то
чтобы понимать сколько закладывать своего процента - можно подсчитать
GetProfitPrice(botBuyPrice,0)
это точка безубыточности. например, для BTC/USD(0.2%) будет 1.004012...
т.е. GetProfitPrice(botBuyPrice,0.3) это примерно botBuyPrice*1.007
также можно считать и с отрицательными процентами
но понимать, что 0 - это безубыточность с учетом комиссии
GetIncome() - возвращает прибыль/убыток
GetIncome(0) - вернет только прибыль (если убыток то вернет 0)
GetIncome(1) вернет так как есть (плюс - так плюс, минус - так минус)
GetRandom(x,y) - случайное целое число между x и y
Пример : GetRandom(10,100) - любое число между 10 и 100
GetMinBuyPrice(Момент времени 1 ,момент времени 2) - получить минимальную цену покупки между двумя моментами времени
GetMaxBuyPrice(Момент времени 1 ,момент времени 2) - получить максимальную цену покупки между двумя моментами времени
GetMinSellPrice(Момент времени 1 ,момент времени 2) - получить минимальную цену покупки между двумя моментами времени
GetMaxSellPrice(Момент времени 1 ,момент времени 2) - получить максимальную цену покупки между двумя моментами времени
ПРИМЕРЫ :
GetMinBuyPrice(600,0) - минимальное значение за 600 секунд.
GetMaxBuyPrice(60) - максимальное значение за 60 секунд.
Временные функции (для использования расписания по времени закупок и продаж)MakeDateTime(День,Часы,минуты) - получить любое время (для использования в других функциях)
Если День=0 то это сегодня. например получить время 15-00 сегодня будет выглядеть как MakeDateTime(0,15,0)
HourOf() - возвращает текущее значение часов
HourOf(serverTime) если время 19:10:11 то вернет 19
MinuteOf() - возвращает текущее значение минут
MinuteOf(now) если время 19:10:11 то вернет 10
Пример расписания для локального времени - времени компьютера на котором запущен бот
(HourOf(now) > 9 and HourOf(now) <18 )
бот будет торговать с 9 до 18 часов
В версии
1.0.0.28 появились новые временные функции:
now - текущее время
secondsbetween(момент времени 1 , момент времени 2) - время в секундах между двумя моментами времени
minutesbetween(момент времени 1 , момент времени 2) - время в минутах между двумя моментами времени
Примеры:
secondsbetween(now,botLastBuyTime)>30
- проверка прошло ли 30 секунд со времени прошлой продажи
minutesbetween(now,botLastBuyTime)>1
- проверка прошла ли одна минута с последней продажи
Удобно использовать в правилах покупки ботом вместе с установкой ограничения на покупку по партии (Trade options - Limits - Buy Size)
secondsbetween считает все секунды!
т.е. может быть не только 30, но и 300, и 600 секунд разницы
аналогично минуты
Логические функции and - логическое И
(deltaVolume30s>0) and (deltaVolume1m>0) and (deltaVolume5m>0)
or - логическое ИЛИ
(deltaVolume1h>80) or ( deltaVolume6h>40)
not - логическое отрицание
Арифметические функции + сложение
SellPrice>BotBuyPrice+5
- вычитание
SellPrice>BotBuyPrice-5
* умножение
SellPrice>BotBuyPrice*1,5
/ деление
sellPrice>(obWallSellPrice-(obWallSellPrice-obWallBuyPrice)/3)
Скобки ( ) - для выделения приоритета выполнения вычислений.
Функции сравнениябольше
SellPrice > BotBuyPrice
меньше
SellPrice < BotBuyPrice
равно
SellPrice = BotBuyPrice
не равно
SellPrice <> BotBuyPrice
Также больше равно
>=
и
<=
меньше равно.
Дробные числа пишутся через запятую Пример:
1,5
Разноеln(число) - натуральный логарифм
exp(число) - е в степени
abs(число) - модуль числа