分享

gsl

 王家宝贝1116 2016-11-16

#!/usr/bin/env perl

$| = 1;

# perl modules
use strict;
use warnings;
use Data::Dumper;
use Getopt::Long;
use Storable;
use List::Util qw/max min/;
do 'sub.pm';

################################################################################
# 常数
################################################################################

##kdj
#my $kdj_n =9;
#my $kdj_m1 = 3;

 

################################################################################
# read file
################################################################################

my ($gdk,$yyx,$oco)=@ARGV;
print "$gdk,$yyx,$oco\n";
my @test = qw(000011 002787);
my @list = <g:/zxzq/T0002/export/*.txt>;
#my $dir = "g:/zxzq/T0002/export/";
my %hash;
my %okay;
my %times;
my %win;
my %hash_nt;
for my $file (@list){
#    print"$file\n";
    my $name;
    $file =~ m/export\/(\d+)\.txt/;
    $name = $1;
#    print"name is $name\n";
    open IN, "$file" or die "connot read file $file\n";
    #base
    my @o;
    my @c;
    my @h;
    my @l;
    my @time;

    my @ma3; ##low
    my @ma5;  #c
    my @temp;
    my @ma20;  ##temp
    my @v3;
    my @rate;
    my @flag;
    my @flag_buy;

    my $j = 0;
   
    #kdj


    while (<IN>){
 next unless m/^20/;
 my $line = $_;
 my @a = split/\s+/,$line;
 ($time[$j],
  $o[$j],
  $h[$j],
  $l[$j],
  $c[$j]) = @a;
 
 ## wzwgs
 $ma3[$j] = ma(3,$j,\@l);
 $ma5[$j] = ma(5,$j,\@c);
 $temp[$j] = ($h[$j] + $l[$j] + 2*$c[$j])/4;
 $ma20[$j] = ma(20,$j,\@temp);
 $v3[$j] = 91.1 - 100*$ma3[$j]/$ma20[$j];
 $rate[$j] = ($v3[$j]>0) ? 1 : 0;
 if($j>1)
 {
     $flag[$j] = (($rate[$j-1]>0)&&($rate[$j]==0)) ? 1 : 0;
 }
 if($j>4){
     $flag_buy[$j] = (($flag[$j-2]==1 || $flag[$j-1]==1 || $flag[$j]==1) && ($c[$j]<$c[$j-1]) && ($ma5[$j]>$ma5[$j-1])) ? 1 : 0;
     $flag_buy[$j] = (($flag_buy[$j-2]==1 || $flag_buy[$j-1]==1 || $flag_buy[$j-3]==1)) ? 0 : $flag_buy[$j];
 }
 else{
     $flag_buy[$j]=0;
 }
 $j++;
    }
    close IN;
    my $ii = @c;

    ##  begin to search
    my $aim;
    for my $i (10..$ii-25){
 if($flag_buy[$i]){
     #print" $name at $time[$i]: flag buy is high\n";
     next if($h[$i+1]==$l[$i+1]);
     ##高低开盘
     next if(($gdk==1)&&($o[$i+1]<=$c[$i]));
     next if(($gdk==0)&&($o[$i+1]>$c[$i]));
     ##阴阳线
     next if(($yyx==1)&&($o[$i+1]<=$c[$i+1]));
     next if(($yyx==0)&&($o[$i+1]>$c[$i+1]));
     ## buy price at open, and then scan
     my $bp;
     if($oco==1){ $bp = $o[$i+1];}
     elsif($oco==2){ $bp = $c[$i+1];}
     else{ $bp = $o[$i+2];}

     for my $a (5..60){ ## aim of the ratio
  my $aim =$a/100;
  my $ap = $bp*(1+$aim);  ## aim price
  my $sp = 0;             ##sale price
  for my $day (1..20){    ## the day keep the stock
      my $success = 0;
      my $key="aim"."$a"."day"."$day";
      for my $scan (1..$day){
   my $rscan = ($oco==0) ? $scan+1 : $scan;
   if($h[$i+1+$rscan]>=$ap){ ## got the aim
       $success = 1;
       $okay{$key}++;
       last;
   }
      }
      $sp = $success ? $ap : $c[$i+1+$day];
      my $ratio = $success ? $aim : (($sp-$bp)/$bp);
      $hash{$key} += $ratio/($day+1);
      $times{$key} ++;
      $win{$key} ++ if($sp>$bp);
      #push(@$hash{$key},$ratio);
      my $name_time = "$time[$i]"."__$name";
      #if($success){print"$key\n";}
      #push(@$hash_nt{$key},$name_time);
  }
     }
 
 }
    }
}
my %rst;
my %win_rate;
for my $key (keys %hash){
#    my @array;
#    @array = @$hash{$key};
#    my $tot = @array;
#    my $sum = 0;
#    for my $i (0..@tot-1){
# $sum += $array[$i];
#    }
#    my $ave = $sum/$tot;
    my $ave = $hash{$key}/$times{$key};
    $rst{$key} = $ave;
    my $r = $win{$key}/$times{$key};
    $win_rate{$key} = $r;
}
open OUT,">result_$gdk$yyx$oco.txt";
my @keys = sort{$rst{$b} <=> $rst{$a}} keys %rst;
for my $key (@keys){
    printf OUT "%-20s%10.4f%10d%10d%10.2f\n",
    $key,$rst{$key},$times{$key},$okay{$key},$win_rate{$key};
}
close OUT;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多