Something like this?
   C=. <;._1&>',',&.><;._2 ] LF (] , [ #~ [ ~: [: {: ]) CR-.~0 : 0
1990-03-01,0.00,0.31,0.29,0.29,428800
1990-03-02,0.00,0.29,0.29,0.29,313600
1990-03-05,0.00,0.31,0.29,0.29,1395200
1990-03-06,0.00,0.31,0.29,0.29,1152000
1990-03-07,0.00,0.31,0.29,0.31,854400
1990-03-08,0.00,0.31,0.29,0.29,227200
1990-03-09,0.00,0.31,0.29,0.31,547200
1990-03-12,0.00,0.31,0.29,0.29,1196800
1990-03-13,0.00,0.29,0.29,0.29,3372800
1990-03-14,0.00,0.29,0.29,0.29,134400
1990-03-15,0.00,0.31,0.29,0.29,3017600
1990-03-16,0.00,0.29,0.29,0.29,195200
1990-03-19,0.00,0.29,0.29,0.29,409600
1990-03-20,0.00,0.29,0.28,0.28,2982400
1990-03-21,0.00,0.28,0.23,0.26,11424000
1990-03-22,0.00,0.26,0.23,0.25,3043200
1990-03-23,0.00,0.28,0.25,0.27,3340800
1990-03-26,0.27,0.28,0.27,0.27,2348800
1990-03-27,0.27,0.27,0.26,0.26,1667200
1990-03-28,0.26,0.27,0.26,0.27,1104000
1990-03-29,0.27,0.27,0.26,0.26,275200
1990-03-30,0.26,0.26,0.25,0.25,787200
)
   openPx=. 1{"1 C [ closePx=. 4{"1 C
   openPx=<'0.00'
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
   whzo=. openPx=<'0.00'
   openPx,:closePx
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.27|0.27|0.26|0.27|0.26|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|0.29|0.29|0.29|0.29|0.31|0.29|0.31|0.29|0.29|0.29|0.29|0.29|0.29|0.28|0.26|0.25|0.27|0.27|0.26|0.27|0.26|0.25|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
   opx=. whzo}openPx,:1|.closePx
   opx,~openPx,:closePx
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.27|0.27|0.26|0.27|0.26|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|0.29|0.29|0.29|0.29|0.31|0.29|0.31|0.29|0.29|0.29|0.29|0.29|0.29|0.28|0.26|0.25|0.27|0.27|0.26|0.27|0.26|0.25|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|0.29|0.29|0.29|0.31|0.29|0.31|0.29|0.29|0.29|0.29|0.29|0.29|0.28|0.26|0.25|0.27|0.27|0.27|0.27|0.26|0.27|0.26|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+

[The last item of opx should be discarded because of wrapping?]

I hope this helps,

Devon


On Mon, Mar 30, 2020 at 10:39 PM HH PackRat <[email protected]> wrote:

> Continuing on to function #3.....
>
> Stock data normally consists of 6 pieces of data: date, open, high,
> low, close, volume.  Occasionally, early data for some stocks has no
> data for the opening price of the day.  One technique that some data
> vendors use (in order to guarantee non-zero prices, which screw up
> charting software) is to replace the zero open price with the price of
> the close on the previous day.  That is the purpose of function #3.
> Starting with row 1 (NOT row 0!), if the open (column 1) is zero,
> replace it with the close (column 4) of the *previous* day; otherwise,
> go on to the next row.  You must use *explicit* code (NOT tacit code).
> If you have another approach, that's fine, too, as long as it's
> explicit code.  I presume this function is relatively easy (but it
> would save me time, which is valuable in my hyper-busy life these days
> preparing for a lengthy, little-by-little residential move).
>
> As an example, the opening 0.00 price on 1990-03-02 below would be
> replaced with the 0.29 closing price on 1990-03-01.
>
> DATA SET C:
>
> 1990-03-01,0.00,0.31,0.29,0.29,428800
> 1990-03-02,0.00,0.29,0.29,0.29,313600
> 1990-03-05,0.00,0.31,0.29,0.29,1395200
> 1990-03-06,0.00,0.31,0.29,0.29,1152000
> 1990-03-07,0.00,0.31,0.29,0.31,854400
> 1990-03-08,0.00,0.31,0.29,0.29,227200
> 1990-03-09,0.00,0.31,0.29,0.31,547200
> 1990-03-12,0.00,0.31,0.29,0.29,1196800
> 1990-03-13,0.00,0.29,0.29,0.29,3372800
> 1990-03-14,0.00,0.29,0.29,0.29,134400
> 1990-03-15,0.00,0.31,0.29,0.29,3017600
> 1990-03-16,0.00,0.29,0.29,0.29,195200
> 1990-03-19,0.00,0.29,0.29,0.29,409600
> 1990-03-20,0.00,0.29,0.28,0.28,2982400
> 1990-03-21,0.00,0.28,0.23,0.26,11424000
> 1990-03-22,0.00,0.26,0.23,0.25,3043200
> 1990-03-23,0.00,0.28,0.25,0.27,3340800
> 1990-03-26,0.27,0.28,0.27,0.27,2348800
> 1990-03-27,0.27,0.27,0.26,0.26,1667200
> 1990-03-28,0.26,0.27,0.26,0.27,1104000
> 1990-03-29,0.27,0.27,0.26,0.26,275200
> 1990-03-30,0.26,0.26,0.25,0.25,787200
>
> If this were like high school math class, "extra credit" would be to
> incorporate code to replace a zero value in column 1 (open) of row 0
> with the value in column 4 (close) of the same row.  (I'm sure I can
> do that, but if you want to throw it in to fill out the function, feel
> free!)
>
> A variation "super extra credit"(!) is the fact that, with really old
> data, sometimes only one piece of data exists for a given date (this
> is always assumed to be the close).  "Your mission, should you wish to
> accept it", is to write code that will expand a data set in a
> "date,close" format to a "date,open,high,low,close" format by
> duplicating the close data.  (Some charting software wants data to be
> in the latter format.)  The latter format is also useful for merging
> old data with newer data already in that format.
>
> Yet again, thanks in advance for any and all help with this!
>
> Harvey
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>


-- 

Devon McCormick, CFA

Quantitative Consultant
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to