平成15年 春期 基本情報技術者 午後 問11
問11 COBOL次の COBOL プログラムの説明及びプログラムを読んで,設問に答えよ。 過去の株価情報を使い,次に説明する規則に従って株式の売買を シミュレートするプログラムである。 ある銘柄の株式の日々の株価を格納したファイルを読み込み, この規則による売買の記録を出力ファイルに書き出し, 最後に一連の売買の結果である損益を表示する。 〔プログラムの説明〕 (1) 株式の売買規則は次のとおりである。 @ 25 日移動平均線と 75 日移動平均線を使う。 ここで,n 日移動平均線とは,時間軸を移動しながら過去 n 取引日間の株価の平均値を 求めた折れ線グラフである。 取引日 t の株価をPt とすると, 取引日tにおける n 日移動平均 MAt(n) は,次の式で求める。
A 移動平均の算出には,株価の終値(その日の最後に売買された値段)を使う。 B 25 日移動平均線が 75 日移動平均線の下から上に交差したら,翌取引日に株式を買う。 すなわち,s < t のとき,いったん MAs(25) < MAs(75)になってから, 初めて MAt(25) > MAt(75) に変わったら,取引日t+1 に株式を買う。 C 25 日移動平均線が 75 日移動平均線の上から下に交差したら,翌取引日に株式を売る。 すなわち,s < t のとき,いったん MAs(25) > MAs(75) になってから, 初めて MAt(25) < MAt(75) に変わったら, 取引日 t+1 に株式を売る。 ただし,既に買った株式がなければ,売ることはできない。 D 株式の売買は,取引日 t の高値(売買された最も高い値段)と 安値(売買された最も低い値段)の平均値で売買できるものとする。 E 売買に関するその他の費用は,一切発生しないものとする。 F 株式の売買は,1回あたり1株とする。 (2) 入力ファイル( INFILE )は,ある銘柄の株式について, 75 日分以上の取引日の株価データが時系列に格納された順ファイルである。 レコード様式は,次のとおりである。
(3) 出力ファイル(OUTFILE)は,入力ファイルの株価データに, (1)の売買規則を適用したときの売買の記録を格納する順ファイルである。 レコード様式は,次のとおりである。
@ 出力ファイル(OUTFILE)に出力するレコードには, 売買することを決定した日(取引日 t )の日付,フラグ及び売買価格を格納する。 A フラグには,“売り”のとき“S”,“買い”のとき“B”を格納する。 B 売買価格には,小数点以下1けたで値を格納する。 (4) 一連の売買による損益は,小数点以下1けたの符号付き数値で表示する。
〔プログラム〕 DATA DIVISION. FILE SECTION. FD INFILE. 01 I-MARKET-PRICE-REC. 05 I-YYYYMMDD-MARKET PIC X(8). 05 I-OPENING-PRICE PIC 9(9). 05 I-CLOSING-PRICE PIC 9(9). 05 I-HIGHEST-PRICE PIC 9(9). 05 I-LOWEST-PRICE PIC 9(9). FD OUTFILE. 01 O-EXCHANGE-REC. 05 O-YYYYMMDD-EXCHANGE PIC X(8). 05 O-ACTION PIC X. 05 O-PRICE PIC 9(9)V9. WORKING-STORAGE SECTION. 01 SERIES-SIZE PIC 9(4) VALUE 100. 01 RANGE-SHORT PIC 9(4) VALUE 25. 01 RANGE-LONG PIC 9(4) VALUE 75. 01 W-MARKET-PRICE-REC. 05 W-YYYYMMDD-MARKET PIC X(8). 05 W-OPENING-PRICE PIC 9(9). 05 W-CLOSING-PRICE PIC 9(9). 05 W-HIGHEST-PRICE PIC 9(9). 05 W-LOWEST-PRICE PIC 9(9). 01 MARKET-PRICE-SERIES. 05 TBL-MARKET-PRICE-REC OCCURS 100. 10 TBL-YYYYMMDD-MARKET PIC X(8). 10 TBL-OPENING-PRICE PIC 9(9). 10 TBL-CLOSING-PRICE PIC 9(9). 10 TBL-HIGHEST-PRICE PIC 9(9). 10 TBL-LOWEST-PRICE PIC 9(9). 01 SERIES-TOP PIC 9(4). 01 TAIL-LONG PIC 9(4). 01 TAIL-SHORT PIC 9(4). 01 SUM-SHORT PIC 9(12). 01 SUM-LONG PIC 9(12). 01 MA-SHORT PIC 9(9)V9. 01 MA-LONG PIC 9(9)V9. 01 MA-COMPARE-CURRENT PIC X. 88 LONG-LT-SHORT-CUR VALUE "S". 88 SHORT-LT-LONG-CUR VALUE "L". 88 SHORT-EQ-LONG-CUR VALUE "E". 01 MA-COMPARE-PREVIOUS PIC X. 88 LONG-LT-SHORT-PRE VALUE "S". 88 SHORT-LT-LONG-PRE VALUE "L". 88 SHORT-EQ-LONG-PRE VALUE "E". 01 INFILE-EOF-FLG PIC X. 88 INFILE-EOF VALUE "Y". 88 INFILE-NOT-EOF VALUE "N". 01 TRADING-PRICE PIC 9(9)V9. 01 REVENUE PIC S9(9)V9. 01 REVENUE-ED PIC +++++++++9.9. 01 INDX PIC 9(9). 01 TRADING-ACTION PIC S9. 88 FLG-NO-TRADE VALUE 0. 88 FLG-SELL VALUE 1. 88 FLG-BUY VALUE -1. 01 STOCK-HOLDING PIC X. 88 HAS-STOCK VALUE "Y". 88 HAS-NO-STOCK VALUE "N". PROCEDURE DIVISION. MAIN-PARAGRAPH. OPEN INPUT INFILE OUTPUT OUTFILE. PERFORM INIT-MOVING-AVERAGE. IF MA-SHORT = MA-LONG THEN SET SHORT-EQ-LONG-CUR TO TRUE END-IF. PERFORM SET-CURRENT-MA-COMPARISON. MOVE ZERO TO REVENUE. SET HAS-NO-STOCK TO TRUE. SET FLG-NO-TRADE TO TRUE. SET INFILE-NOT-EOF TO TRUE. PERFORM UNTIL INFILE-EOF IF FLG-BUY OR FLG-SELL THEN PERFORM TRADE-STOCK-AND-MAKE-RECORD END-IF READ INFILE INTO W-MARKET-PRICE-REC AT END SET INFILE-EOF TO TRUE NOT AT END PERFORM CALC-NEXT-MOVING-AVERAGE PERFORM DECIDE-TRADING END-READ END-PERFORM. MOVE REVENUE TO REVENUE-ED. DISPLAY "Total Revenue: " REVENUE-ED. CLOSE INFILE OUTFILE. STOP RUN. INIT-MOVING-AVERAGE. PERFORM VARYING SERIES-TOP FROM 1 BY 1 UNTIL RANGE-LONG < SERIES-TOP READ INFILE INTO TBL-MARKET-PRICE-REC(SERIES-TOP) END-PERFORM. COMPUTE TAIL-SHORT = SERIES-TOP - RANGE-SHORT. COMPUTE TAIL-LONG = SERIES-TOP - RANGE-LONG. SUBTRACT 1 FROM SERIES-TOP. MOVE ZERO TO SUM-SHORT. PERFORM VARYING INDX ADD TBL-CLOSING-PRICE(INDX) TO SUM-SHORT END-PERFORM. MOVE SUM-SHORT TO SUM-LONG. PERFORM VARYING INDX ADD TBL-CLOSING-PRICE(INDX) TO SUM-LONG END-PERFORM. COMPUTE MA-SHORT ROUNDED = SUM-SHORT / RANGE-SHORT. COMPUTE MA-LONG ROUNDED = SUM-LONG / RANGE-LONG. SET-CURRENT-MA-COMPARISON. EVALUATE TRUE WHEN MA-SHORT = MA-LONG CONTINUE WHEN MA-SHORT < MA-LONG SET SHORT-LT-LONG-CUR TO TRUE WHEN MA-LONG < MA-SHORT SET LONG-LT-SHORT-CUR TO TRUE END-EVALUATE. TRADE-STOCK-AND-MAKE-RECORD. EVALUATE TRUE WHEN FLG-BUY MOVE "B" TO O-ACTION SET HAS-STOCK TO TRUE WHEN FLG-SELL AND MOVE "S" TO O-ACTION SET HAS-NO-STOCK TO TRUE END-EVALUATE. IF O-ACTION = "B" OR O-ACTION = "S" THEN COMPUTE TRADING-PRICE ROUNDED = ( TBL-HIGHEST-PRICE(SERIES-TOP) + TBL-LOWEST-PRICE(SERIES-TOP) ) / 2 COMPUTE REVENUE = REVENUE + TRADING-PRICE * MOVE TBL-YYYYMMDD-MARKET(SERIES-TOP) TO O-YYYYMMDD-EXCHANGE MOVE TRADING-PRICE TO O-PRICE WRITE O-EXCHANGE-REC END-IF. CALC-NEXT-MOVING-AVERAGE. ADD W-CLOSING-PRICE TO SUM-SHORT SUM-LONG. SUBTRACT TBL-CLOSING-PRICE(TAIL-SHORT) FROM SUM-SHORT. SUBTRACT TBL-CLOSING-PRICE(TAIL-LONG) FROM SUM-LONG. COMPUTE MA-SHORT ROUNDED = SUM-SHORT / RANGE-SHORT. COMPUTE MA-LONG ROUNDED = SUM-LONG / RANGE-LONG. ADD 1 TO SERIES-TOP TAIL-SHORT TAIL-LONG. EVALUATE TRUE WHEN SERIES-SIZE < SERIES-TOP MOVE 1 TO SERIES-TOP WHEN SERIES-SIZE < TAIL-SHORT MOVE 1 TO TAIL-SHORT WHEN SERIES-SIZE < TAIL-LONG MOVE 1 TO TAIL-LONG END-EVALUATE. MOVE W-MARKET-PRICE-REC TO TBL-MARKET-PRICE-REC(SERIES-TOP). DECIDE-TRADING. MOVE MA-COMPARE-CURRENT TO MA-COMPARE-PREVIOUS. PERFORM SET-CURRENT-MA-COMPARISON. SET FLG-NO-TRADE TO TRUE. EVALUATE TRUE WHEN AND LONG-LT-SHORT-CUR SET FLG-BUY TO TRUE WHEN LONG-LT-SHORT-PRE AND SHORT-LT-LONG-CUR SET FLG-SELL TO TRUE END-EVALUATE. 設問 プログラム中の に入れる正しい答えを, 解答群の中から選べ。
a,b に関する解答群 ア FROM 1 BY 1 UNTIL SERIES-SIZE < INDX イ FROM SERIES-TOP - 1 BY -1 UNTIL INDX < TAIL-SHORT ウ FROM SERIES-TOP BY -1 UNTIL INDX <= TAIL-SHORT エ FROM TAIL-LONG BY 1 UNTIL TAIL-SHORT <= INDX オ FROM TAIL-SHORT BY 1 UNTIL SERIES-TOP < INDX c 〜 e に関する解答群 ア FLG-BUY イ FLG-SELL ウ HAS-STOCK エ LONG-LT-SHORT-CUR オ MA-COMPARE-CURRENT カ SHORT-LT-LONG-PRE キ TRADING-ACTION
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| ||||||||