<HELP> for explanation

Блог им. RusTrend

Выкладываю, как и обещал.

Итак, вечер пришел. Прошу извинение за задержку, дела.
Как и обещал выкладываю алгоритм торговли, постараюсь всё подробно описать, объяснить…
Поехали..
Вы постоянно в рынке. Алгоритм ревисный.
Вход в лонг, он же выход шорт. Вход в шорт, он же выход из лонга.
Условие ЛОНГ:
ma1:=90;
 h>=Mov(h,ma1,E)  and  h>=ref(h,-1),
т.е. пробой эксп средней по хаям периодом 90 и цена должна быть выше предыдущего максимума.
Условие ШОРТ:
ma1:=90;
 L<=Mov(L,ma1,E)  and  L<=ref(L,-1)
Текущая цена ниже предыдущего минимума и меньше средней 90 периода, расчет по лоям.
Скажете херня???? Ждали что то необыкновенно сложное???  Стакан???
Смотрим дальше.

Выкладываю, как и обещал. 

так выглядит кривая капитала с 2009 года, думаю догадались это фьючерс РТС.

Незнаю как тут вставлять файлы поэтому все желающие пишите в личку вышлю  ResultReport и  SystemReport. Пардонте — всё в метастоке. Так и не увидел преимуществ других программ.


Тест исходя из 1 контракта.
Вторая картинка тот же тест но со стопом. Стоп — предыдущий минимум для лонга и максимум для шорта.

Выкладываю, как и обещал.

Разницы особой нет. Но использование стопа даем мне возможность контролировать риск и соответственно размер позиции.
Как вы поняли на всё я не торгую, и не опытным трейдерам (99%) не рекомендую. Ещё раз Японию тряхнёт и счета нет. Все просто.

Вернемся к нашим баранам.
Считаю в пунктах, перевод в рубли *0,67, считаю грубо, округляю в худшую сторону. 
Стартовая сумма на начало каждого года 100тыс рублей. Не будем считать позицию от риска и стопа, пусть будет 3 контракта, даже в 2011г  при ГО выше 14 тыс (или около), 3 контракта это недалеко от 30% от счета.

Итоги:
2009г — 45000, = 30тыс руб*3=90 тыс,
2010 — 55000, = 36 тыс руб*3=108 тыс,
2011 — 55000, = 36 тыс руб*3=108 тыс,
2012 — 30000,= 20 тыс руб*3=60 тыс,
2013 — 30000,= 20 тыс рублей*3= 60 тыс
Надеюсь проценты к счету никого не напряжет посчитать. 
Добейте сами эту простейшую стратегию при размере позиции от стопа, будет красне сладко.

По фьючу на рубль — средняя 30. также будет вкусно.

Сотней контрактов торговать эту стратегию не особая проблема. Проскальзывание будет около нулю. Только за счет того что используется средняя считаемая по хаям и лоям, сделки часто в реале будут лучше чем на тесте. На кипеше чуть хуже, в среднем около нуля.

Обещал робот- получите.
Заранее буду крайне признателен если кто нибудь что то упростит или улучшит.
Пишите кто будет заинтересован, вышлю написанную в  Scite. Или научите как вкладывать файл. Вставлю сдесь же всё.
Далее, стоп заявки выставляю отдельным роботом. Мне так удобно.
 
Перед выкладкой проверил (т.к у меня несколько сложнее, и кривая доходности поравнее), всё работает.
Надеюсь статей о банкротстве больше на смартлабе не будет.
… НАТЕ..



1. Робот выставления заявок.
PORTFOLIO_EX ROBOTRTS;
DESCRIPTION ROBOTRTS;
CLIENTS_LIST Q00000F; ' ВПИШИТЕ СВОЙ
FIRMS_LIST TROYMFIRM; ' ВПИШИТЕ СВОЙ, МОЙ ТРОЙКА
USE_CASE_SENSITIVE_CONSTANTS;
PROGRAM
' ВЕРСИЯ 20 ФЕВРАЛЯ 2014 ГОДА — ДВЕ СрЕДНИХ и ПРЕДЫДУЩИЙ HIGH AND LOW, СО СТОПАМИ И РАЗМЕРОМ ПОЗИЦИИ ОТ СТОПА, БЕЗ ПРОФИТА,
' НАСТРОЙКИ ТОЛЬКО ЗДЕСЬ!
' ВХОД В ЛОНГ, ОН ЖЕ ВЫХОД ШОРТ --h>=Mov(h,ma1,E) and h>=ref(h,-1)
' ВХОД В ШОРТ, ОН ЖЕ ВЫХОД ЛОНГ — l<=Mov(l,ma1,E) and l<=ref(l,-1)

IDENTIFICATION_MovL=«MovL» ' ИДЕНТИФИКАТОР ДЛЯ ГРАФИКА СРЕДНЯЯ ПО ЛОЯМ период 90 (для рубля 30)
IDENTIFICATION_MovH=«MovH» ' ИДЕНТИФИКАТОР ДЛЯ ГРАФИКА СРЕДНЯЯ ПО ХАЯМ период 90 ( для рубля 30)
IDENTIFICATION_refH=«refH» ' ИДЕНТИФИКАТОР ДЛЯ ГРАФИКА средняя по хаям, период 1, метод simple, сдвиг графика 1
IDENTIFICATION_refL=«refL» ' ИДЕНТИФИКАТОР ДЛЯ ГРАФИКА средняя по лоям, период 1, метод simple, сдвиг графика 1
IDENTIFICATION_priS=«priS» ' ИДЕНТИФИКАТОР ДЛЯ ГРАФИКА price
CLIENTS_LIST=«Q00000F» ' ВПИШИТЕ СВОЙ
FIRMS_LIST=«TROYMFIRM» ' ВПИШИТЕ СВОЙ, МОЙ ТРОЙКА
INTERVAL=60 ' ТАЙМФРЕЙМ НА ОТКРЫТОМ ГРАФИКЕ В МИНУТАХ, МИНИМУМ 1 МАКСИМУМ 60. ВАЖНО!
ACCOUNT=«SPBFUT00000» ' ВПИСАТЬ АККАУНТ!!!
INSTRUMENT=«RTS-3.14» ' КОД БУМАГИ
BEGINSES=100000 ' СТАРТ РОБОТА
BEGINSES1=100000 ' СТАРТ РОБОТА
ENDSES=234456 ' ОКОНЧАНИЕ РАБОТЫ РОБОТА
RISK=0.03 ' в процентах 3 % от счета
GO=10000 ' ГО по фьючу, принимаю 10
KK=0.67 ' коэф-т перевода пунктов в рубли
STOPLOSS=100' ВЕЛИЧИНА СТОПА — «ТЕЙКПРОФИТА СТАНДАРТА QUIK» В ПИПСАХ. ЕСЛИ ПОСТАНОВКА СТОПА НЕ НУЖНА — ПОСТАВЬТЕ НОЛЬ
RAZNICA=100 ' ЗАЩИТНЫЙ СПРЕД В СТОПЗАЯВКЕ-ТЕЙКПРОФИТЕ (ПРОСКАЛЬЗЫВАНИЕ В СТОПЕ)
READ_MESSAGES=1 ' 1-РОБОТ ПРИ КАЖДОМ ДЕЙСТВИИ ПИШЕТ ОБ ЭТОМ СООБЩЕНИЕ, 0-НЕ ПИШЕТ. ИСПОЛЬЗУЕТСЯ ДЛЯ ДИАГНОСТИКИ
' ***************
'========= ПЕРЕМЕННЫЕ
CLASSCODE=GET_VALUE(GET_SECURITY_INFO("",INSTRUMENT),«CLASS_CODE»)&""
NEW_GLOBAL(«FLAG_END»,0)
NEW_GLOBAL(«FLAG_NEW_CANDLE_ENTER»,0)
NEW_GLOBAL(«FLAG_NEW_CANDLE_EXIT»,0)
NEW_GLOBAL(«FLAG_ENTER_LONG»,0)
NEW_GLOBAL(«FLAG_ENTER_SHORT»,0)
NEW_GLOBAL(«FLAG_EXIT_LONG»,0)
NEW_GLOBAL(«FLAG_EXIT_SHORT»,0)
NEW_GLOBAL(«NULL_COUNTER»,0)
NEW_GLOBAL(«TIMECURRENTCANDLE»,0)
NEW_GLOBAL(«TIMEPREVCANDLE»,0)
NEW_GLOBAL(«PREV_STOP»,0)
NEW_GLOBAL(«TIMEPREVCANDLE1»,0)
NEW_GLOBAL(«TIMECURRENTCANDLE1»,0)
NEW_GLOBAL(«FLAG_NEW_CANDLE_ENTER1»,0)
NEW_GLOBAL(«FLAG_NEW_CANDLE_EXIT1»,0)
NEW_GLOBAL(«MaxPozaGO»,0)
NEW_GLOBAL(«MaxPozaSchet»,0)
NEW_GLOBAL(«RISKpunct»,0)
NEW_GLOBAL(«RISKrub»,0)
NEW_GLOBAL(«RISKschet»,0)
NEW_GLOBAL(«MaxPozaSchetS»,0)
NEW_GLOBAL(«RISKpunctS»,0)
NEW_GLOBAL(«RISKrubS»,0)
NEW_GLOBAL(«RISKschetS»,0)
NEW_GLOBAL(«LOTSS»,0)
NEW_GLOBAL(«LOTSB»,0)
NEW_GLOBAL(«LOTS»,0)
'========= ДАТА И ВРЕМЯ СЕРВЕРНОЕ
SERVERTIME=GET_INFO_PARAM(«SERVERTIME»)
SERVERDATE=GET_INFO_PARAM(«TRADEDATE»)
TIMESERV=SUBSTR(SERVERTIME,0,2)&SUBSTR(SERVERTIME,3,2)&SUBSTR(SERVERTIME,6,7)
HOUR=SUBSTR(TIMESERV,0,2)+0
MIN=SUBSTR(TIMESERV,2,2)+0
SEC=SUBSTR(TIMESERV,4,2)+0
TIME=TIMESERV+0
DATE=""&SUBSTR(SERVERDATE,6,4)&SUBSTR(SERVERDATE,3,2)&SUBSTR(SERVERDATE,0,2)
TRID=TIME
marginal_info=GET_CLIENT_MARGINAL_PORTFOLIO_INFO(FIRMS_LIST,CLIENTS_LIST)
IN_ALL_ASSETS=GET_VALUE (marginal_info, «IN_ALL_ASSETS»)
ALL_ASSETS=GET_VALUE (marginal_info, «ALL_ASSETS»)
BBB=ALL_ASSETS

'========= ПОЛУЧАЕМ ДАННЫЕ ПО БУМАГЕ
LAST=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,«LAST»),«PARAM_VALUE»)+0
OPEN=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,«OPEN»),«PARAM_VALUE»)+0
STEP=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,«SEC_PRICE_STEP»),«PARAM_VALUE»)+0
BID=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,«BID»),«PARAM_VALUE»)+0
ASK=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,«OFFER»),«PARAM_VALUE»)+0
HIGH=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,«HIGH»),«PARAM_VALUE»)+0
LOW=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,«LOW»),«PARAM_VALUE»)+0

'========= ПОЛУЧАЕМ ЗНАЧЕНИЕ ИНДИКАТОРА pris
pris=GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE (GET_CANDLE_EX(IDENTIFICATION_pris, DATE, TIME),«LINES»),0),«CLOSE»)+0
'========= ПОЛУЧАЕМ ЗНАЧЕНИЕ ИНДИКАТОРА MovL
MovL=GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE (GET_CANDLE_EX(IDENTIFICATION_MovL, DATE, TIME),«LINES»),0),«CLOSE»)+0
'========= ПОЛУЧАЕМ ЗНАЧЕНИЕ ИНДИКАТОРА MovH
MovH=GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE (GET_CANDLE_EX(IDENTIFICATION_MovH, DATE, TIME),«LINES»),0),«CLOSE»)+0
'========= ПОЛУЧАЕМ ЗНАЧЕНИЕ ИНДИКАТОРА refH
refH=GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE (GET_CANDLE_EX(IDENTIFICATION_refH, DATE, TIME),«LINES»),0),«CLOSE»)+0
'========= ПОЛУЧАЕМ ЗНАЧЕНИЕ ИНДИКАТОРА refL
refL=GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE (GET_CANDLE_EX(IDENTIFICATION_refL, DATE, TIME),«LINES»),0),«CLOSE»)+0
 
 
'========= КОНТРОЛЬ ДАННЫХ ПО БУМАГЕ
IF LAST=0 OR STEP=0 OR BID=0 OR ASK=0 OR HIGH=0 or LOW=0 or pris=0 or MovL=0 or MovH=0 or refH=0 or refL=0
NULL_COUNTER=NULL_COUNTER+1
IF NULL_COUNTER>50
'MESSAGE(TIME&" "&DATE&" "&LAST&" "&HIGH&" "&LOW&" "&STEP&" "&OPEN&" "&BID&" "&ASK&" "&MovH&" "&MovL&" "&refH&" "&refL&" "&pris&,1)
NULL_COUNTER=0
END IF
RETURN
END IF
 

'========= ТЕКУЩАЯ ПОЗИЦИЯ И КОЛ-ВО АКТИВНЫХ ЗАЯВОК
TP=0
ORDERCOUNT=0
FOR I FROM 0 TO GET_NUMBER_OF(«FUTURES_CLIENT_HOLDINGS»)
IF GET_VALUE (GET_ITEM («FUTURES_CLIENT_HOLDINGS», I), «SECCODE»)=INSTRUMENT AND GET_VALUE (GET_ITEM («FUTURES_CLIENT_HOLDINGS», I), «TRDACCID»)=ACCOUNT
TP=GET_VALUE(GET_ITEM(«FUTURES_CLIENT_HOLDINGS»,I), «TOTAL_NET»)+0
END IF
END FOR
FOR I FROM 0 TO GET_NUMBER_OF(«ORDERS»)
IF GET_VALUE (GET_ITEM («ORDERS», I), «STATUS»)=«ACTIVE» AND GET_VALUE (GET_ITEM («ORDERS», I), «SECCODE»)=INSTRUMENT AND GET_VALUE (GET_ITEM («ORDERS», I), «TRANS_ID»)+0<>0 AND GET_VALUE (GET_ITEM («ORDERS», I), «ACCOUNT»)=ACCOUNT
ORDERCOUNT=ORDERCOUNT+1
END IF
END FOR

'========= ЦЕНА НАШЕЙ ПОСЛЕДНЕЙ СДЕЛКИ
TRADEPRICE=LAST
IF TP>0
FOR I FROM 0 TO GET_NUMBER_OF(«TRADES»)
IF GET_VALUE (GET_ITEM («TRADES», I), «SECCODE»)=INSTRUMENT AND GET_VALUE (GET_ITEM («TRADES», I), «OPERATION»)=«BUY» AND GET_VALUE (GET_ITEM («TRADES», I), «ACCOUNT»)=ACCOUNT
TRADEPRICE=GET_VALUE(GET_ITEM(«TRADES»,I),«PRICE»)+0
END IF
END FOR
END IF
IF TP<0
FOR I FROM 0 TO GET_NUMBER_OF(«TRADES»)
IF GET_VALUE (GET_ITEM («TRADES», I), «SECCODE»)=INSTRUMENT AND GET_VALUE (GET_ITEM («TRADES», I), «OPERATION»)=«SELL»
TRADEPRICE=GET_VALUE(GET_ITEM(«TRADES»,I),«PRICE»)+0
END IF
END FOR
END IF
'========= ПОЛУЧАЕМ ИСТИННЫЙ РАЗМЕР ЛОТА для ЛОНГА
MaxPozaGO=FLOOR(BBB/GO)
RISKpunct=ABS(pris-refL)
RISKrub=RISKpunct*kk
RISKschet=BBB*RISK
MaxPozaSchet=FLOOR(RISKschet/RISKrub)
IF MaxPozaGO<MaxPozaSchet
LOTSB=MaxPozaGO
ELSE
LOTSB=MaxPozaSchet
END IF
'========= ПОЛУЧАЕМ ИСТИННЫЙ РАЗМЕР ЛОТА для ШОРТА
MaxPozaGO=FLOOR(BBB/GO)
RISKpunctS=ABS(refH-pris)
RISKrubS=RISKpunctS*kk
RISKschetS=BBB*RISK
MaxPozaSchetS=FLOOR(RISKschetS/RISKrubS)
IF MaxPozaGO<MaxPozaSchetS
LOTSS=MaxPozaGO
ELSE
LOTSS=MaxPozaSchetS
END IF
IF HIGH>MovH
LOTS=LOTSB
ELSE
LOTS=LOTSS
END IF

'========= ОПРЕДЕЛЕНИЕ НОВОЙ СВЕЧИ
OHLC(0)
TIMECURRENTCANDLE=TEXTTIME+0
IF TIMECURRENTCANDLE<>TIMEPREVCANDLE
IF TP=0
FLAG_NEW_CANDLE_ENTER=1
FLAG_NEW_CANDLE_EXIT=0
IF READ_MESSAGES=1
MESSAGE(«НОВАЯ СВЕЧА БЕЗ ПОЗИЦИИ»,1)
END IF
END IF
IF TP<>0
FLAG_NEW_CANDLE_ENTER=0
FLAG_NEW_CANDLE_EXIT=1
IF READ_MESSAGES=1
MESSAGE(«НОВАЯ СВЕЧА В ПОЗИЦИИ»,1)
END IF
END IF
TIMEPREVCANDLE=TIMECURRENTCANDLE
RETURN
END IF
'========= КОНТРОЛЬ ВРЕМЕНИ СЕССИИ И СОЕДИНЕНИЯ С СЕРВЕРОМ
IF TIME<BEGINSES OR IS_CONNECTED()<>1 OR TIME>ENDSES
RETURN
END IF

'========= ОТКРЫТИЕ ПОЗИЦИИ
IF ORDERCOUNT=0 AND FLAG_NEW_CANDLE_ENTER=1
' ENTER LONG
IF TP=0 AND LOTS>0 AND HIGH>MovH AND HIGH>refH
KILLALLORDERS(5)
MESSAGE(«RTS: ОТКРЫВАЮ LONG RTS ПОЗИЦИЮ НА „&LOTS&“ ЛОТОВ »,1)
BUY(LOTS)
END IF

IF TP=0 AND LOTS>0 AND LOW<MovL AND LOW<refL
KILLALLORDERS(5)
MESSAGE(«RTS: ОТКРЫВАЮ SHORT RTS ПОЗИЦИЮ НА „&LOTS&“ ЛОТОВ »,1)
SELL(LOTS)
END IF
END IF
'========= ЗАКРЫВАЕМ ПО ОБРАТНОМУ УСЛОВИЮ
IF ORDERCOUNT=0 AND TP<0
' ENTER LONG
IF HIGH>MovH AND HIGH>refH
KILLALLSTOP(1)
KILLALLORDERS(5)
MESSAGE(«RTS: ЗАКРЫВАЮ РЕВЕРС ШОРТ RTS ПОЗИЦИЮ НА „&LOTS&“ ЛОТОВ »,1)
BUY(LOTS)
MESSAGE(«RTS: ОТКРЫВАЮ РЕВЕРС ЛОНГ RTS ПОЗИЦИЮ НА „&LOTS&“ ЛОТОВ »,1)
BUY(LOTS)
END IF

END IF
IF ORDERCOUNT=0 AND TP>0
' ENTER SHORT
IF LOW<MovL AND LOW<refL
KILLALLSTOP(1)
KILLALLORDERS(5)
MESSAGE(«RTS: ЗАКРЫВАЮ ЛОНГ РЕВЕРС RTS ПОЗИЦИЮ НА „&LOTS&“ ЛОТОВ»,1)
SELL(LOTS)
MESSAGE(«RTS: ОТКРЫВАЮ ШОРТ РЕВЕРС RTS ПОЗИЦИЮ НА „&LOTS&“ ЛОТОВ»,1)
SELL(LOTS)
END IF
END IF

'========= БОЛЬШОЙ РИСК
IF ORDERCOUNT=0
' ENTER LONG
IF TP=0 AND LOTS=0 AND HIGH>MovH AND HIGH>refH
KILLALLORDERS(5)
MESSAGE(«СЛИШКОМ БОЛЬШОЙ РИСК ЛОНГА „&RISKrub&“» ,1)

END IF

IF TP=0 AND LOTS=0 AND LOW<MovL AND LOW<refL
KILLALLORDERS(5)
MESSAGE(«СЛИШКОМ БОЛЬШОЙ РИСК ШОРТА „&RISKrubS&“» ,1)
END IF
END IF

'========= ФОРМИРОВАНИЕ ТАБЛИЦЫ
OUTPUT=CREATE_MAP()
OUTPUT=SET_VALUE(OUTPUT,«TIME»,TIME)
IF TP>0
TP_TAB=«LONG. Q=»&TP
END IF
IF TP<0
TP_TAB=«SHORT. Q=»&TP
END IF
IF TP=0
TP_TAB=0
END IF
OUTPUT=SET_VALUE(OUTPUT,«TP_TAB»,TP_TAB)
OUTPUT=SET_VALUE(OUTPUT,«BBB»,BBB)
OUTPUT=SET_VALUE(OUTPUT,«LAST»,LAST)
OUTPUT=SET_VALUE(OUTPUT,«MaxPozaGO»,MaxPozaGO)
OUTPUT=SET_VALUE(OUTPUT,«RISKrub»,RISKrub)
OUTPUT=SET_VALUE(OUTPUT,«RISKrubS»,RISKrubS)
OUTPUT=SET_VALUE(OUTPUT,«MaxPozaSchetS»,MaxPozaSchetS)
OUTPUT=SET_VALUE(OUTPUT,«RISKschet»,RISKschet)
OUTPUT=SET_VALUE(OUTPUT,«MaxPozaSchet»,MaxPozaSchet)
OUTPUT=SET_VALUE(OUTPUT,«LOTSS»,LOTSS)
OUTPUT=SET_VALUE(OUTPUT,«LOTSB»,LOTSB)
OUTPUT=SET_VALUE(OUTPUT,«LOTS»,LOTS)
DELETE_ALL_ITEMS()
ADD_ITEM(1,OUTPUT)
'========= ФУНКЦИИ
' BUY
FUNC BUY(KEYS)
PRICE=ASK+STEP*10
ORDER(PRICE,LOTS,«B»)
END FUNC
' SELL
FUNC SELL(KEYS)
PRICE=BID-STEP*10
ORDER(PRICE,LOTS,«S»)
END FUNC

' ORDER
FUNC ORDER(FPRICE,FLOTS,FDIRECTION)
NEW_GLOBAL(«TRANS_PARAMS», "")
NEW_GLOBAL(«TRANS_RESULT», "")
TRANS_PARAMS = ""
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «TRANS_ID», TRID&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ACTION», «NEW_ORDER»)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «TYPE», «L»)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «CLASSCODE», CLASSCODE&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «SECCODE», INSTRUMENT&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ACCOUNT», ACCOUNT)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «OPERATION», FDIRECTION&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «PRICE», FPRICE&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «QUANTITY», FLOTS&"")
TRANS_RESULT = SEND_TRANSACTION (30, TRANS_PARAMS)
RESULT=GET_VALUE(TRANS_RESULT, «DESCRIPTION»)
MESSAGE(RESULT,1)
END FUNC

' OHLC
FUNC OHLC(NUMBER)
NUMBER=NUMBER+1
M=0
CURYEAR=GET_VALUE(GET_DATETIME(), «YEAR»)
CURMONTH=GET_VALUE(GET_DATETIME(), «MONTH»)
CURDAY=GET_VALUE(GET_DATETIME(), «DAY»)
CURHOUR = GET_VALUE(GET_DATETIME(), «HOUR»)
CURMIN = GET_VALUE(GET_DATETIME(), «MIN»)
CURMIN = INTERVAL*FLOOR(CURMIN/INTERVAL)
N=(5*24)*(FLOOR(60/INTERVAL))
FOR I FROM 1 TO N
TEXTDATA=FTEXTDATA(CURYEAR,CURMONTH,CURDAY) &""
TEXTTIME=FTEXTTIME(CURHOUR,CURMIN) & ""
CANDLE=GET_CANDLE(«SPBFUT»,INSTRUMENT, "", INTERVAL & "", «PRICE», TEXTDATA, TEXTTIME)
OPEN=GET_VALUE (CANDLE, «OPEN»)+0
IF OPEN>0
M=M+1
IF M=NUMBER
' DATE=TEXTDATA
' TIME=TEXTTIME
OPEN=GET_VALUE (CANDLE, «OPEN»)+0
HIGH=GET_VALUE (CANDLE, «HIGH»)+0
LOW=GET_VALUE (CANDLE, «LOW»)+0
CLOSE=GET_VALUE (CANDLE, «CLOSE»)+0
I=N
END IF
END IF
CURMIN=CURMIN-INTERVAL
IF CURMIN<0
CURMIN=60+CURMIN
CURHOUR=CURHOUR-1
IF CURHOUR<0
CURHOUR=23
CURDAY=CURDAY-1
IF CURDAY<1
CURDAY=31
CURMONTH=CURMONTH-1
IF CURMONTH<1
CURMONTH=12
CURYEAR=CURYEAR-1
IF CURYEAR<0
MESSAGE («NO DATA»,1)
END IF
END IF
END IF
END IF
END IF
END FOR
END FUNC
' ФУНКЦИЯ ПЕРЕВОДА ДАТЫ В ТЕКСТОВЫЙ ФОРМАТ
FUNC FTEXTDATA(YEAR,MONTH,DAY)
IF (LEN(MONTH) < 2)
MONTH = «0» & MONTH
END IF
IF (LEN(DAY) < 2)
DAY = «0» & DAY
END IF
RESULT = YEAR & MONTH & DAY
END FUNC
' ФУНКЦИЯ ПЕРЕВОДА ВРЕМЕНИ В ТЕКСТОВЫЙ ФОРМАТ
FUNC FTEXTTIME(HOUR,MIN,SEC)
IF (LEN(HOUR) < 2)
HOUR = «0» & HOUR
END IF
IF (LEN(MIN) < 2)
MIN = «0» & MIN
END IF
RESULT = HOUR & MIN & «00»
END FUNC
' KILLALLORDERS
FUNC KILLALLORDERS(KEY)
FOR I FROM 0 TO GET_NUMBER_OF(«ORDERS»)
IF GET_VALUE (GET_ITEM («ORDERS», I), «STATUS»)=«ACTIVE» AND GET_VALUE (GET_ITEM («ORDERS», I), «SECCODE»)=INSTRUMENT AND GET_VALUE (GET_ITEM («ORDERS», I), «TRANS_ID»)+0<>0
NEW_GLOBAL(«TRANS_PARAMS», "")
NEW_GLOBAL(«TRANS_RESULT», "")
TRANS_PARAMS = ""
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «TRANS_ID», «1»&TRID)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «CLASSCODE», «SPBFUT»)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «SECCODE», INSTRUMENT)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ACTION», «KILL_ORDER»)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ACCOUNT», ACCOUNT)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ORDER_KEY», GET_VALUE (GET_ITEM («ORDERS»,I),«NUMBER»)&"")
TRANS_RESULT = SEND_TRANSACTION (30, TRANS_PARAMS)
RESULT=GET_VALUE(TRANS_RESULT, «DESCRIPTION»)
END IF
END FOR
END FUNC
' KILLALLSTOP
FUNC KILLALLSTOP(KEY)
FOR I FROM 0 TO GET_NUMBER_OF(«STOP_ORDERS»)
IF (GET_VALUE (GET_ITEM («STOP_ORDERS», I), «STATUS»)=«ACTIVE») AND GET_VALUE (GET_ITEM («STOP_ORDERS», I), «SECCODE»)=INSTRUMENT
NEW_GLOBAL(«TRANS_PARAMS», "")
NEW_GLOBAL(«TRANS_RESULT», "")
TRANS_PARAMS = ""
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «TRANS_ID», «8»&TIME)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «CLASSCODE», CLASSCODE)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «SECCODE», INSTRUMENT)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ACCOUNT», ACCOUNT)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «STOP_ORDER_KEY», GET_VALUE (GET_ITEM («STOP_ORDERS», I), «NUMBER»)&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ACTION», «KILL_STOP_ORDER»)
TRANS_RESULT = SEND_TRANSACTION (30, TRANS_PARAMS)
RESULT=GET_VALUE(TRANS_RESULT, «DESCRIPTION»)
END IF
END FOR
END FUNC

END_PROGRAM

PARAMETER TP_TAB;
PARAMETER_TITLE ПОЗA;
PARAMETER_DESCRIPTION ПОЗA;
PARAMETER_TYPE STRING(30);
END
PARAMETER BBB;
PARAMETER_TITLE СЧЕТ;
PARAMETER_DESCRIPTION СЧЕТ;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER LAST;
PARAMETER_TITLE LAST;
PARAMETER_DESCRIPTION LAST;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER MaxPozaGO;
PARAMETER_TITLE MaxPozaGO;
PARAMETER_DESCRIPTION MaxPozaGO;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER RISKrub;
PARAMETER_TITLE RISKrub;
PARAMETER_DESCRIPTION RISKrub;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER RISKrubS;
PARAMETER_TITLE RISKrubS;
PARAMETER_DESCRIPTION RISKrubS;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER RISKschet;
PARAMETER_TITLE RISKschet;
PARAMETER_DESCRIPTION RISKschet;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER MaxPozaSchet;
PARAMETER_TITLE MaxPozaSchet;
PARAMETER_DESCRIPTION MaxPozaSchet;
PARAMETER_TYPE NUMERIC(10,2);
END

PARAMETER MaxPozaSchetS;
PARAMETER_TITLE MaxPozaSchetS;
PARAMETER_DESCRIPTION MaxPozaSchetS;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER LOTSS;
PARAMETER_TITLE LOTSS;
PARAMETER_DESCRIPTION LOTSS;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER LOTSB;
PARAMETER_TITLE LOTSB;
PARAMETER_DESCRIPTION LOTSB;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER LOTS;
PARAMETER_TITLE LOTS;
PARAMETER_DESCRIPTION LOTS;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER TIME;
PARAMETER_TITLE ВРЕМЯ;
PARAMETER_DESCRIPTION ВРЕМЯ;
PARAMETER_TYPE STRING(30);
END
END_PORTFOLIO_EX
2. Робот выставления стопов.


PORTFOLIO_EX ROBOTRTS;
DESCRIPTION ROBOTRTS;
CLIENTS_LIST Q00000F; ' ВПИШИТЕ СВОЙ
FIRMS_LIST TROYMFIRM; ' ВПИШИТЕ СВОЙ, МОЙ ТРОЙКА
USE_CASE_SENSITIVE_CONSTANTS;
PROGRAM
' ВЕРСИЯ 20 ФЕВРАЛЯ 2014 ГОДА — ДВЕ СВЕДНИХ и ПРЕДЫДУЩИЙ HIGH AND LOW, СО СТОПАМИ И РАЗМЕРОМ ПОЗИЦИИ ОТ СТОПА, БЕЗ ПРОФИТА,
' НАСТРОЙКИ ТОЛЬКО ЗДЕСЬ!
' ВХОД В ЛОНГ, ОН ЖЕ ВЫХОД ШОРТ --h>=Mov(h,ma1,E) and h>=ref(h,-1)
' ВХОД В ШОРТ, ОН ЖЕ ВЫХОД ЛОНГ — l<=Mov(l,ma1,E) and l<=ref(l,-1)

IDENTIFICATION_MovL=«MovL» ' ИДЕНТИФИКАТОР ДЛЯ ГРАФИКА СРЕДНЯЯ ПО ЛОЯМ
IDENTIFICATION_MovH=«MovH» ' ИДЕНТИФИКАТОР ДЛЯ ГРАФИКА СРЕДНЯЯ ПО ХАЯМ
IDENTIFICATION_refH=«refH» ' ИДЕНТИФИКАТОР ДЛЯ ГРАФИКА ПРЕДЫДУЩИЙ ХАЙ
IDENTIFICATION_refL=«refL» ' ИДЕНТИФИКАТОР ДЛЯ ГРАФИКА ПРЕДЫДУЩИЙ ЛОУ
IDENTIFICATION_priS=«priS» ' ИДЕНТИФИКАТОР ДЛЯ ГРАФИКА ЦЕНА
CLIENTS_LIST=«Q00000F» ' ВПИШИТЕ СВОЙ
FIRMS_LIST=«TROYMFIRM» ' ВПИШИТЕ СВОЙ, МОЙ ТРОЙКА
INTERVAL=60 ' ТАЙМФРЕЙМ НА ОТКРЫТОМ ГРАФИКЕ В МИНУТАХ, МИНИМУМ 1 МАКСИМУМ 60. ВАЖНО!
ACCOUNT=«SPBFUT00000» ' ВПИСАТЬ АККАУНТ!!!
INSTRUMENT=«RTS-3.14» ' КОД БУМАГИ
BEGINSES=100000 ' СТАРТ РОБОТА
BEGINSES1=100000 ' СТАРТ РОБОТА
ENDSES=234456 ' ОКОНЧАНИЕ РАБОТЫ РОБОТА
RISK=0.03 ' в процентах 3 % от счета
GO=10000 ' ГО по фьючу, принимаю 10
KK=0.67 ' коэф-т перевода пунктов в рубли
STOPLOSS=100' ВЕЛИЧИНА СТОПА — «ТЕЙКПРОФИТА СТАНДАРТА QUIK» В ПИПСАХ. ЕСЛИ ПОСТАНОВКА СТОПА НЕ НУЖНА — ПОСТАВЬТЕ НОЛЬ
RAZNICA=100 ' ЗАЩИТНЫЙ СПРЕД В СТОПЗАЯВКЕ-ТЕЙКПРОФИТЕ (ПРОСКАЛЬЗЫВАНИЕ В СТОПЕ)
READ_MESSAGES=1 ' 1-РОБОТ ПРИ КАЖДОМ ДЕЙСТВИИ ПИШЕТ ОБ ЭТОМ СООБЩЕНИЕ, 0-НЕ ПИШЕТ. ИСПОЛЬЗУЕТСЯ ДЛЯ ДИАГНОСТИКИ
' ***************
'========= ПЕРЕМЕННЫЕ
CLASSCODE=GET_VALUE(GET_SECURITY_INFO("",INSTRUMENT),«CLASS_CODE»)&""
NEW_GLOBAL(«FLAG_END»,0)
NEW_GLOBAL(«FLAG_NEW_CANDLE_ENTER»,0)
NEW_GLOBAL(«FLAG_NEW_CANDLE_EXIT»,0)
NEW_GLOBAL(«FLAG_ENTER_LONG»,0)
NEW_GLOBAL(«FLAG_ENTER_SHORT»,0)
NEW_GLOBAL(«FLAG_EXIT_LONG»,0)
NEW_GLOBAL(«FLAG_EXIT_SHORT»,0)
NEW_GLOBAL(«NULL_COUNTER»,0)
NEW_GLOBAL(«TIMECURRENTCANDLE»,0)
NEW_GLOBAL(«TIMEPREVCANDLE»,0)
NEW_GLOBAL(«PREV_STOP»,0)
NEW_GLOBAL(«TIMEPREVCANDLE1»,0)
NEW_GLOBAL(«TIMECURRENTCANDLE1»,0)
NEW_GLOBAL(«FLAG_NEW_CANDLE_ENTER1»,0)
NEW_GLOBAL(«FLAG_NEW_CANDLE_EXIT1»,0)
NEW_GLOBAL(«MaxPozaGO»,0)
NEW_GLOBAL(«MaxPozaSchet»,0)
NEW_GLOBAL(«RISKpunct»,0)
NEW_GLOBAL(«RISKrub»,0)
NEW_GLOBAL(«RISKschet»,0)
NEW_GLOBAL(«MaxPozaSchetS»,0)
NEW_GLOBAL(«RISKpunctS»,0)
NEW_GLOBAL(«RISKrubS»,0)
NEW_GLOBAL(«RISKschetS»,0)
NEW_GLOBAL(«LOTSS»,0)
NEW_GLOBAL(«LOTSB»,0)
NEW_GLOBAL(«LOTS»,0)
'========= ДАТА И ВРЕМЯ СЕРВЕРНОЕ
SERVERTIME=GET_INFO_PARAM(«SERVERTIME»)
SERVERDATE=GET_INFO_PARAM(«TRADEDATE»)
TIMESERV=SUBSTR(SERVERTIME,0,2)&SUBSTR(SERVERTIME,3,2)&SUBSTR(SERVERTIME,6,7)
HOUR=SUBSTR(TIMESERV,0,2)+0
MIN=SUBSTR(TIMESERV,2,2)+0
SEC=SUBSTR(TIMESERV,4,2)+0
TIME=TIMESERV+0
DATE=""&SUBSTR(SERVERDATE,6,4)&SUBSTR(SERVERDATE,3,2)&SUBSTR(SERVERDATE,0,2)
TRID=TIME
marginal_info=GET_CLIENT_MARGINAL_PORTFOLIO_INFO(FIRMS_LIST,CLIENTS_LIST)
IN_ALL_ASSETS=GET_VALUE (marginal_info, «IN_ALL_ASSETS»)
ALL_ASSETS=GET_VALUE (marginal_info, «ALL_ASSETS»)
BBB=ALL_ASSETS

'========= ПОЛУЧАЕМ ДАННЫЕ ПО БУМАГЕ
LAST=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,«LAST»),«PARAM_VALUE»)+0
OPEN=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,«OPEN»),«PARAM_VALUE»)+0
STEP=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,«SEC_PRICE_STEP»),«PARAM_VALUE»)+0
BID=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,«BID»),«PARAM_VALUE»)+0
ASK=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,«OFFER»),«PARAM_VALUE»)+0
HIGH=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,«HIGH»),«PARAM_VALUE»)+0
LOW=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,«LOW»),«PARAM_VALUE»)+0

'========= ПОЛУЧАЕМ ЗНАЧЕНИЕ ИНДИКАТОРА pris
pris=GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE (GET_CANDLE_EX(IDENTIFICATION_pris, DATE, TIME),«LINES»),0),«CLOSE»)+0
'========= ПОЛУЧАЕМ ЗНАЧЕНИЕ ИНДИКАТОРА MovL
MovL=GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE (GET_CANDLE_EX(IDENTIFICATION_MovL, DATE, TIME),«LINES»),0),«CLOSE»)+0
'========= ПОЛУЧАЕМ ЗНАЧЕНИЕ ИНДИКАТОРА MovH
MovH=GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE (GET_CANDLE_EX(IDENTIFICATION_MovH, DATE, TIME),«LINES»),0),«CLOSE»)+0
'========= ПОЛУЧАЕМ ЗНАЧЕНИЕ ИНДИКАТОРА refH
refH=GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE (GET_CANDLE_EX(IDENTIFICATION_refH, DATE, TIME),«LINES»),0),«CLOSE»)+0
'========= ПОЛУЧАЕМ ЗНАЧЕНИЕ ИНДИКАТОРА refL
refL=GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE (GET_CANDLE_EX(IDENTIFICATION_refL, DATE, TIME),«LINES»),0),«CLOSE»)+0
 
 
'========= КОНТРОЛЬ ДАННЫХ ПО БУМАГЕ
IF LAST=0 OR STEP=0 OR BID=0 OR ASK=0 OR HIGH=0 or LOW=0 or pris=0 or MovL=0 or MovH=0 or refH=0 or refL=0
NULL_COUNTER=NULL_COUNTER+1
IF NULL_COUNTER>50
'MESSAGE(TIME&" "&DATE&" "&LAST&" "&HIGH&" "&LOW&" "&STEP&" "&OPEN&" "&BID&" "&ASK&" "&MovH&" "&MovL&" "&refH&" "&refL&" "&pris&,1)
NULL_COUNTER=0
END IF
RETURN
END IF
 

'========= ТЕКУЩАЯ ПОЗИЦИЯ И КОЛ-ВО АКТИВНЫХ ЗАЯВОК
TP=0
ORDERCOUNT=0
FOR I FROM 0 TO GET_NUMBER_OF(«FUTURES_CLIENT_HOLDINGS»)
IF GET_VALUE (GET_ITEM («FUTURES_CLIENT_HOLDINGS», I), «SECCODE»)=INSTRUMENT AND GET_VALUE (GET_ITEM («FUTURES_CLIENT_HOLDINGS», I), «TRDACCID»)=ACCOUNT
TP=GET_VALUE(GET_ITEM(«FUTURES_CLIENT_HOLDINGS»,I), «TOTAL_NET»)+0
END IF
END FOR
FOR I FROM 0 TO GET_NUMBER_OF(«ORDERS»)
IF GET_VALUE (GET_ITEM («ORDERS», I), «STATUS»)=«ACTIVE» AND GET_VALUE (GET_ITEM («ORDERS», I), «SECCODE»)=INSTRUMENT AND GET_VALUE (GET_ITEM («ORDERS», I), «TRANS_ID»)+0<>0 AND GET_VALUE (GET_ITEM («ORDERS», I), «ACCOUNT»)=ACCOUNT
ORDERCOUNT=ORDERCOUNT+1
END IF
END FOR
'========= КОЛ-ВО АКТИВНЫХ СТОПОВ
STOPORDERCOUNT=0
STOPORDERDIR=""
STOPORDERQ=0
STOPORDERPRICE=0
FOR I FROM 0 TO GET_NUMBER_OF(«STOP_ORDERS»)
IF GET_VALUE (GET_ITEM («STOP_ORDERS», I), «STATUS»)=«ACTIVE» AND GET_VALUE (GET_ITEM («STOP_ORDERS», I), «SECCODE»)=INSTRUMENT AND GET_VALUE (GET_ITEM («STOP_ORDERS», I), «TRANS_ID»)+0<>0 AND GET_VALUE (GET_ITEM («STOP_ORDERS», I), «ACCOUNT»)=ACCOUNT
STOPORDERCOUNT=STOPORDERCOUNT+1
STOPORDERPRICE=GET_VALUE(GET_ITEM(«STOP_ORDERS»,I),«CONDITION_PRICE»)+0
STOPORDERDIR=GET_VALUE(GET_ITEM(«STOP_ORDERS»,I),«OPERATION»)
STOPORDERQ=GET_VALUE(GET_ITEM(«STOP_ORDERS»,I),«QUANTITY»)+0
END IF
END FOR
'========= ЦЕНА НАШЕЙ ПОСЛЕДНЕЙ СДЕЛКИ
TRADEPRICE=LAST
IF TP>0
FOR I FROM 0 TO GET_NUMBER_OF(«TRADES»)
IF GET_VALUE (GET_ITEM («TRADES», I), «SECCODE»)=INSTRUMENT AND GET_VALUE (GET_ITEM («TRADES», I), «OPERATION»)=«BUY» AND GET_VALUE (GET_ITEM («TRADES», I), «ACCOUNT»)=ACCOUNT
TRADEPRICE=GET_VALUE(GET_ITEM(«TRADES»,I),«PRICE»)+0
END IF
END FOR
END IF
IF TP<0
FOR I FROM 0 TO GET_NUMBER_OF(«TRADES»)
IF GET_VALUE (GET_ITEM («TRADES», I), «SECCODE»)=INSTRUMENT AND GET_VALUE (GET_ITEM («TRADES», I), «OPERATION»)=«SELL»
TRADEPRICE=GET_VALUE(GET_ITEM(«TRADES»,I),«PRICE»)+0
END IF
END FOR
END IF
'========= ПОЛУЧАЕМ ИСТИННЫЙ РАЗМЕР ЛОТА для ЛОНГА
MaxPozaGO=FLOOR(BBB/GO)
RISKpunct=ABS(pris-refL)
RISKrub=RISKpunct*kk
RISKschet=BBB*RISK
MaxPozaSchet=FLOOR(RISKschet/RISKrub)
IF MaxPozaGO<MaxPozaSchet
LOTSB=MaxPozaGO
ELSE
LOTSB=MaxPozaSchet
END IF
'========= ПОЛУЧАЕМ ИСТИННЫЙ РАЗМЕР ЛОТА для ШОРТА
MaxPozaGO=FLOOR(BBB/GO)
RISKpunctS=ABS(refH-pris)
RISKrubS=RISKpunctS*kk
RISKschetS=BBB*RISK
MaxPozaSchetS=FLOOR(RISKschetS/RISKrubS)
IF MaxPozaGO<MaxPozaSchetS
LOTSS=MaxPozaGO
ELSE
LOTSS=MaxPozaSchetS
END IF
IF HIGH>MovH
LOTS=LOTSB
ELSE
LOTS=LOTSS
END IF
 
'========= КОНТРОЛЬ КОЛИЧЕСТВА И КАЧЕСТВА СТОПЗАЯВОК
IF STOPORDERCOUNT>1
KILLALLSTOP(1)
RETURN
END IF
IF STOPORDERCOUNT>0 AND TP=0
KILLALLSTOP(2)
RETURN
END IF
IF STOPORDERCOUNT>0 AND TP>0 AND STOPORDERDIR=«BUY»
KILLALLSTOP(3)
RETURN
END IF
IF STOPORDERCOUNT>0 AND TP<0 AND STOPORDERDIR=«SELL»
KILLALLSTOP(4)
RETURN
END IF
IF STOPORDERCOUNT>0 AND STOPORDERQ<>ABS(TP)
KILLALLSTOP(5)
RETURN
END IF


'========= КОНТРОЛЬ СТОПОВ
IF TP<>0 AND STOPORDERCOUNT=0
PAUSE(3)
END IF

'========= ПОСТАНОВКА СТОПОВ
IF STOPLOSS>0
IF TP>0 AND STOPORDERCOUNT=0 AND ORDERCOUNT=0
STOPPRICE=refL
LOTS=ABS(TP)
DIRECTION=«S»
IF READ_MESSAGES=1
MESSAGE(«RTS: ПОСТАНОВКА СТОП-ТЕЙКПРОФИТА НА ПРОДАЖУ „&LOTS&“ ЛОТОВ»,1)
END IF
STOPORDER(STOPPRICE,LOTS,DIRECTION)
END IF
IF TP<0 AND STOPORDERCOUNT=0 AND ORDERCOUNT=0
STOPPRICE=refH
LOTS=ABS(TP)
DIRECTION=«B»
IF READ_MESSAGES=1
MESSAGE(«RTS: ПОСТАНОВКА СТОП-ТЕЙКПРОФИТА НА ПОКУПКУ „&LOTS&“ ЛОТОВ»,1)
END IF
STOPORDER(STOPPRICE,LOTS,DIRECTION)
END IF
END IF

'========= КОНТРОЛЬ ВРЕМЕНИ СЕССИИ И СОЕДИНЕНИЯ С СЕРВЕРОМ
IF TIME<BEGINSES OR IS_CONNECTED()<>1 OR TIME>ENDSES
RETURN
END IF

'========= ФОРМИРОВАНИЕ ТАБЛИЦЫ
OUTPUT=CREATE_MAP()
OUTPUT=SET_VALUE(OUTPUT,«TIME»,TIME)
IF TP>0
TP_TAB=«LONG. Q=»&TP
END IF
IF TP<0
TP_TAB=«SHORT. Q=»&TP
END IF
IF TP=0
TP_TAB=0
END IF
OUTPUT=SET_VALUE(OUTPUT,«TP_TAB»,TP_TAB)
DELETE_ALL_ITEMS()
ADD_ITEM(1,OUTPUT)
'========= ФУНКЦИИ
' BUY
FUNC BUY(KEYS)
PRICE=ASK+STEP*10
ORDER(PRICE,LOTS,«B»)
END FUNC
' SELL
FUNC SELL(KEYS)
PRICE=BID-STEP*10
ORDER(PRICE,LOTS,«S»)
END FUNC

' ORDER
FUNC ORDER(FPRICE,FLOTS,FDIRECTION)
NEW_GLOBAL(«TRANS_PARAMS», "")
NEW_GLOBAL(«TRANS_RESULT», "")
TRANS_PARAMS = ""
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «TRANS_ID», TRID&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ACTION», «NEW_ORDER»)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «TYPE», «L»)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «CLASSCODE», CLASSCODE&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «SECCODE», INSTRUMENT&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ACCOUNT», ACCOUNT)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «OPERATION», FDIRECTION&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «PRICE», FPRICE&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «QUANTITY», FLOTS&"")
TRANS_RESULT = SEND_TRANSACTION (30, TRANS_PARAMS)
RESULT=GET_VALUE(TRANS_RESULT, «DESCRIPTION»)
MESSAGE(RESULT,1)
END FUNC
' PAUSE
FUNC PAUSE(PAUSE_TIME)
PST = GET_DATETIME()
FIRST_SYS_TIME = 0+GET_VALUE(PST, «HOUR»)*3600000 + GET_VALUE(PST, «MIN»)*60000 + GET_VALUE(PST, «SEC»)*1000 + GET_VALUE(PST, «MILLISEC»)
FOR PST_FLAG FROM 0 TO 1
PST = GET_DATETIME()
SECOND_SYS_TIME = 0+GET_VALUE(PST, «HOUR»)*3600000 + GET_VALUE(PST, «MIN»)*60000 + GET_VALUE(PST, «SEC»)*1000 + GET_VALUE(PST, «MILLISEC»)
DIFF_TIME=(SECOND_SYS_TIME-FIRST_SYS_TIME)
IF DIFF_TIME<= PAUSE_TIME*1000
PST_FLAG = -1
END IF
END FOR
END FUNC
' OHLC
FUNC OHLC(NUMBER)
NUMBER=NUMBER+1
M=0
CURYEAR=GET_VALUE(GET_DATETIME(), «YEAR»)
CURMONTH=GET_VALUE(GET_DATETIME(), «MONTH»)
CURDAY=GET_VALUE(GET_DATETIME(), «DAY»)
CURHOUR = GET_VALUE(GET_DATETIME(), «HOUR»)
CURMIN = GET_VALUE(GET_DATETIME(), «MIN»)
CURMIN = INTERVAL*FLOOR(CURMIN/INTERVAL)
N=(5*24)*(FLOOR(60/INTERVAL))
FOR I FROM 1 TO N
TEXTDATA=FTEXTDATA(CURYEAR,CURMONTH,CURDAY) &""
TEXTTIME=FTEXTTIME(CURHOUR,CURMIN) & ""
CANDLE=GET_CANDLE(«SPBFUT»,INSTRUMENT, "", INTERVAL & "", «PRICE», TEXTDATA, TEXTTIME)
OPEN=GET_VALUE (CANDLE, «OPEN»)+0
IF OPEN>0
M=M+1
IF M=NUMBER
' DATE=TEXTDATA
' TIME=TEXTTIME
OPEN=GET_VALUE (CANDLE, «OPEN»)+0
HIGH=GET_VALUE (CANDLE, «HIGH»)+0
LOW=GET_VALUE (CANDLE, «LOW»)+0
CLOSE=GET_VALUE (CANDLE, «CLOSE»)+0
I=N
END IF
END IF
CURMIN=CURMIN-INTERVAL
IF CURMIN<0
CURMIN=60+CURMIN
CURHOUR=CURHOUR-1
IF CURHOUR<0
CURHOUR=23
CURDAY=CURDAY-1
IF CURDAY<1
CURDAY=31
CURMONTH=CURMONTH-1
IF CURMONTH<1
CURMONTH=12
CURYEAR=CURYEAR-1
IF CURYEAR<0
MESSAGE («NO DATA»,1)
END IF
END IF
END IF
END IF
END IF
END FOR
END FUNC
' ФУНКЦИЯ ПЕРЕВОДА ДАТЫ В ТЕКСТОВЫЙ ФОРМАТ
FUNC FTEXTDATA(YEAR,MONTH,DAY)
IF (LEN(MONTH) < 2)
MONTH = «0» & MONTH
END IF
IF (LEN(DAY) < 2)
DAY = «0» & DAY
END IF
RESULT = YEAR & MONTH & DAY
END FUNC
' ФУНКЦИЯ ПЕРЕВОДА ВРЕМЕНИ В ТЕКСТОВЫЙ ФОРМАТ
FUNC FTEXTTIME(HOUR,MIN,SEC)
IF (LEN(HOUR) < 2)
HOUR = «0» & HOUR
END IF
IF (LEN(MIN) < 2)
MIN = «0» & MIN
END IF
RESULT = HOUR & MIN & «00»
END FUNC
' KILLALLORDERS
FUNC KILLALLORDERS(KEY)
FOR I FROM 0 TO GET_NUMBER_OF(«ORDERS»)
IF GET_VALUE (GET_ITEM («ORDERS», I), «STATUS»)=«ACTIVE» AND GET_VALUE (GET_ITEM («ORDERS», I), «SECCODE»)=INSTRUMENT AND GET_VALUE (GET_ITEM («ORDERS», I), «TRANS_ID»)+0<>0
NEW_GLOBAL(«TRANS_PARAMS», "")
NEW_GLOBAL(«TRANS_RESULT», "")
TRANS_PARAMS = ""
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «TRANS_ID», «1»&TRID)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «CLASSCODE», «SPBFUT»)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «SECCODE», INSTRUMENT)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ACTION», «KILL_ORDER»)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ACCOUNT», ACCOUNT)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ORDER_KEY», GET_VALUE (GET_ITEM («ORDERS»,I),«NUMBER»)&"")
TRANS_RESULT = SEND_TRANSACTION (30, TRANS_PARAMS)
RESULT=GET_VALUE(TRANS_RESULT, «DESCRIPTION»)
END IF
END FOR
END FUNC
' KILLALLSTOP
FUNC KILLALLSTOP(KEY)
FOR I FROM 0 TO GET_NUMBER_OF(«STOP_ORDERS»)
IF (GET_VALUE (GET_ITEM («STOP_ORDERS», I), «STATUS»)=«ACTIVE») AND GET_VALUE (GET_ITEM («STOP_ORDERS», I), «SECCODE»)=INSTRUMENT
NEW_GLOBAL(«TRANS_PARAMS», "")
NEW_GLOBAL(«TRANS_RESULT», "")
TRANS_PARAMS = ""
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «TRANS_ID», «8»&TIME)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «CLASSCODE», CLASSCODE)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «SECCODE», INSTRUMENT)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ACCOUNT», ACCOUNT)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «STOP_ORDER_KEY», GET_VALUE (GET_ITEM («STOP_ORDERS», I), «NUMBER»)&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ACTION», «KILL_STOP_ORDER»)
TRANS_RESULT = SEND_TRANSACTION (30, TRANS_PARAMS)
RESULT=GET_VALUE(TRANS_RESULT, «DESCRIPTION»)
END IF
END FOR
END FUNC
'========= ФУНКЦИЯ ПОСТАНОВКИ СТОППРИКАЗА
FUNC STOPORDER(PRICE,LOTS,DIRECTION)
NEW_GLOBAL(«TRANS_PARAMS», "")
NEW_GLOBAL(«TRANS_RESULT», "")
TRANS_PARAMS = ""
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «EXPIRY_DATE», «TODAY»)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «TRANS_ID», TRID&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ACTION», «NEW_STOP_ORDER»)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «CLASSCODE», «SPBFUT»)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «SECCODE», INSTRUMENT)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «ACCOUNT», ACCOUNT)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «OPERATION», DIRECTION&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «STOPPRICE», PRICE&"")
IF TP>0
PRICE=MAL1-RAZNICA
END IF
IF TP<0
PRICE=MAH1+RAZNICA
END IF
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «PRICE», PRICE&"") ' СТОПЗАЯВКА ВЫСТАВЛЯЕТСЯ С ОДИНАКОВЫМИ СТОПЦЕНОЙ И ЦЕНОЙ.
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «QUANTITY», LOTS&"")
TRANS_RESULT = SEND_TRANSACTION (300, TRANS_PARAMS)
RESULT=GET_VALUE(TRANS_RESULT, «DESCRIPTION»)
MESSAGE (RESULT,1)
END FUNC

END_PROGRAM

PARAMETER TP_TAB;
PARAMETER_TITLE ПОЗA;
PARAMETER_DESCRIPTION ПОЗA;
PARAMETER_TYPE STRING(30);
END

PARAMETER TIME;
PARAMETER_TITLE ВРЕМЯ;
PARAMETER_DESCRIPTION ВРЕМЯ;
PARAMETER_TYPE STRING(30);
END
END_PORTFOLIO_EX

Будут вопросы, пишите. Всем отвечу.

Некоторые строки выводятся не корректно. Сброшу.
Удачи!!
 
 

Спасибо! Тестировал нечто подобное(более сложный алгоритм с фильтром), хорошо работает даже в простом варианте.
avatar

robogwlor

robogwlor, в роботах ничего не понимаю, и, глядя на алгоритм, глаза становятся в форме вопросительных знаков)))
robogwlor, и где твой майбах?
Леха Майтрейд, а твой где? )))
avatar

Zuccer0

Zuccer0/Андрей, майбах не в моем вкусе)
годный код! ;) +
avatar

.*Trader*.

нормально идет и на S&P
avatar

"..Руслан.."

"… Руслан..", если не тяжело на mrkras_goodman@mail.ru скиньте пожалуйста,
спасибо
avatar

krasoffka

krasoffka, ок
avatar

"..Руслан.."

"… Руслан..", результат этого — красный график или зеленый? спасибо
avatar

MasterDm

MasterDm, красный график доходности. зелёный — фьючерс ртс
avatar

"..Руслан.."

"… Руслан..", обалденно+++++ молодец
avatar

MasterDm

вещь+++++!!! круто +++++
avatar

MasterDm

Спасибо!
avatar

Igor K.

++
avatar

Finsov

Маленькая поправочка :)
Не «ревисный», а реверсный.
avatar

Kir

это пять
avatar

Сергей Юрьевич

А на QLlua можно?
a181aa@outlook.com
Спасибо!
avatar

A181AA

A181AA, сори, нет.
не владею.
avatar

"..Руслан.."

Вы сами его написали?
avatar

Сергей < o-s-a.net >

Sergey_gt, Не совсем. Когда то, пару лет назад, основную болванку покупал на www.hirobot.ru/about/, лично мои только отдельные блоки.
avatar

"..Руслан.."

"… Руслан..", да, неплохой сайт сам там был когда начинал изучать Qpile
Это на часах? Хочу в экселе руками прогнать.
avatar

Бог

FGH, да
avatar

"..Руслан.."

привет всем, я тут недавно, хотелось бы попробовать этот рынок, думаю это полезная статья, но есть вопросы, для начала, как тут поднять рейтинг хотя бы, что б в личку писать?
avatar

Роман Т

Очевидный путь улучшения — искать моменты, когда нужно находиться вне рынка. В целом пост лаконичный и вместе с тем информативный. Ни отнять ни прибавить ) Круто
avatar

Бог

FGH, достаточно посчитать с фиксированным риском. За счет размера позиции будет лучше раза в три.
avatar

"..Руслан.."

Подскажите вы тестирование проводите в MetaStock, а язык там сложный и, что посоветуете почитать для изучения?
avatar

Сергей < o-s-a.net >

Sergey_gt, тестирую в метастоке. я изучал по форумам на примерах, а синтаксис банальный.
недавно увидел www.set50.com/cgi-bin/formula.asp#P
пожалуй самый объемный сайт по наличию формул и стратегий. много муры, но всегда приятно что то стырить!!! чем писать самому.
avatar

"..Руслан.."

"… Руслан..", я вообщем-то все сам все сам :-) Недавно начал изучать MQL (очень хороший язык), но тестер оставляет желать лучшего. Все стратегии тестирую в TSLab. Там все проще пареной репы.
«Пардонте — всё в метастоке. Так и не увидел преимуществ других программ.»
Попробуйте метатрейдер. Ваша стратегия уместится в 300 строк максимум вместо текущих 900.
avatar

beast

beast, это да, но как торговать. Qpile внутренний язык для самой известной платформы на рынке ММВБ, Фортс
Sergey_gt, есть метатрейдер для фортса. единственный его недостаток — там нет ленты. ну и ещё негоден само собой для hft, т.к. задержки порядка 70 мс
avatar

beast

beast, робот написан на Qpile. В метастоке, по старинке тестирую, хотя многие перешли на вестлаб. Пока никто не сформулировал плюсы. а учить новый язык уже лень. До весны настрою торговлю из метастока напрямую в квик и найн проблем с количеством строк. на метатрейдере тоже собираюсь купить болванку с блоками ввода-вывода, стопами. хотя форекс не моё.
avatar

"..Руслан.."

"… Руслан..", вопрос 1 это оптимизированный результат?
2)если да то за какой период оптимизировал, и на каком периоде прогонял?
avatar

SMA

SMA, ДАВАЙ Я ТЕБЕ СКИНУ СКРИН МЕТАСТОКА, ДАЛЬШЕ САМ.
ПЕРИОД 2009 ПО НАШЕ ВРЕМЯ
avatar

"..Руслан.."

"… Руслан..", я хочу начать писать торговые алгоритмы, я так понимаю, что ты работаешь на MetaTrader, подскажи пожалуйста с чего стоит начать:
где освоить язык (руководство, обучалка, сайт) и как ты подключал MetaTrader к бирже?
Я в этом полный чайник, возможно что-то не так написал :)
avatar

Morgan_500

"… Руслан..", по поводу «из метастока напрямую в квик» — это будет самописный адаптер или есть уже штатный MetaStock адаптер?
avatar

A181AA

Ради такого дела даже Метасток нашел в просторах интернета)))
Но, что то не хочет тестер программ Метастока 7.2 воспринимать
формулу в написанном тобой виде.
Если можно то напиши в формате тестера метастока.

Там вот есть формула типа Mov(C,1,E)> Mov(C,2,E)…
Можно переделать твою формулу так, что бы можно было протестировать в Метастоке 7.2?
Enter long
Enter short
Close long
Close short
avatar

FEARLESS

FEARLESS, у меня 10 версия но синтаксис простой возможно можно и на 7,2.
avatar

"..Руслан.."

"… Руслан..", скажите а куда вставлять идентификатор предидущий хай и лоу(если я правильно потимаю нужно 3 графика цены открыть) и еще пишет ошибку Unknown lexema (IDINTIFICATION_MOVL=«MOVL». и так В обоих роботах
avatar

володя вид

это точно грааль!!!
avatar

MasterDm

Пришлите пожалуйста файл на dendisa@yandex.ru, может получится что то упростить.
avatar

dendisa

это что, 100% годовых?????
я не программер, но условия задачи свучали слишком просто, а вот код почему-то слишком сложный :(
avatar

AndyI

если не сложно сбросьте и мне)))
knyazevslavka@yandex.ru
спасибо большое
avatar

slavyan174

и мне сбросьте пожалуйста mda-33@yandex.ru заранее Спасибо!!!
avatar

DJ

Здравствуйте! И мне сбросьте) duel@mail.ru. Спасибо!
avatar

42

Приветствую! Ну, и мне сбросьте на caffe@bk.ru. И спасибо, что поделились!
avatar

Vitastic

Здравствуйте. Можно и мне на почту ul.ildar@yandex.ru Спасибо!
avatar

ildar020

Добрый день, если не затруднит на dlisin@yandex.ru Спасибо!!!
avatar

dan◦fox

и мне скинь пожалуйста на почту. заранее спасибо!
iz-nino@yandex.ru
а тайм фрейм какой использовали в тесте?
avatar

MasterDm

MasterDm, час
avatar

"..Руслан.."

Вроде всем выслал, если кого пропустил или не дошел, пишите в личку — скину
avatar

"..Руслан.."

"… Руслан..", пришли пожалуйста файл я кое что добавлю по проще iad.ya@yandex.ru Спасибо.
avatar

tujh

за код поставил +, хоть и не понимаю что это такое.
В реале алгоритм сольет.
avatar

Stanislao

Stanislao, нет. буду спорить. Например на следующем корпоративе смартлаба или на новый 2015год, проигравший оплатит спиртное, ну или частично хотябы.
avatar

"..Руслан.."

Если можно, мне тоже скиньте — dimitronaumo@mail.ru
avatar

dimitronaumo

Здравствуйте!
Скиньте пожалуйста на — den5958@mail.ru
В вашем блоге в разделе «контакты»- ничего нет, так что пишу здесь. С уважением.
avatar

Den5958

С такими условиями слив 100%, может еще есть какие то мелочи которые сильно влияют на результат.
avatar

Apollo13

День добрый! Мне можно на 555_sib@mail.ru
Спасибо!
avatar

Дмитрий

Пожалуйста, объясните мне, почему проскалзывание около 0 и почему цены возможно лучше в реале???
avatar

koko

а если поставить не 90 и не 30 скользящую? потому что это чистая подгонка как мне кажется протестируйте с параметрами окно которых процентов 20% и все станет грустнее. т.е. поставит не 90 а +- 15. Устойчивость системы именно так можно определить! и если конечно код работает на нескольких инструментах с одними параметрами то он устойчив.
avatar

Андрей

Андрей Киселев, странная теория если учесть что всего два параметра. нет?? зачем менять период, лучше поменять второй параметр — будет ещё хуже. сделки совершать не на пробой а по закрытию свечи или открытию следующей, будет ещё хуже. а цель какая? слить депозит? даже в таком виде она работает в том числе на S&P. тестирование на других рынках, скорее это проверка на устойчивость.
avatar

"..Руслан.."

"… Руслан..", а я про два параметра не говорил параметр 90 это на одной бумаге написано было, а 30 на долларе про это речь. А работает на сп500 тоже параметры подогнали? В общем такие системы не рабочие не ставте в реал или если ставить то надо 100 сделок в реале потом сравнить с 100 сделаок на бек тесте за тот же период. В общем удачи! это важно в такой системе, но на нее никто не поставит большой капитал точно, если конечно понимает в роботостроении.
avatar

Андрей

bulyak@mail.com, попробую. Спасибо
avatar

Bulat Bulyakov

Не знаю зачем ты это делаешь дружище, но спасибо. Всяк успешный опыт на пользу.
Мы-то знаем что именно такие простые вещи и работают, но зачем палить их?
avatar

Simix

Руслан, хочу попробовать смоделировать эту стратегию в Трейдматике. Максимумы/минимумы за какой период берете?
avatar

orekton

Руслан, скинь пожалуйста на nikolaronse@gmail.com
avatar

Николай

Мужики объясните жителю колхоза ужопинск… что это за значения, Условие ЛОНГ:
ma1:=90;
h>=Mov(h,ma1,E) and h>=ref(h,-1)… никогда не торговал по машкам! Как мне в моем MT4, для торговля на хворексе, их воткнуть? Благодарю за ответ!!! )
avatar

Scorpion

Данный алгоритм накидал за 5 минут на тслабе, там такие ЛОСИ!!!
и подобных роботов у меня штук 5 или 10 и не приносят они того что хотелось бы, а если приносят за год то просадка дикая… страшно торговать…

Николай, хай больше машки 90 периодной експоненциальной и предыдущий хай меньше текущего
Дмитрий Черников, или вы накидали не правильно или у тслаба проблемы. насчет лосей. сам робот всем скинул со стопами. второй график поста тоже со стопами. ну, чем мог тем помог. дальше сами.
avatar

"..Руслан.."

Руслан, скинь пожалуйста на mjakishevs@mail.ru
avatar

sergeyvm

ждем посты «юных трейдеров», когда они поднимут бабло по этой схеме
avatar

Мурен(а)

Идущий по воде, и поднимут и не потеряют. Главное чтобы размер риска не ставили 100% и стопы не двигали. тупо дисциплина и без эмоций
avatar

"..Руслан.."

"… Руслан..", в этом и фишка. сам торгую простую прибыльную систему. нарушения дисциплины-2-3 раза в мес.
avatar

Мурен(а)

да, забыл написать, если ещё кому надо будет пишите в личку.
avatar

"..Руслан.."

"… Руслан..", Уважаемый Руслан, скажите пожалуйста для МТ4 для ручной торговли, какие мне параметры выставлять, я не могу понять что значат эти параметры у вас
Условие ЛОНГ:
ma1:=90;
h>=Mov(h,ma1,E) and h>=ref(h,-1),

например если 1 часе, у меня стоит Moving Everage Eponential, период 21, применить к Close… Что нужно мне поменять у себя?
Спасибо… до этого торговал по звездам, ща решил с машкой попробовать), только с хорошими параметрами никто не может подсказать(
avatar

Scorpion

abbat777, могу поделиться хорошими параметрами для машки) работает для любого таймфрейма… период 9 и 19 Moving Everage Eponential
avatar

Анна

побольше бы таких постов на смартлабе
avatar

inshallah_trader

Письмо с роботом не пришло, вышлите еще раз пожалуйста на dendisa@yandex.ru, может быть получится что то улучшить, Спасибо.
avatar

dendisa

Многие роботы резко сдулись после 05.2012. И на этой эквити тоже нечто подобное наблюдается. И в последнее время восстановления не видно.
Я бы такое не стал торговать.
avatar

ivanovr

я так и не догоняю выше каких максимумов должна быть цена, предидущей свечи 1H,4H,Dayli или определенное кол-во баров, или каких нибудь локальных макс. Извините может я такой тугой нарисуйте или покажите скрин кто нибудь.
avatar

володя вид

скиньте плз и мне на тест cronas@me.com
avatar

Cronas

Что бы долго не вникать в код, лучше спрошу. Защита от повторных входов на реалтайме есть? Или расчитываетесь один раз по клоусу бара? Ибо на истории это краисво, а на реале без этого будет слив.
avatar

Svips

и мне вышлите alex8668@mail.ru
avatar

alex S

Привет, спасибо за пост, если не сложно, пришли ResultReport, SystemReport и сам робот со стопами на mityaev_ivan@mail.ru
На других рынках не пробовал проверять?
avatar

Иван Митяев

Ничего не понимаю ни в торговле бумагами, ни в паскалеподобных языках, но большой респект за постЪ!
avatar

Йоганн


Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Залогиниться

Зарегистрироваться
....все тэги
Регистрация
UPDONW