После изучения предыдущих разделов, мы наконец готовы написать количественную торговую стратегию. Это будет самый важный шаг в вашем входе в количественную торговлю от ручной торговли. На самом деле, это не так загадочно. Написание стратегии - это не что иное, как реализация ваших идей с помощью кода. Этот раздел будет реализовывать количественную торговую стратегию с нуля, после изучения каждый будет знаком с тем, как писать стратегии на FMZ Quant системе.
Во-первых, откройте официальный сайт FMZ Quant, войдите в свою учетную запись. нажмите на
В предыдущей главе я представил стратегию скользящей средней. То есть: если цена выше средней цены за последние 10 дней, открыть длинную позицию. если цена ниже средней цены за последние 10 дней, короткий его. Однако, хотя цена может напрямую отражать состояние рынка, все еще будет много ложных сигналов прорыва; поэтому мы должны обновить и улучшить эту стратегию.
Во-первых, выберите более крупную скользящую среднюю для определения направления тренда. По крайней мере, половина ложных сигналов прорыва были отфильтрованы. Большая скользящая средняя цикла медленна, но будет более стабильной. Затем, чтобы увеличить уровень успеха открытия позиции, мы добавляем еще одно условие. Эта большая скользящая средняя цикла, по крайней мере, вверх; наконец, относительная позиционная связь между ценой, краткосрочной скользящей средней и долгосрочной скользящей средней используется для формирования полной торговой стратегии.
С помощью вышеперечисленных идей стратегии мы можем попытаться построить эту стратегическую логику. Логика здесь не в том, чтобы позволить вам вычислить закон небесного движения, это не так сложно. Это не что иное, как выражение предыдущих идей стратегии словами.
Открытая длинная позиция: если в настоящее время нет позиции, а цена закрытия больше, чем краткосрочная скользящая средняя, и цена закрытия больше, чем долгосрочная скользящая средняя, и краткосрочная скользящая средняя больше, чем долгосрочная скользящая средняя, и долгосрочная скользящая средняя растет.
Открытая короткая позиция: если в настоящее время нет позиции, а цена закрытия ниже, чем краткосрочная скользящая средняя, и цена закрытия ниже, чем долгосрочная скользящая средняя, и краткосрочная скользящая средняя ниже, чем долгосрочная скользящая средняя, и долгосрочная скользящая средняя падает.
Закрыть длинную позицию: если в настоящее время у вас длинная позиция, и цена закрытия меньше долгосрочной скользящей средней, или краткосрочная скользящая средняя меньше долгосрочной скользящей средней, или долгосрочная скользящая средняя падает.
Закрытие короткой позиции: если текущая позиция находится на короткой позиции, и цена закрытия больше, чем долгосрочная скользящая средняя, или краткосрочная скользящая средняя больше, чем долгосрочная скользящая средняя, или долгосрочная скользящая средняя растет.
Выше приведенная логика всей стратегии, если мы преобразуем текстовую версию этой стратегии в код, она будет включать: приобретение рыночной котировки, расчет показателей, размещение ордера на открытие и закрытие позиции, эти три шага.
Первое, что нужно сделать, это получить рыночную котировку. В этой стратегии нам нужно только получить цену закрытия. В языке M API для получения цены закрытия: CLOSE, что означает, что вам нужно только написать CLOSE в области кодирования, чтобы получить последнюю цену закрытия линии K.
Следующим шагом является вычисление показателя. В этой стратегии мы будем использовать два показателя, а именно: краткосрочную скользящую среднюю и долгосрочную скользящую среднюю. Мы предполагаем, что краткосрочная скользящая средняя - это скользящая средняя за 10 периодов, а долгосрочная скользящая средняя - это скользящая средняя за 50 периодов. Как использовать код для представления этих двух? Пожалуйста, посмотрите ниже:
MA10:=MA(CLOSE,10); // Get the 10-cycle moving average of the latest K-line and save the result in variable MA10
MA50:=MA(CLOSE,50); // Get the 50-cycle moving average of the latest K-line and save the result in variable MA50
В ручной торговле мы можем на один взгляд увидеть, растет или падает 50-периодный скользящий средний, но как мы выражаем его в коде? Подумайте внимательно, судя о том, растет ли скользящий средний или нет, является ли текущий скользящий средний линии K больше скользящей средней предыдущей линии K? или он выше двух предыдущих линий K? Если ответ да, то мы можем сказать, что скользящий средний резко падает. Мы также можем судить о падении по тому же методу.
MA10:=MA(CLOSE,10); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10
MA50:=MA(CLOSE,50); //Get the 50-cycle moving average of the latest K line and save the result to variable MA10
MA10_1:=REF(MA10,1); //Get the 10-cycle moving average of the pervious K line and save the result to variable MA10_1
MA50_1:=REF(MA50,1); //Get the 50-cycle moving average of the pervious K line and save the result to variable MA50_1
MA10_2:=REF(MA10,2); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10_2
MA50_2:=REF(MA50,2); //Get the 50-cycle moving average of the latest K line and save the result to variable MA50_2
MA50_ISUP:=MA50>MA50_1 AND MA50_1>MA50_2; //Determine whether the current 50-line moving average of the K line is rising
MA50_ISDOWN:=MA50<MA50_1 AND MA50_1<MA50_2; //Determine whether the current 50-line moving average of the K line is falling
Обратите внимание, что в строках 8 и 9 вышеперечисленного кода слово
Последним шагом является размещение заказов, вам нужно только вызвать API заказов FMZ Quant
MA10:=MA(CLOSE,10); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10
MA50:=MA(CLOSE,50); //Get the 50-cycle moving average of the latest K line and save the result to variable MA10
MA10_1:=REF(MA10,1); //Get the 10-cycle moving average of the pervious K line and save the result to variable MA10_1
MA50_1:=REF(MA50,1); //Get the 50-cycle moving average of the pervious K line and save the result to variable MA50_1
MA10_2:=REF(MA10,2); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10_2
MA50_2:=REF(MA50,2); //Get the 50-cycle moving average of the latest K line and save the result to variable MA50_2
MA50_ISUP:=MA50>MA50_1 AND MA50_1>MA50_2; //Determine whether the current 50-line moving average of the K line is rising
MA50_ISDOWN:=MA50<MA50_1 AND MA50_1<MA50_2; //Determine whether the current 50-line moving average of the K line is falling
CLOSE>MA10 AND CLOSE>MA50 AND MA10>MA50 AND MA50_ISUP,BK; //open long position
CLOSE<MA10 AND CLOSE<MA50 AND MA10<MA50 AND MA50_ISUP,SK; //open short position
CLOSE<MA50 OR MA10<MA50,SP;//close long position
CLOSE>MA50 OR MA10>MA50,BP;//close short position
Обратите внимание, что в строках 13 и 14 выше слово
Обратите внимание, что
Выше приведен весь процесс написания торговой стратегии на платформе FMZ Quant с использованием языка программирования M. В общей сложности есть три этапа: от идеи стратегии, до мышления стратегии и использования текста для описания логики, и, наконец, реализации полной торговой стратегии с кодом. Хотя это простая стратегия, конкретный процесс реализации похож на сложную стратегию, за исключением того, что стратегия и структура данных стратегии отличаются. Поэтому, если вы понимаете процесс количественной стратегии в этом разделе, вы можете проводить исследования и практику количественной стратегии на платформе FMZ Quant.
Попробуйте применить стратегии в этом разделе самостоятельно.
На основе стратегии в этом разделе добавьте функцию стоп-лосса и функцию take-profit.
В разработке количественных торговых стратегий языки программирования похожи на оружие, хороший язык программирования может помочь вам получить в два раза больше результатов при половине усилий. Например, в мире количественной торговли существует более десятка наиболее часто используемых языков Python, C ++, Java, C #, EasyLanguage и M. Какое оружие вы должны выбрать для сражения на поле боя? В следующем разделе мы представим эти распространенные языки программирования, а также характеристики каждого языка программирования.