期货量化软件:学习如何基于抛物线 SAR 设计交易系统

概述

在本文中,您将详细学习一个新的有用的技术指标,如果合适的话,根据您的交易风格,它可能会在交易中运用。 该技术指标为抛物线 SAR。 在使用 赫兹量化软件 内置的 MetaQuotes 语言编辑器编写该交易系统的代码后,我们将学习如何设计一个用于 MetaTrader5 交易平台的交易系统。 如果您想了解如何获取 MetaTrader 5,以及如何找到 MetaQuotes 语言编辑器,可以查看在 MetaEditor 中编写 MQL5 代码的主题。 ​​​​​​

贯穿前面的主题,我们将学习基于抛物线 SAR 指标的简单策略,以及如何依据其背后的概念设计一个简单的交易系统。 贯穿抛物线 SAR 定义主题,我们将更详细地学习抛物线 SAR 指标是什么,或它意味着什么,以及如何计算该指标,从而了解其背后的概念,以此种方式运用抛物线 SAR 指标会变得有效、容易。 然后,我们将根据所学内容,通过一些基于该指标概念的简单策略来掌握如何利用抛物线 SAR 指标,这些学习内容贯穿于抛物线 SAR 策略主题部分。 然后,我们将为上述简单策略设计蓝图,该蓝图将帮助我们依据清晰的策略蓝图,和我们所需构建的内容,逐步设计我们的交易系统。 然后,我们将讨论本文中最有趣的主题,因为我们将学习如何编写交易系统的代码,令计算机根据我们的策略来检查我们设计好的信号条件,并返回信号,这个过程可在基于我们的简单策略实现的智能交易系统里自动准确地完成。

在我们深入讨论话题之前,我想给您一些建议,那就是应用您自己学到的东西,因为这种方法将加深您的理解,您必须测试任何策略或任何东西,然后才能在实际账户中使用它,特别是如果您所学内容出于学习目的,因为它可能对您的交易毫无用处。

免责声明:所有信息“按原样”提供仅用于教学目的,并非出于交易目的或建议。 这些信息不能保证任何结果。 如果您选择在您的任何交易账户上使用这些材料,您将自行承担风险,您是唯一的责任人。

现在,我们来遍历本文主题,开始我们有趣的旅程。

抛物线 SAR 定义

在这一部分中,我们将更详尽地学习威尔斯·怀尔德(Welles Wilder)创建的抛物线 SAR 指标。 该指标的名称来自“抛物线”,它是指图表上指标的形式,“SAR” 是指停止和反转,或者您也许会发现其名称“抛物线时间/价格系统”,该名称是威尔斯·怀尔德在其《技术交易系统的新概念》一书中所称的相同。

抛物线 SAR 指标是趋势跟踪指标,在趋势行情中使用。该指标能够在金融产品交易后的几个周期内作出反应,然后破位等级开始移动。 因此,我们可以说,该指标的主要目标是允许您根据当前行情方向或趋势设置合适的止损点,如果您不知道,您可以参阅趋势定义主题,从而了解更多有关趋势的信息。

换言之,抛物线 SAR 指标的主要目的是创建尾随停止。 破位事关两件事的函数:时间和价格,根据价格的函数,我们可以发现破位会随着价格的相对走势而上移或下移;而根据时间的函数,无论价格的方向如何,我们都会发现破位每时每刻都在移动。

因此,我们首先需要判定趋势,然后我们就可以运用抛物线 SAR 策略。 到目前为止,我们了解了抛物线 SAR 指标代表什么,以及它能告诉我们什么。现在我们需要知道如何手工计算该指标,从而了解其背后的概念,下面是实现这一点的途径。 

根据我们所学到的,我们需要首先判定行情的趋势或方向,然后根据该判定,我们要分两种情况计算,其一是如何在上涨行情中计算抛物线 SAR,并返回上涨的 SAR,另一个是在下跌行情中如何计算抛物线 SAR,并返回下跌的 SAR。 因此,我们将分别计算这两件事:在行情上涨的情况下,上升的 SAR;和在行情下跌的情况下,下降的 SAR。

  • 上升的 SAR:
    1. 判定前一个 SAR 值 = 前一周期的前一个 SAR 值。
    2. 判定极值(EP)= 当前上升趋势的最高值。
    3. 判定加速因子(AF)= 0.02 和 0.20 之间的值。 在判定第一个最小值(0.02)后,将根据(EP)判定该值;因为每当 EP 创造一个新的高点,从而更接近 0.20 的最大值时,AF 将增加 0.02,无论趋势将延长多长时间。
    4. 当前抛物线 SAR 值 = 先验 SAR(步骤 1)+ 先验 AF *(先验 EP - 先验 SAR)。

我们举一个例子,即上升 SAR,如果我们从行情上获得以下数据:

天数最高价最低价
14543
24443.5
34643
44742
54842.5
647.542.75
74842.60
847.7542.5
94843
104942.5
1148.7542.60
125042
135142.5
145243
1551.542.5
165142
175243
185344
195445

现在我们需要计算上升 SAR,它将与以下内容相同:

  1. 判定先验 SAR 值 = 上一周期的先验 SAR 值;在本例中,得出了黄色的第一个值,出于简化,该值等于 42。
  2. 判定极值(EP)= 当前上升趋势的最高值,即 48
  3. 得到 EP 和 SAR 之间的差值,差值将为 48 - 42 = 6
  4. 判定加速度因子(AF)= 0.02 和 0.20 之间的值,第一个值为 0.02
  5. 将 AF 乘以 EP 和 SAR 之间的差值,该值将为 0.12
  6. 将先验 AF 乘以 EP 和 SAR 之间的差值(步骤 5 的结果),再与先验 SAR 相加,计算当前 SAR,该值将为 42.12

下图是示例中所有计算出的数值:

正如我们在 SAR 列中看到的那样,SAR 值在此期间每天都在上升。

  • 下降的 SAR:
    1. 判定前一个 SAR 值 = 前一周期的前一个 SAR 值。
    2. 判定极值(EP)= 当前下降趋势的最低低点。
    3. 判定加速因子(AF)= 0.02 和 0.20 之间的值。 在判定第一个最小值(0.02)后,将根据(EP)判定该值;因为每当 EP 创造一个新的低点,从而更接近 0.20 的最大值时,AF 将增加 0.02,无论趋势将延长多长时间。
    4. 当前抛物线 SAR 值 = 先验 SAR(步骤 1)- 先验 AF *(先验 EP - 先验 SAR)。

我们举一个例子,即下降 SAR,如果我们从行情上获得以下数据:

天数最高价最低价
15445
25344
35243
45142
551.542.5
65243
75142.5
85042
948.7542.6
104942.5
114843
1247.7542.50
134842.60
1447.5042.75
154842.50
164742
174643
184443.50
194543

现在,我们将计算给定周期内的下降 SAR 值,其将与以下内容相同:

  1. 判定先验 SAR 值 = 上一周期的先验 SAR 值,在本例中,给出了黄色的第一个值,出于简化,该值等于 51。
  2. 判定极值(EP)= 当前下降趋势的最低低点,即 42
  3. 得到 EP 和 SAR 之间的差值,差值将为 51 - 42 = 9
  4. 判定加速度因子(AF)= 0.02 和 0.20 之间的值,第一个值为 0.02
  5. 将 AF 乘以 EP 和 SAR 之间的差值,该值将为 0.18
  6. 取步骤 5 的结果减去先验 SAR 来计算当前 SAR,该值将为 50.82

以下是计算给定时间段内所有数值的图片:

正如我们在 SAR 列中看到的那样,SAR 值在此期间每天都在下降。

幸运的是,我们不需要计算抛物线 SAR 指标或任何其它指标,因为在 MetaTrader 5 交易平台中内置了该指标,我们只需要在可用指标中选择该指标即可。 以下就是我们如何做到这一点:

打开 MetaTrader 5 时,可以单击“插入”选项卡-->选择指标-->选择趋势-->选择抛物线 SAR

之后,我们可以发现抛物线 SAR 参数窗口,如下所示:

1- to determine the step (AF) that will be added every time the price creates a new high or low. — 判定每次价格创造新的高点或低点时将的步长递增量(AF)。

2- to determine the maximum value of (AF) and the same as we learned that the default is 0.20. — 判定(AF)的最大值,与我们所学相同,默认值为 0.20。

3- to determine the color of the indicator. — 确定指标的颜色。

4- to determine the style of the indicator. — 确定指标的样式。

确定抛物面 SAR 指标的参数合适之后,按下“确定”键,我们就可发现其附在图表上,如下所示:

正如我们在前一张图片中所看到的那样,在上涨过程中,我们可以发现抛物线 SAR 低于价格,并继续根据波动向上移动,反之亦然;在下跌过程中,可以发现抛物面 SAR 指标高于价格,并根据波动继续向下移动。

抛物线 SAR 策略

在本主题中,我们将学习能够基于抛物线 SAR 运用的一些简单策略,但务必牢记在实际帐户上使用任何策略之前都必须进行严格测试,因为这里的主要目标是学习新工具的概念,以及如何为其设计交易系统。

我们提过这个抛物线 SAR 指标是趋势跟踪,我们可以在趋势行情、上升趋势和下降趋势中使用它。 所以我们要做的是首先判定趋势,然后我们就可以相应地运用抛物线 SAR。

  • 策略一:上升趋势策略:

根据该策略,对于每次即时报价,我们需要将抛物线 SAR 值与价格进行比较,并判定是否存在做多信号,因为我们能发现,当抛物线 SAR 值低于最低价格时,将生成做多信号,当然我们还会有另一个信号,当 SAR 值高于最高价格时,这是一个止盈信号。

SAR 值 < 价格低点 = 做多

SAR 值 > 价格高点 = 止盈

  • 策略二: 下行趋势策略

该策略则与上升趋势策略相反,根据该策略,对于每次即时报价,我们需要将抛物线 SAR 值与价格进行比较,并判定是否存在做空信号,因为我们可以发现,当抛物线 SAR 值大于最高价格时,将生成做空信号,我们还会有另一个信号,当 SAR 值低于最低价格时,这是一个止盈信号。

SAR 值 > 价格高点 = 做空

SAR 值 < 价格低点 = 止盈

  • 策略三: 做多信号配合尾随停止策略:

根据该策略,对于每次即时报价,我们需要将 SAR 值与价格进行比较,决定是否有做多信号,并在每次即时报价来临时根据抛物线 SAR 指标值判定尾随停止点。 因此,当 SAR 值低于价格低点时,这将是做多,我们将根据指标值得到尾随停止价位。

SAR 值 < 价格低点 = 做多 --> 尾随停止值即为 SAR 值

  • 策略四: 做空信号配合尾随停止策略:

根据该策略,对于每次即时报价,我们需要将 SAR 值与价格进行比较,决定是否有做空信号,并在每次即时报价来临时根据抛物线 SAR 指标值判定尾随停止点。 因此,当 SAR 值大于价格高点时,这将是做空,我们将根据 SAR 值获得尾随停止位。

SAR 值 > 价格高点 = 做空 --> 尾随停止值即为 SAR 值。

抛物线 SAR 策略蓝图

在本主题中,我们将为我们的策略设计一个蓝图,来帮助我们依据它们编写交易系统的代码,因为这样允许我们安排和结构化我们的念头,如此来了解我们需要通知智能系统每一步做什么,因此以下是每种策略的蓝图。

  • 策略一:上升趋势策略:

我们会通知计算机或智能系统所需检查的内容,以及在满足条件的情况下返回的内容,在此策略中,我们需要检查 SAR 值,并将其与价格进行比较,然后判定 SAR 值是否低于低点,如果不是的话,它无需返回任何信息;或者如果是的话,我们需要智能系统返回做多信号,然后再次检查它们,并比较两个值,以此决定 SAR 值是否大于高点值,如果不是的话,程序无需返回任何内容;或者如果是的话,我们需要它返回止盈信号。

SAR 值 < 价格低点 = 做多

SAR 值 > 价格高点 = 止盈

  • 策略二: 下行趋势策略

在该策略中,我们需要检查 SAR 值,并将其与价格进行比较,然后判定 SAR 值是否大于价格高点,如果不是,则无需返回任何信息;或者如果是的话,我们需要智能系统返回一个做空信号,然后再次检查和比较两个值,判定 SAR 值是否小于低值,如果不是,则无需返回什么,如果是,我们需要它返回一个止盈信号。

SAR 值 > 价格高点 = 做空

SAR 值 < 价格低点 = 止盈

  • 策略三: 做多信号配合尾随停止策略:

为了编写该策略的代码,我们需要程序检查 SAR 值,并返回尾随停止值,用高点和低点来验证该值,并判定 SAR 值是否小于低点价,如果不是,仅返回尾随停止数值,如果是,则我们需要它返回做多信号和尾随停止值。 

仅尾随停止级别 --> SAR 值 < 价格低点 = 做多 --> 尾随停止即为 SAR 值

  • 策略四: 做空信号配合尾随停止策略:

为了编写该策略的代码,我们需要程序检查 SAR 值,并返回尾随停止值,用高点和低点来验证该值,并判定 SAR 值是否大于高点价,如果不是,仅返回尾随停止数值,如果是,则我们需要它返回做空信号和尾随停止值。

仅尾随停止级别 --> SAR 值 < 价格高点 = 做多 --> 尾随停止即为 SAR 值

抛物线 SAR 策略系统

在这个有趣的主题中,我们将学习如何用 MQL5(MetaQuotes 语言编辑器)为每个提到的策略编写代码,并为每个策略设计一个交易系统,从而能在 MetaTrader 5 交易平台上自动准确地执行这些策略。

首先,我们将学习如何编写代码来设计一个简单交易系统,来返回含有抛物线 SAR 值的注释,并为其编写简单的智能系统,我们将遵循以下步骤。

  • 为抛物线 SAR 创建一个数组,我们将采用 “double” 数据类型:
double SARArray[];
  • 调用 “ArraySetAsSeries” 函数为数组设置数据排列顺序,并返回布尔值:
ArraySetAsSeries(SARArray,true);
  • 调用 “iSAR” 函数定义 SAR 指标句柄:
int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
  • 调用 “CopyBuffer” 函数读取 SAR 定义数值来填充 SARArray:
CopyBuffer(SARDef,0,0,3,SARArray);
  • 以 “double” 数据类型为 SAR 值创建变量,调用 “NormalizeDouble” 函数计算 SAR 值:
double SARValue=NormalizeDouble(SARArray[0],5);
  • 使用注释函数输出 SAR 值至图表:
Comment("Parabolic SAR value is ",SARValue);

之后,我们可以将代码归并为完整模块,如下所示:

//+------------------------------------------------------------------+
//|                                  Simple Parabolic SAR System.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {    
   //create a SAR array
   double SARArray[];

   //sort array from current data
   ArraySetAsSeries(SARArray,true);
   
   //define SAR EA
   int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
   
   
   //fill SARArray with SARDef 
   CopyBuffer(SARDef,0,0,3,SARArray);
   
   //calculate value of last data
   double SARValue=NormalizeDouble(SARArray[0],5);

   //chart comment with the signal
   Comment("Parabolic SAR value is ",SARValue);
  }
//+------------------------------------------------------------------+

在编写并编译此代码之后,我们可以在导航器中找到它,与下图相同:

我们双击或拖放文件至图表上,即可执行智能交易系统,并获得结果或系统的产出,然后我们将发现以下窗口:

然后,我们勾选“允许算法交易”,然后按“确定”,我们可以发现系统或智能交易系统加载至图表上,如下所示:

下图是该系统所生成信号的示例:

  • 策略一:上升趋势策略:

与我在本策略中提到的相同,我们需要为交易系统设置条件,以便在 SAR 值低于价格低点时生成做多信号,并在 SAR 值大于价格高点时生成止盈信号,以下是如何对该策略进行编码:

  • 以 “string” 数据类型为信号创建字符串变量:
string signal="";
  • 调用 “MqlRates” 函数为价格创建一个数组,它存储有关价格、交易量和点差的信息:
MqlRates PriceArray[];
  • 调用 “ArraySetAsSeries” 函数为价格数组设置数据排列顺序:
ArraySetAsSeries(PriceArray,true);
  • 调用 “CopyRates” 函数读取价格数据填充数组,该函数在将数据存储为整数型后,可获取 “MqlRates” 结构的历史数据:
int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
  • 以 “double” 数据类型为 SAR 值创建另一个数组:
double SARArray[];
  • 调用 “ArraySetAsSeries” 函数为 SAR 数组设置数据排列顺序:
ArraySetAsSeries(SARArray,true);
  • 调用 “iSAR” 函数定义 EA 的 SAR 指标句柄,因为返回的抛物线指标句柄,在 “SARDef” 里存储的是整数型 SAR 定义引用:
int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
  • 调用 “CopyBuffer” 函数在 SARArray 中填充 SARDef,因为它获取指定指标的指定缓冲区的数据:
CopyBuffer(SARDef,0,0,3,SARArray);
  • 调用 “NormalizeDouble” 函数计算最后一个数据的 SAR 值,该函数返回双精度数值类型: 
double SARValue=NormalizeDouble(SARArray[0],5);
  • 利用 “if” 语句设置做多信号的条件,如果 SAR 值小于价格低点,则必须返回做多信号:
   if(SARValue < PriceArray[1].low)
   {
      signal="Buy";
   }
  • 利用 “if” 语句设置止盈信号的条件,如果 SAR 值大于价格高点,则必须返回止盈信号:
   if(SARValue > PriceArray[1].high)
   {
      signal="Take Profit";
   }
  • 调用 Comment 函数在图表上生成信号注释:
Comment("The signal is ",signal);

通过前面的步骤,我们为该策略创建了一个交易系统,下面是一个完整的模块代码:

//+------------------------------------------------------------------+
//|                      Parabilic SAR System - Uptrend Strategy.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {  
   //create an string variable for signal
   string signal="";
   
   //create a price array
   MqlRates PriceArray[];
   
   //sort array from the current data
   ArraySetAsSeries(PriceArray,true);
   
   //fill array with price data
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
   
   //create a SAR array
   double SARArray[];

   //sort array from current data
   ArraySetAsSeries(SARArray,true);
   
   //define SAR EA
   int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
   
   
   //fill SARArray with SARDef 
   CopyBuffer(SARDef,0,0,3,SARArray);
   
   //calculate value of last data
   double SARValue=NormalizeDouble(SARArray[0],5);
   
   //buy signal
   //if current SAR value below candle 1 low
   if(SARValue < PriceArray[1].low)
   {
      signal="Buy";
   }
   
   //take profit signal
   //if current SAR value above candle 1 high
   if(SARValue > PriceArray[1].high)
   {
      signal="Take Profit";
   }
   
   //comment with the signal
   Comment("The signal is ",signal);
  }
//+------------------------------------------------------------------+

编译此代码之后,我们可以在导航器窗口中找到它,如下图所示:

双击或将拖放文件至图表,将出现以下窗口:

按下“确定”按钮后,我们可以发现智能交易系统加载到图表,并与下图相同:

之后,我们可以在图表上的注释里找到生成的信号,与以下图片相同,作为测试示例:

  • 做多信号

  • 止盈信号

  • 策略二: 下行趋势策略

在该策略中,我们需要为交易系统设置做空条件,以便在 SAR 值高于价格高点时生成做空信号,并在 SAR 值小于价格低点时生成止盈信号,以下是如何对该策略进行编码:

//+------------------------------------------------------------------+
//|                    Parabolic SAR System - Downtrend Strategy.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {  
   //create an string variable for signal
   string signal="";
   
   //create a price array
   MqlRates PriceArray[];
   
   //sort array from the current data
   ArraySetAsSeries(PriceArray,true);
   
   //fill array with price data
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
   
   //create a SAR array
   double SARArray[];
   
   //define SAR EA
   int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
   
   //sort array from current data
   ArraySetAsSeries(SARArray,true);
   
   //fill SARArray with SARDef 
   CopyBuffer(SARDef,0,0,3,SARArray);
   
   //calculate value of last data
   double SARValue=NormalizeDouble(SARArray[0],5);
   
   //buy signal
   //if current SAR value below candle 1 low
   if(SARValue > PriceArray[1].high)
   {
      signal="Sell";
   }
   
   //take profit signal
   //if current SAR value above candle 1 high
   if(SARValue < PriceArray[1].low)
   {
      signal="Take Profit";
   }
   
   //chart comment with the signal
   Comment("The signal is ",signal);
  }
//+------------------------------------------------------------------+
  • 策略代码中的差异是:
    • 做空信号的条件 - 当 SAR 值大于价格高点时:
   if(SARValue > PriceArray[1].high)
   {
      signal="Sell";
   }
    • 止盈信号的条件 - 当 SAR 值小于价格低点时:
   if(SARValue < PriceArray[1].low)
   {
      signal="Take Profit";
   }

编译此代码之后,我们可以在导航器窗口中找到该智能交易系统,如下图所示:

将此文件拖放到图表上后,可执行该智能系统,将打开以下窗口:

按下“确定”按钮后,智能系统加载图表,并与下图相同:

之后,我们可以在图表上的注释里找到策略的信号,与以下图片相同,作为测试示例:

  • 做空信号:

  • 止盈信号

  • 策略三: 做多信号配合尾随停止策略:

在该策略中,我们需要在图表上的注释里查看做多信号、尾随停止值(同时作为抛物线 SAR 值)、价格满足特定条件,即检查图表上的尾随停止(SAR 值)如果低于价格,生成新的做多信号。 我们可以找到以下代码来设计此策略的交易系统:

//+------------------------------------------------------------------+
//|         Parabolic SAR System - Buy signal with training stop.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {  
   //create an string variable for signal
   string signal="";
   
   //create a price array
   MqlRates PriceArray[];
   
   //sort array from the current data
   ArraySetAsSeries(PriceArray,true);
   
   //fill array with price data
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
   
   //create a SAR array
   double SARArray[];
   
   //define SAR EA
   int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
   
   //sort array from current data
   ArraySetAsSeries(SARArray,true);
   
   //fill SARArray with SARDef 
   CopyBuffer(SARDef,0,0,3,SARArray);
   
   //calculate value of last data
   double SARValue=NormalizeDouble(SARArray[0],5);
   
   //buy signal
   //if current SAR value below candle 1 low
   if(SARValue < PriceArray[1].low)
   {
      signal="Buy";
   }
   
   //chart comment with the signal and trailing Stop
   Comment("The signal is ",signal,"\n", "Trailing Stop is ",SARValue);
  }
//+------------------------------------------------------------------+
  • 区别是:
    • 在新行中添加尾随停止值,即 SAR 值,作为图表上的注释:
Comment("The signal is ",signal,"\n", "Trailing Stop is ",SARValue);

编译此代码后,我们可以在导航器中找到与以下相同的智能交易系统文件:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赫兹量化软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值