自动交易的传说: 是少或多?

The Last Crusade - 最新的改革 中我们回顾了一个相当有趣但目前没有被广泛使用的显示市场信息的方法 - 点数图。所提供的脚本可以在图表上绘图。然而,它并不建议交易自动化。现在我们可以尝试将交易过程自动化,使用点数图来分析,并根据方向和交易量制定交易决定。

我无法在此写出基本的绘制原理; 就看看一个经典的图表吧:

 
 

Copyright (c) 2012-2014 Roman Rich Euro vs US Dollar, Box-20, Reverse-3 1.4588 | \.....\.................................................................... | 1.4588 1.4521 | X\....X\................................................................... | 1.4521 1.4454 | XO\.\.XO\.................................................................. | 1.4454 1.4388 | XOX\X\XO.\................................................................. | 1.4388 1.4322 | XOXOXOXO..\................................................................ | 1.4322 1.4256 | XOXOXOXO...\....\.......................................................... | 1.4256 1.4191 | XOXO/OXO....\...X\......................................................... | 1.4191 1.4125 | XOX/.O/O.....\..XO\........................................................ | 1.4125 1.4060 | XO/../.O......\.XO.\....................................................... | 1.4060 1.3996 | ./.....O.......\XO..\...................................................... | 1.3996 1.3932 | .......OX.......XO...\....................................................X | 1.3932 1.3868 | .......OXO..X.X.XOX...\.................................................X.X | 1.3868 1.3804 | .......OXO..XOXOXOXOX..\..............................................X.XOX | 1.3804 1.3740 | .......OXO..XOXOXOXOXO..\.................................\...........XOXOX | 1.3740 1.3677 | .......OXOX.XO.O.OXOXO...\................................X\..........XOXOX | 1.3677 1.3614 | .......OXOXOX....O.OXO....\...............................XO\.........XOXOX | 1.3614 1.3552 | .......O.OXOX...../OXO.....\..............................XO.\........XOXOX | 1.3552 1.3490 | .........OXOX..../.O.OX.....\.............................XO..\.......XOXO. | 1.3490 1.3428 | .........OXOX.../....OXO.....\X.\.........................XO...\\...X.XOX.. | 1.3428 1.3366 | .........O.OX../.....OXO......XOX\........................XO....X\..XOXOX.. | 1.3366 1.3305 | ...........OX./......OXO....X.XOXO\.....................X.XO....XO\.XOXO... | 1.3305 1.3243 | ...........OX/.......O.O....XOXOXOX\....................XOXO....XO.\XOX.../ | 1.3243 1.3183 | ...........O/..........OX...XOXOXOXO\...................XOXOX.X.XOX.XOX../. | 1.3183 1.3122 | .........../...........OXO..XOXOXOXO.\..........X...X.X.XOXOXOXOXOXOXO../.. | 1.3122 1.3062 | .......................OXOX.XOXO.OXO..\.........XOX.XOXOXOXOXOXOXOXOX../... | 1.3062 1.3002 | .......................O.OXOXO...O/O...\........XOXOXOXOXO.OXO.OXOXO../.... | 1.3002 1.2942 | .........................OXOX..../.O....\.......XOXOXOXOX..OX..OXOX../..... | 1.2942 1.2882 | .........................O.OX.../..O.....\......XOXO.OXO...OX..OXOX./...... | 1.2882 1.2823 | ...........................OX../...OX.....\.....XO...OX.../OX..O/OX/....... | 1.2823 1.2764 | ...........................OX./....OXO.....\....X....OX../.O.../.O/........ | 1.2764 1.2706 | ...........................OX/.....OXO..X...\...X....O../......../......... | 1.2706 1.2647 | ...........................O/......O.OX.XOX..\..X....../................... | 1.2647 1.2589 | .........................../.........OXOXOXO..\.X...../.................... | 1.2589 1.2531 | .....................................OXOXOXO...\X..../..................... | 1.2531 1.2474 | .....................................OXO.OXO....X.../...................... | 1.2474 1.2417 | .....................................OX..O.O..X.X../....................... | 1.2417 1.2359 | .....................................OX....OX.XOX./........................ | 1.2359 1.2303 | .....................................O.....OXOXOX/......................... | 1.2303 1.2246 | ...........................................OXOXO/.......................... | 1.2246 1.2190 | ...........................................OXO./........................... | 1.2190 1.2134 | ...........................................OX.............................. | 1.2134 1.2078 | ...........................................O............................... | 1.2078 1.2023 | ........................................................................... | 1.2023 222222222222222222222222222222222222222222222222222222222222222222222222222 000000000000000000000000000000000000000000000000000000000000000000000000000 111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111112222222222222222222222222222222333333333333333344 ........................................................................... 000000000001111111111111110000000000000000000000011111111000000000000011100 788888899990000001111112221122233445566666677888900001222123444567778901213 ........................................................................... 200011211220111220011231220101212121201112222001100010001002123110112020231 658801925683489071404504193396436668111288937260415979579417630739120547713 000100001012111111110111111100112010210001111101101101011111111101011101110 910501876933613095500253237788652909250001557626626824655375907538165785367 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 550433251023230204310404232105354323532031240033315125241340044324523153453 000000000000000000000000000000000000000000000000000000000000000000000000000

我不认为交易机会在这个图表上都清晰可见; 我只建议您检查两个交易假定:

顺势交易 — 在牛势中买,在熊势里卖。 使用止损, 在您入场前定义。

  • 在支撑线以上,并且高于之前 X 列价格的位置放置买挂单, 在阻力线以下,并且低于之前 O 列价格的位置放置卖挂单; 在轴点水平使用追随止损;

让您的利润增长。 平掉亏损单 (好的交易通常立即显示获利)。

  • 在突破阻力线买入,在突破支撑线卖出; 在轴点水平设置止损,在趋势线附近使用追随止损。

如何选择交易量

注意上边股票推测高手的报价: 使用挂单。我更喜欢以确定的交易量入场,这样当触发止损时,损失不会超出我可接受的百分比 (这就是 Ralph Vince 在他的书中 The Mathematics of Money Management - 资金管理中的数学 所谓的优化)。每笔交易的亏损风险是一个好的可优化变量 (在以下代码中 opt_f)。

因此, 我们有一个函数,依据每笔交易的可接受风险计算交易量,并放置买/卖订单:

 
 

//+------------------------------------------------------------------+ //| The function places an order with a precalculated volume | //+------------------------------------------------------------------+ void PlaceOrder() { //--- Variables for calculating the lot uint digits_2_lot=(uint)SymbolInfoInteger(symbol,SYMBOL_DIGITS); double trade_risk=AccountInfoDouble(ACCOUNT_EQUITY)*opt_f; double one_tick_loss_min_lot=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE_LOSS)*SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP); //--- Заполняем основные поля запроса trade_request.magic=magic; trade_request.symbol=symbol; trade_request.action=TRADE_ACTION_PENDING; trade_request.tp=NULL; trade_request.comment=NULL; trade_request.type_filling=NULL; trade_request.stoplimit=NULL; trade_request.type_time=NULL; trade_request.expiration=NULL; if(is_const_lot==true) { order_vol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN); } else { order_vol=trade_risk/(MathAbs(trade_request.price-trade_request.sl)*MathPow(10,digits_2_lot)*one_tick_loss_min_lot)*SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP); order_vol=MathMax(order_vol,SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN)); if(SymbolInfoDouble(symbol,SYMBOL_VOLUME_LIMIT)!=0) order_vol=MathMin(order_vol,SymbolInfoDouble(symbol,SYMBOL_VOLUME_LIMIT)); order_vol=NormalizeDouble(order_vol,(int)MathAbs(MathLog10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)))); } //--- Place an order while(order_vol>0) { trade_request.volume=MathMin(order_vol,SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX)); if(!OrderSend(trade_request,trade_result)) Print("Failed to send order #",trade_request.order); order_vol=order_vol-SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX); }; ticket=trade_result.order; };

使用什么优化准则?

其实只有两种优化准则:给定的回报的最小级别回撤,或给定的余额的最大回撤。我更喜欢依第二种准则优化:

 
 

//+------------------------------------------------------------------+ //| Result of strategy run in the testing mode | //+------------------------------------------------------------------+ double OnTester() { if(TesterStatistics(STAT_EQUITY_DDREL_PERCENT)>(risk*100)) return(0); else return(NormalizeDouble(TesterStatistics(STAT_PROFIT),(uint)SymbolInfoInteger(symbol,SYMBOL_DIGITS))); };

此处 risk 是上述的回撤级别,即我不能接受的级别。这个变量也被优化。

何时重新优化?

重新优化策略,有人按照时间间隔(如,每周一次,一个月),有人按照交易间隔(50,100 交易之后),有人当市场变化时开始新的优化。实际上,重新优化的需要只依赖于在前段所选择的优化准则。如果回撤低于最大允许风险参数, 我们重新优化策略; 如果一切工作顺利, 则让它如常工作。回撤大于 10% 对于我是不可接受的。所以如果系统操作期间回撤过大,我将对它重新优化。

我能否一次优化所有东西吗?

不幸地, 在策略测试员的 "所有品种在市场报价中选择" 模式中您不能优化外部变量。所以让我们选择市场工具以及其它可优化的外部变量如下: 赫兹股票期货量化

 
 

//+------------------------------------------------------------------+ //| Enumeration of symbols | //+------------------------------------------------------------------+ enum SYMBOLS { AA=1, AIG, AXP, BA, C, CAT, DD, DIS, GE, HD, HON, HPQ, IBM, IP, INTC, JNJ, JPM, KO, MCD, MMM, MO, MRK, MSFT, PFE, PG, QQQ, T, SPY, UTX, VZ, WMT, XOM }; //+------------------------------------------------------------------+ //| Symbol selection function | //+------------------------------------------------------------------+ void SelectSymbol() { switch(selected_symbol) { case 1: symbol="#AA"; break; case 2: symbol="#AIG"; break; case 3: symbol="#AXP"; break; case 4: symbol="#BA"; break; case 5: symbol="#C"; break; case 6: symbol="#CAT"; break; case 7: symbol="#DD"; break; case 8: symbol="#DIS"; break; case 9: symbol="#GE"; break; case 10: symbol="#HD"; break; case 11: symbol="#HON"; break; case 12: symbol="#HPQ"; break; case 13: symbol="#IBM"; break; case 14: symbol="#IP"; break; case 15: symbol="#INTC"; break; case 16: symbol="#JNJ"; break; case 17: symbol="#JPM"; break; case 18: symbol="#KO"; break; case 19: symbol="#MCD"; break; case 20: symbol="#MMM"; break; case 21: symbol="#MO"; break; case 22: symbol="#MRK"; break; case 23: symbol="#MSFT"; break; case 24: symbol="#PFE"; break; case 25: symbol="#PG"; break; case 26: symbol="#QQQ"; break; case 27: symbol="#T"; break; case 28: symbol="#SPY"; break; case 29: symbol="#UTX"; break; case 30: symbol="#VZ"; break; case 31: symbol="#WMT"; break; case 32: symbol="#XOM"; break; default: symbol="#SPY"; break; }; };

如有必要, 您可以在品种选择函数中加入所需的品种,并枚举 (函数在 OnInit() 中调用)。

我们已经创建了什么EA?

即时价格处理器:

 
 

//+------------------------------------------------------------------+ //| A typical ticks handler OnTick() | //| Draw the chart only based on complete bars but first | //| check if it is a new bar. | //| If the bar is new and there is a position, check | //| whether we need to move the stop loss, | //| if the bar is new and no position, check | //| if we have conditions for opening a deal. | //+------------------------------------------------------------------+ void OnTick() { //--- If the bar is new if(IsNewBar()==true) { RecalcIndicators(); //--- Tester/optimizer mode? if((MQLInfoInteger(MQL_TESTER)==true) || (MQLInfoInteger(MQL_OPTIMIZATION)==true)) { //--- Is it the testing period? if(cur_bar_time_dig[0]>begin_of_test) { //--- If there is an open position on the symbol if(PositionSelect(symbol)==true) //--- check if we need to move SL; if need, move it TrailCondition(); //--- If there are no positions else //--- check if we need to open a position; if we need, open it TradeCondition(); } } else { //--- if there is an oprn position on the symbol if(PositionSelect(symbol)==true) //--- check if we need to move SL; if need, move it TrailCondition(); //--- If there are no positions else //--- check if we need to open a position; if we need, open it TradeCondition(); } }; };

对于策略 1: "在支撑线以上,并且高于之前 X 列价格的位置放置买挂单, 在阻力线以下,并且低于之前 O 列价格的位置放置卖挂单; 在轴点水平使用追随止损": 赫兹股票期货量化

 
 

//+------------------------------------------------------------------+ //| Function checks trade conditions for opening a deal | //+------------------------------------------------------------------+ void TradeCondition() { if(order_col_number!=column_count) //--- Are there any orders on the symbol? { if(OrdersTotal()>0) { //--- Delete them! for(int loc_count_1=0;loc_count_1<OrdersTotal();loc_count_1++) { ticket=OrderGetTicket(loc_count_1); if(!OrderSelect(ticket)) Print("Failed to select order #",ticket); if(OrderGetString(ORDER_SYMBOL)==symbol) { trade_request.order=ticket; trade_request.action=TRADE_ACTION_REMOVE; if(!OrderSend(trade_request,trade_result)) Print("Failed to send order #",trade_request.order); }; }; order_col_number=column_count; return; } else { order_col_number=column_count; return; } } else if((MathPow(10,pnf[column_count-1].resist_price)<SymbolInfoDouble(symbol,SYMBOL_ASK)) && (pnf[column_count-1].column_type=='X') && (pnf[column_count-1].max_column_price<=pnf[column_count-3].max_column_price)) { //--- Conditions for BUY met; let's see if there are any pending Buy orders for the symbol with the price we need? trade_request.price=NormalizeDouble(MathPow(10,pnf[column_count-3].max_column_price+double_box),digit_2_orders); trade_request.sl=NormalizeDouble(MathPow(10,pnf[column_count-3].max_column_price-(reverse-1)*double_box),digit_2_orders); trade_request.type=ORDER_TYPE_BUY_STOP; if(OrderSelect(ticket)==false) //--- No pending orders - place an order { PlaceOrder(); order_col_number=column_count; } else //--- If there is a pending order { //--- what is the type and price of the pending order? if((OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_SELL_STOP) || ((OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_STOP) && (OrderGetDouble(ORDER_PRICE_OPEN)!=trade_request.price))) { //--- The wrong type or the price differs - close the order trade_request.order=ticket; trade_request.action=TRADE_ACTION_REMOVE; if(!OrderSend(trade_request,trade_result)) Print("Failed to send order #",trade_request.order); //--- open with the desired price PlaceOrder(); order_col_number=column_count; }; }; return; } else if((MathPow(10,pnf[column_count-1].resist_price)>SymbolInfoDouble(symbol,SYMBOL_ASK)) && (pnf[column_count-1].column_type=='O') && (pnf[column_count-1].min_column_price>=pnf[column_count-3].min_column_price)) { //--- Conditions for SELL met; let's see if there are any pending Sell orders for the symbol with the price we need? trade_request.price=NormalizeDouble(MathPow(10,pnf[column_count-3].min_column_price-double_box),digit_2_orders); trade_request.sl=NormalizeDouble(MathPow(10,pnf[column_count-3].min_column_price+(reverse-1)*double_box),digit_2_orders); trade_request.type=ORDER_TYPE_SELL_STOP; if(OrderSelect(ticket)==false) //--- No pending orders, place an order { PlaceOrder(); order_col_number=column_count; } else //--- or there is a pending order { //--- what is the type and price of the pending order? if((OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_STOP) || ((OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_SELL_STOP) && (OrderGetDouble(ORDER_PRICE_OPEN)!=trade_request.price))) { //--- The wrong type or the price differs - close the order trade_request.order=ticket; trade_request.action=TRADE_ACTION_REMOVE; if(!OrderSend(trade_request,trade_result)) Print("Failed to send order #",trade_request.order); //--- and open with the desired price PlaceOrder(); order_col_number=column_count; }; }; return; } else return; }; //+------------------------------------------------------------------+ //| The function checks conditions for moving Stop Loss | //+------------------------------------------------------------------+ void TrailCondition() { if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) trade_request.sl=NormalizeDouble(MathPow(10,pnf[column_count-1].max_column_price-reverse*double_box),digit_2_orders); else trade_request.sl=NormalizeDouble(MathPow(10,pnf[column_count-1].min_column_price+reverse*double_box),digit_2_orders); if(PositionGetDouble(POSITION_SL)!=trade_request.sl) PlaceTrailOrder(); };

对于策略 2 "在突破阻力线买入,在突破支撑线卖出; 在轴点水平设置止损,在趋势线附近使用追随止损":

 
 

//+------------------------------------------------------------------+ //| The function checks trade conditions for opening a deal | //+------------------------------------------------------------------+ void TradeCondition() { if(order_col_number!=column_count) //--- Are there any orders for the symbol? { if(OrdersTotal()>0) { //--- Delete them! for(int loc_count_1=0;loc_count_1<OrdersTotal();loc_count_1++) { ticket=OrderGetTicket(loc_count_1); if(!OrderSelect(ticket)) Print("Failed to select order #",ticket); if(OrderGetString(ORDER_SYMBOL)==symbol) { trade_request.order=ticket; trade_request.action=TRADE_ACTION_REMOVE; if(!OrderSend(trade_request,trade_result)) Print("Failed to send order #",trade_request.order); }; }; order_col_number=column_count; return; } else { order_col_number=column_count; return; } } else if(MathPow(10,pnf[column_count-1].resist_price)>SymbolInfoDouble(symbol,SYMBOL_ASK)) { //--- Conditions for BUY met; let's see if there are any pending Buy orders for the symbol with the price we need? trade_request.price=NormalizeDouble(MathPow(10,pnf[column_count-1].resist_price),digit_2_orders); trade_request.sl=NormalizeDouble(MathPow(10,pnf[column_count-1].resist_price-(reverse-1)*double_box),digit_2_orders); trade_request.type=ORDER_TYPE_BUY_STOP; if(OrderSelect(ticket)==false) //--- No pending orders - place an order { PlaceOrder(); order_col_number=column_count; } else //--- or there is a pending order { //--- what is the type and price of the pending order? if((OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_SELL_STOP) || ((OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_STOP) && (OrderGetDouble(ORDER_PRICE_OPEN)!=trade_request.price))) { //--- The wrong type or the price differs - close the order trade_request.order=ticket; trade_request.action=TRADE_ACTION_REMOVE; if(!OrderSend(trade_request,trade_result)) Print("Failed to send order #",trade_request.order); //--- open with the desired price PlaceOrder(); order_col_number=column_count; }; }; return; } else if(MathPow(10,pnf[column_count-1].resist_price)<SymbolInfoDouble(symbol,SYMBOL_ASK)) { //--- Conditions for SELL met; let's see if there are any pending Sell orders for the symbol with the price we need? trade_request.price=NormalizeDouble(MathPow(10,pnf[column_count-1].supp_price),digit_2_orders); trade_request.sl=NormalizeDouble(MathPow(10,pnf[column_count-1].supp_price+(reverse-1)*double_box),digit_2_orders); trade_request.type=ORDER_TYPE_SELL_STOP; if(OrderSelect(ticket)==false) //--- No pending orders - place an order { PlaceOrder(); order_col_number=column_count; } else //--- If there is a pending order { //--- what is the type and price of the pending order? if((OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_STOP) || ((OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_SELL_STOP) && (OrderGetDouble(ORDER_PRICE_OPEN)!=trade_request.price))) { //--- The wrong type or the price differs - close the order trade_request.order=ticket; trade_request.action=TRADE_ACTION_REMOVE; if(!OrderSend(trade_request,trade_result)) Print("Failed to send order #",trade_request.order); //--- open with the desired price PlaceOrder(); order_col_number=column_count; }; }; return; } else return; }; //+------------------------------------------------------------------+ //| The function checks conditions for moving Stop Loss | //+------------------------------------------------------------------+ void TrailCondition() { if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) trade_request.sl=NormalizeDouble(MathMax(SymbolInfoDouble(symbol,SYMBOL_ASK),MathPow(10,pnf[column_count-1].max_column_price-reverse*double_box)),digit_2_orders); else trade_request.sl=NormalizeDouble(MathMin(SymbolInfoDouble(symbol,SYMBOL_BID),MathPow(10,pnf[column_count-1].min_column_price+reverse*double_box)),digit_2_orders); if(PositionGetDouble(POSITION_SL)!=trade_request.sl) PlaceTrailOrder(); };

亲爱的读者, 请注意几件事情。

  • 市场工具的价格差距在一个相当宽的范围内, 从几分, 至数万 (例如 - 日本股票交易中的股票和期货)。所以,我用的是价格对数的点数图,避免设置从一至数万点的箱体尺寸。赫兹股票期货量化

  • 点数图的数组索引从零开始, 所以最后一行的索引等于列数减一。

  • 支撑线的值, 如果使用, 则大于 -10.0, 但小于价格的对数。如果没用支撑 (或阻力) 线, 它在图表中的值是 -10.0。所以,突破支撑和阻力线的条件已经写入与上面的策略 2 代码中相同的形式。

参见下面的附件中的辅助函数代码。图表代码很庞大, 所以我没有在本文中写出; 参见下面附件中带有注释的代码。

EA 交易的结果

我已经在 symbol_list_1.mhq 和 symbol_list_2.mhq 中准备了两套品种来优化; 它们包括货币对和来自道琼斯指数的股票期货。

设置窗口:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

在第一种情况, 测试员中的设置窗口面貌如下:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

注意测试开始线。该自动交易至少需要几列图表进行分析和决策; 当您设置的箱体大小等于 50 点或以上,一年的历史数据往往不足一列。因此,对于具有 50 点或更多的箱体尺寸,用三年左右或以上的间隔开始自动交易操作,在设置窗口中的测试开始参数中设置自动交易操作开始。在我们的例子中, 测试箱体尺寸是 100 点,所以在设置选卡中指定间隔为 01.01.2009; 在参数选卡中设置间隔为 01.01.2012。

参数 "Trade minimum lot?" 为 false 表示手数大小依据余额和 "Risk per Trade, %" 变量 (在此情况是 1% 每笔交易, 但它可以被优化)。"Max Drawdown, %" 是在 OnTester() 函数中的优化准则。在本文中我只使用两个变量来优化: 品种和箱体尺寸点数。赫兹股票期货量化

优化周期: 2012-2013。此 EA 在 EURUSD 图表上运行良好, 因为品种提供了最佳的即时价格覆盖。下表包含一个完整的测试报告,基于第一种策略,箱体尺寸10,多种货币对:

通过

结果

获利

预期收益

获利因子

采收率

夏普比率

定制

净值回撤 %

交易

选择品种

箱体

0,00

0,00

-1 002,12

-18,91

0,54

-0,79

-0,24

0,00

12,67

53,00

AUDCAD

10,00

1,00

886,56

886,56

14,53

1,40

1,52

0,13

886,56

5,76

61,00

AUDCHF

10,00

2,00

0,00

-1 451,63

-10,60

0,77

-0,70

-0,09

0,00

19,92

137,00

AUDJPY

10,00

3,00

-647,66

-647,66

-17,50

0,57

-0,68

-0,24

-647,66

9,46

37,00

AUDNZD

10,00

4,00

-269,22

-269,22

-3,17

0,92

-0,26

-0,03

-269,22

9,78

85,00

AUDUSD

10,00

5,00

0,00

-811,44

-13,52

0,72

-0,64

-0,14

0,00

12,20

60,00

CADCHF

10,00

6,00

0,00

1 686,34

16,53

1,36

1,17

0,12

0,00

11,78

102,00

CHFJPY

10,00

7,00

356,68

356,68

5,66

1,13

0,40

0,06

356,68

8,04

63,00

EURAUD

10,00

8,00

0,00

-1 437,91

-25,68

0,53

-0,92

-0,25

0,00

15,47

56,00

EURCAD

10,00

9,00

0,00

-886,66

-46,67

0,34

-0,74

-0,46

0,00

11,56

19,00

EURCHF

10,00

10,00

0,00

-789,59

-21,93

0,54

-0,75

-0,26

0,00

10,34

36,00

EURGBP

10,00

11,00

0,00

3 074,86

28,47

1,62

1,72

0,20

0,00

12,67

108,00

EURJPY

10,00

12,00

0,00

-1 621,85

-19,78

0,55

-0,97

-0,25

0,00

16,75

82,00

EURNZD

10,00

13,00

152,73

152,73

2,88

1,07

0,21

0,03

152,73

6,90

53,00

EURUSD

10,00

14,00

0,00

-1 058,85

-14,50

0,65

-0,66

-0,16

0,00

15,87

73,00

GBPAUD

10,00

15,00

0,00

-1 343,47

-25,35

0,43

-0,64

-0,34

0,00

20,90

53,00

GBPCAD

10,00

16,00

0,00

-2 607,22

-44,19

0,27

-0,95

-0,59

0,00

27,15

59,00

GBPCHF

10,00

17,00

0,00

1 160,54

11,72

1,27

0,81

0,10

0,00

12,30

99,00

GBPJPY

10,00

18,00

0,00

-1 249,91

-14,70

0,69

-0,85

-0,15

0,00

14,41

85,00

GBPNZD

10,00

19,00

208,94

208,94

5,36

1,12

0,25

0,05

208,94

7,81

39,00

GBPUSD

10,00

20,00

0,00

-2 137,68

-21,17

0,53

-0,79

-0,24

0,00

25,62

101,00

NZDUSD

10,00

21,00

0,00

-1 766,80

-38,41

0,30

-0,97

-0,53

0,00

18,10

46,00

USDCAD

10,00

22,00

-824,69

-824,69

-11,95

0,73

-0,90

-0,13

-824,69

9,11

69,00

USDCHF

10,00

23,00

2 166,53

2 166,53

26,10

1,58

2,40

0,18

2 166,53

7,13

83,00

USDJPY

10,00

2 029,87

-10 213,52

13,40

1 659,00

下面是各品种和箱体尺寸值的汇总表:

策略

品种

箱体尺寸

交易

净值回撤 %

获利

结果

预期余额

1

Currencies

10

1 659

September

-10 214

2 030

2 030

1

Currencies

20

400

5

1 638

2 484

2 484

1

Stocks

50

350

60

7 599

7 599

15 199

1

Stocks

100

81

2

4 415

4 415

17 659

2

Currencies

10

338

20

-4 055

138

138

2

Currencies

20

116

8

4 687

3 986

3 986

2

Stocks

50

65

6

6 770

9 244

9 244

2

Stocks

100

12

1

-332

-332

-5 315

我们看到了什么?

有个傻瓜,他总是做错。 并且 有华尔街傻瓜相信您总是一直在交易。赫兹股票期货量化 世界上没有人总能拥有买卖股票所需的所有信息并十分合理的运用它。

这个结论您也许看起来很奇怪: 您的存款更像是高于较少的交易。如果在两年前,用我们的 EA 炒股,箱体尺寸 100 并且每笔风险 1%, 则 EA 从那时起将只做 81 笔交易 (平均每年每个品种 1.25 笔交易) 我们的本金将增长 44%, 而平均净值回撤略高于 2%。可接受的回撤是 10%, 我们的风险是每笔交易 4%, 并且本金两年增长 177%, 即年度 90% 美元!赫兹股票期货量化

结语

不要在高位买入,也不要在低位卖出。 不要想着赚大钱。它是不切实际的。赫兹股票期货量化

上述策略可以修改,可以在不高于10%的回撤下,获得更大的回报。不要尝试频繁交易, 最好找一个交易商,不仅提供 "标准集合" 20 至 40 个交易品种,而是至少三百或四百个交易品种 (股票, 期货)。最好品种不会被关联,您的存款会更安全。还有一个说法 - 股票表现出比货币对更好的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
问题:ORA-00942: 表或视图不存在 回答: 当你遇到ORA-00942错误时,意味着你正在尝试访问一个不存在的表或视图。这可能是由于以下几个原因造成的: 1. 表或视图的名称拼写错误。请确保你输入的表或视图名称是正确的,包括大小写。 2. 表或视图不存在。在查询或操作之前,请确保该表或视图已经被正确地创建。 3. 使用了错误的模式。如果你在查询中使用了特定的模式,但是表或视图实际上存在于不同的模式中,那么也会导致ORA-00942错误。 在Oracle中,表和字段的名称是大小写敏感的。当你创建表时,Oracle会自动将表名和字段名转换为大写。如果你想保留原始的大小写,你可以使用双引号"将表名或字段名括起来。例如,使用"T_WindRadar"创建表,Oracle不会将其转换为大写。 此外,在存储过程中使用角色权限时可能会遇到权限不足的错误。即使用户拥有DBA角色,也不能在存储过程中创建表。为了解决这个问题,可以在存储过程中使用"Authid Current_User"来允许存储过程使用角色权限。这样,存储过程将可以成功执行所需的操作。 希望这些信息对你有帮助。如果你有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Oracle "ORA-00942: 表或视图不存在 "的原因和解决方法](https://blog.csdn.net/yangchangfu111/article/details/53992962)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [ORA-00942: 表或视图不存在解决方法](https://blog.csdn.net/paullinjie/article/details/81176477)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值