স্ট্যাক এক্সচেঞ্জ স্টক এক্সচেঞ্জ - ভি 3


42

বিজ্ঞপ্তি: এই চ্যালেঞ্জটি এখন বন্ধ: আমি আর লিডারবোর্ড আপডেট করব না এবং গৃহীত উত্তরটি পরিবর্তন করব না। তবে আপনি নিজের ইচ্ছে থাকলে নিয়ামক চালাতে এবং লিডারবোর্ডটি আপডেট করতে পারেন।

আড্ডায় যোগ দিন!

ভূমিকা

শুভ সন্ধ্যা, ব্যবসায়ীরা! আপনি সবাই গল্ফিং সংস্থা পিপিসিজির ব্যবসায়ী। আপনার কাজটি যথাসম্ভব অর্থোপার্জন করা।

চ্যালেঞ্জ

যতটা সম্ভব অর্থোপার্জনের লক্ষ্যে স্ট্যাক এক্সচেঞ্জ স্টক এক্সচেঞ্জে শেয়ার কিনে এবং বিক্রি করে এমন একটি প্রোগ্রাম লিখুন।

গেমপ্লের

সমস্ত খেলোয়াড় তাদের ব্যাঙ্কে 5 টি শেয়ার এবং 100 ডলার দিয়ে শুরু করবে। গেমটি সর্বদা 10 ডলার শেয়ারের দাম দিয়ে শুরু হয়।

প্রতিটি গেমের 1000 টি রাউন্ড থাকবে যেখানে প্রথম রাউন্ডটি গোলাকার 1। প্রতিটি রাউন্ডে, আপনার প্রোগ্রামটি ইনপুট হিসাবে চারটি আর্গুমেন্ট সরবরাহ করা হবে: বর্তমান শেয়ারের দাম, আপনার কাছে থাকা শেয়ারের সংখ্যা, আপনার নিজের অর্থের পরিমাণ এবং রাউন্ড নম্বর (1-সূচকযুক্ত)।

উদাহরণস্বরূপ, যদি আমার প্রোগ্রামটি হয় test1.pyতবে শেয়ারের দামটি হবে 100, আমার যে শেয়ারের সংখ্যা রয়েছে তা হ'ল 3, আমার যত পরিমাণ অর্থ আছে 1200এবং গোল সংখ্যাটি হল 576, আমার প্রোগ্রামটি এভাবে চালানো হবে:

python test1.py 100 3 1200 576

এক রাউন্ডে, প্রতিটি খেলোয়াড়কে দেওয়া শেয়ারের দাম একই হবে। রাউন্ড শেষ হওয়া পর্যন্ত এটি পরিবর্তন হয় না।

প্রতিক্রিয়া হিসাবে, প্লেয়ার অবশ্যই তাদের কমান্ড মুদ্রণ করতে হবে। দুটি বিকল্প রয়েছে:

  • কিনুন শেয়ার: এই কমান্ডের হিসাবে দেওয়া হয় bnযেখানে nশেয়ারের আপনি কিনতে চান সংখ্যা। উদাহরণস্বরূপ, আপনি যদি 100 টি শেয়ার কিনতে চান তবে আপনি আউটপুট পাবেন:
b100

শেয়ার কেনার সময়, আপনাকে 1000 ডলার পর্যন্ত ওভারড্রাফ্টের অনুমতি দেওয়া হয়। যদি আপনি এই পরিমাণ বেশি পরিমাণে ওভারড্রাফ্টের চেয়ে বেশি শেয়ার কেনার চেষ্টা করেন (আপনার ব্যাঙ্কের ভারসাম্য goes -1000 এর নিচে চলে যায়), আপনি দেউলিয়া ঘোষণা করবেন। এর অর্থ হ'ল আপনি আপনার সমস্ত শেয়ার হারাবেন এবং আপনার ব্যালেন্সটি $ 50 এ সেট করা হবে।

দেউলিয়া হয়ে গেলে শেয়ার কমান্ড আপনার কমান্ড দ্বারা প্রভাবিত হবে না।

(যদি আপনার ব্যালেন্সটি $ -1000 হয় তবে আপনি দেউলিয়া নন However তবে আপনার ব্যালেন্স যদি $ -1001 হয় তবে আপনি দেউলিয়া হন)

  • বিক্রি শেয়ারের: এই কমান্ডের হিসাবে দেওয়া হয় snযেখানে nশেয়ারের সংখ্যা বিক্রি করতে ইচ্ছুক নয়। উদাহরণস্বরূপ, আপনি যদি 100 টি শেয়ার বিক্রি করতে চান তবে আপনি আউটপুট পাবেন:
s100

আপনি নিজের মালিকের চেয়ে বেশি শেয়ার বিক্রি করতে পারবেন না। আপনি যদি এটি করার চেষ্টা করেন, আপনার অনুরোধ অস্বীকার করা হবে, এবং আপনি রাউন্ডটি এড়িয়ে যাবেন।

আপনি বৃত্তাকার এড়িয়ে যেতে চান এবং কিছুই, আউটপুট পারেন যদি b0বা s0

যদি আপনি নেতিবাচক সংখ্যক শেয়ার এবং / অথবা একটি অ-সংখ্যক শেয়ার কিনে বা বিক্রয় করার চেষ্টা করেন তবে আপনার অনুরোধ অস্বীকার করা হবে।

5 রাউন্ডের পরে, প্রতিটি রাউন্ড শেষে, সমস্ত খেলোয়াড়কে লভ্যাংশ প্রদান করা হবে, যার মান সর্বশেষ 5 রাউন্ডের গড় গড় শেয়ারের মূল্যের 5%।

এটা কিভাবে কাজ করে?

প্রাথমিকভাবে শেয়ারের দাম 10 ডলার হবে। প্রতিটি রাউন্ড শেষে, সূত্রটি ব্যবহার করে এটি পুনরায় গণনা করা হবে:

New Share Price=Old Share Price+(Number of shares boughtNumber of shares sold)

শেয়ারের দাম সীমাবদ্ধ থাকবে যাতে এটি কখনই $ 1 এর নিচে পড়ে না।

অতিমাত্রায় দ্রুত পরিবর্তন রোধ করতে, শেয়ারের দামের পরিবর্তনটি সর্বাধিক এর মধ্যে সীমাবদ্ধ ।±$200

বিধি

  • আপনার প্রোগ্রামের অবশ্যই একটি নাম থাকতে হবে


  • আপনার প্রোগ্রামটিকে ডেটা সঞ্চয় করার জন্য একটি একক পাঠ্য ফাইল অনুমোদিত। এটি অবশ্যই আপনার প্রোগ্রামের মতো একই ফোল্ডারে সংরক্ষণ করতে হবে


  • আপনার প্রোগ্রামটি কীভাবে চালানো যায় তার উত্তর বিবরণে অন্তর্ভুক্ত করুন


  • এই কোটএইচটি সমস্ত প্রোগ্রামিং ভাষার জন্য উন্মুক্ত যা বিনামূল্যে ব্যবহারযোগ্য এবং উইন্ডোজ 10 এ চালানো যেতে পারে


  • আপনার স্কোর সম্পূর্ণরূপে আপনার ভারসাম্যের বিষয়বস্তুর উপর ভিত্তি করে। শেয়ারে লকড থাকা কোনও অর্থ গণনা করা হবে না


  • আপনি যে কোনও সময় আপনার প্রোগ্রামটি সম্পাদনা করতে পারেন। প্রতিটি গেমের আগে সর্বশেষতম কোডটি সংরক্ষণ এবং সংকলিত হবে


  • আপনার এমন কোনও কোড লিখবেন না যা বিশেষত অন্য বটকে লক্ষ্য করে।

নিয়ামক

কন্ট্রোলারটি পাইথনে লেখা আছে এবং এটি এখানে পাওয়া যাবে: https://gist.github.com/beta-decay/a6abe40fc9f4ff6cac443395377ec31f

শেষে এটি একটি লিডারবোর্ড মুদ্রণ করবে এবং পুরো খেলায় কীভাবে ভাগের দাম পরিবর্তিত হয়েছে তার একটি গ্রাফ প্রদর্শন করবে।

উদাহরণস্বরূপ, যখন দুটি এলোমেলো বট খেলছিল

জয়লাভ

সর্বশেষ খেলাগুলি শেষে তাদের ব্যালেন্সে সর্বাধিক পরিমাণে প্লেয়ার জয়লাভ করে।

লিডারবোর্ড

খেলা 4: 16:14 10/08/2018

Name                                Balance

Experienced Greedy Idiot            $14802860126910608746226775271608441476740220190868405578697473058787503167301288688412912141064764060957801420415934984247914753474481204843420999117641289792179203440895025689047561483400211597324662824868794009792985857917296068788434607950379253177065699908166901854516163240207641611196996217004494096517064741782361827125867827455285639964058498121173062045074772914323311612234964464095317202678432969866099864014974786854889944224928268964434751475446606732939913688961295787813863551384458839364617299883106342420461998689419913505735314365685264187374513996061826694192786379011458348988554845036604940421113739997490412464158065355335378462589602228039730
Equalizer                           $763185511031294813246284506179317396432985772155750823910419030867990447973211564091988995290789610193513321528772412563772470011147066425321453744308521967943712734185479563642323459564466177543928912648398244481744861744565800383179966018254551412512770699653538211331184147038781605464336206279313836606330
Percentage Trader                   $448397954167281544772103458977846133762031629256561243713673243996259286459758487106045850187688160858986472490834559645508673466589151486119551222357206708156491069820990603783876340193236064700332082781080188011584263709364962735827741094223755467455209136453381715027369221484319039100339776026752813930
OYAIB                               $8935960891618546760585096898089377896156886097652629690033599419878768424984255852521421137695754769495085398921618469764914237729576710889307470954692315601571866328742408488796145771039574397444873926883379666840494456194839899502761180282430561362538663182006432392949099112239702124912922930
Chimps on a Typewriter              $176504338999287847159247017725770908273849738720252130115528568718490320252556133502528055177870
Greedy B*****d                      $17689013777381240
Illiterate Dividend Investor        $2367418699671980
Lucky Number 6                      $4382725536910
Lone Accountant                     $90954970320
Buy/Reinvest                        $127330
Technical Analysis Robot            $126930
Dollar Cost Averager                $106130
Fibonacci                           $69930
Novice Broker                       $28130
Buy Low                             $6130
Naive Statistician                  $6130
Fallacious Gambler                  $6130
Passive Trader                      $4980
Half More or Nothing                $4920
Monkeys on a Typewriter             $66

প্রতিটি প্রতিযোগীর গ্রাফ দেখুন


সম্পর্কিত তবে গেমপ্লে এবং বিজয়ী মানদণ্ড এই চ্যালেঞ্জের থেকে খুব আলাদা।


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
ডেনিস

আমার জন্য সূত্রটি [ম্যাথ প্রসেসিং ত্রুটি] হিসাবে লাল হিসাবে দেখায় । এটি কি অন্যদের জন্যও একই? যদি তাই হয় তবে এটি প্রশ্নটি নিয়ে একটি সমস্যা।
ক্যাপ্টেন ম্যান

2
ভাগ্যের প্রভাব কমাতে 10-100 গেম বলার অপেক্ষা রাখে না, এটি গড় গড় ফলাফলের হতে পারে। অথবা এটি চ্যালেঞ্জকে খুব বেশি পরিবর্তন করবে।
এমব্রিগ

1
স্কোরগুলি লগ 2 / লগ 10 হওয়া কি সম্ভব হবে? স্কোরগুলি তুলনা করা এটি আরও সহজ করে তুলবে। (আমি আমার ফোনটি দিয়ে ব্রাউজ করেছি এবং

1
আমি মনে করি যে 10-100 এমনকি খুব কম, তবে আমি প্রচুর গেমগুলি চালানো পছন্দ করি । এটি সম্ভব করার জন্য, আপনাকে চ্যালেঞ্জের ফর্ম্যাটটি পরিবর্তন করতে হবে যা এখন সুযোগের বাইরে।
নাথান মেরিল

উত্তর:


11

অভিজ্ঞ লোভী ইডিয়ট

পিএইচপি, পিএইচপি> = 7 এ পরীক্ষিত, পূর্বেরগুলিতেও কাজ করা উচিত।

<?php

class StickExchange
{
    private $dbFile;
    private $sharePrice;
    private $shares;
    private $balance;
    private $overdraft;

    public function __construct($sharePrice, $shares, $balance, $round)
    {
        $this->dbFile = __FILE__ . '.txt';
        $this->sharePrice = gmp_init($sharePrice);
        $this->shares = gmp_init($shares);
        $this->balance = gmp_init($this->parseScientificNotationToInt($balance));
        $this->overdraft = gmp_init(1000);

        $action = 'b';

        if ($round == 1) {
            $this->buy();
        } elseif ($round == 1000) {
            $this->sell();
        } else {
            $content = $this->getDbContent();
            $lastPrice = gmp_init($content['price']);
            $secondLastPrice = gmp_init($content['last_price']);
            $lastAction = $content['action'];

            $shareAndLastCmp = gmp_cmp($this->sharePrice, $lastPrice);
            $lastAndSecondLastCmp = gmp_cmp($lastPrice, $secondLastPrice);

            if ($shareAndLastCmp > 0 && $lastAndSecondLastCmp > 0) {
                if ($lastAction == 'b') {
                    $this->sell();
                    $action = 's';
                } else {
                    $this->buy();
                }
            } elseif ($shareAndLastCmp < 0 && $lastAndSecondLastCmp < 0) {
                if ($lastAction == 'b') {
                    $this->sell();
                    $action = 's';
                } else {
                    $this->skip();
                }
            } elseif ($shareAndLastCmp > 0) {
                $this->sell();
                $action = 's';
            } elseif ($shareAndLastCmp < 0) {
                $this->buy();
            } else {
                $this->skip();
            }
        }

        $this->setDbContent([
            'action' => $action,
            'price' => gmp_strval($this->sharePrice),
            'last_price' => isset($lastPrice) ? gmp_strval($lastPrice) : '0',
        ]);
    }

    private function parseScientificNotationToInt($number)
    {
        if (strpos($number, 'e+') !== false) {
            $sParts = explode('e', $number);
            $parts = explode('.', $sParts[0]);
            $exp = (int)$sParts[1];

            if (count($parts) > 1) {
                $number = $parts[0] . $parts[1];
                $exp -= strlen($parts[1]);
            } else {
                $number = $parts[0];
            }

            $number = gmp_init($number);
            $pow = gmp_pow(gmp_init(10), $exp);
            return gmp_strval(gmp_mul($number, $pow));
        } elseif (strpos($number, 'e-') !== false) {
            return sprintf('%d', $number);
        } else {
            $parts = explode('.', $number);
            return $parts[0];
        }
    }

    private function getDbContent()
    {
        return unserialize(file_get_contents($this->dbFile));
    }

    private function setDbContent($content)
    {
        file_put_contents($this->dbFile, serialize($content));
    }

    private function buy()
    {
        $realBalance = gmp_add($this->balance, $this->overdraft);
        $sharesToBuy = gmp_div($realBalance, $this->sharePrice);
        $this->stdout('b' . gmp_strval($sharesToBuy));
    }

    private function sell()
    {
        $this->stdout('s' . gmp_strval($this->shares));
    }

    private function skip()
    {
        $this->stdout('b0');
    }

    private function stdout($string)
    {
        $stdout = fopen('php://stdout', 'w');
        fputs($stdout, $string);
        fclose($stdout);
    }
}

new StickExchange($argv[1], $argv[2], $argv[3], $argv[4]);

বিপুল সংখ্যায় কাজ করার সাথে সম্পর্কিত পুনর্গঠিত আচরণ এবং বাগ ফিক্স সহ "দ্য লোভী ইডিয়ট" এর একটি আপডেট সংস্করণ।

নোট:

  • একটি ফাইল সংরক্ষণ করুন এবং এটি চালান: php C:\path\path\stack_exchange.php 10 5 100 1
  • এই স্ক্রিপ্টটি স্ক্রিপ্ট ফাইলের মতো একই নামের সাথে একটি পাঠ্য ফাইল তৈরি করে এবং .txtশেষে যুক্ত করে। সুতরাং দয়া করে স্ক্রিপ্টের পথে যথাযথ লেখার অনুমতি সহ কোনও ব্যবহারকারীর সাথে চালান।
  • উইন্ডোজে কীভাবে পিএইচপি 7.2 ইনস্টল করবেন তা একটি সহজ: http://www.dorusomcutean.com/how-to-install-php-7-2-on-windows/
  • অতি বিশাল সংখ্যার সাথে কাজ করার জন্য, আমাকে জিএমপি ব্যবহার করতে হয়েছিল , সুতরাং এই দুটি লাইন অন php.ini-মন্তব্য করা উচিত (লাইনের শুরুতে আধা-কোলন অপসারণ করা উচিত, যদি এটি ইতিমধ্যে না থাকে):
    • ; extension_dir = "ext"
    • ;extension=gmp

1
বাহ, এই লিঙ্কের জন্য ধন্যবাদ! আমি ভাবছিলাম: ডি
বিটা ডিকায়

1
@ বেটাডে: কোনও সমস্যা নেই, বিটিডব্লিউ আপনাকে কেবলমাত্র পদক্ষেপ 2 (টেস্ট পিএইচপি ইনস্টল করা) হওয়া উচিত যেখানে আপনি নিজের ইনস্টলেশনটি পরীক্ষা করে দেখেন php -v। এই জন্য বাকি প্রয়োজন হয় না। আমি বিশ্বাস করি যে এই চ্যালেঞ্জের জন্য আপনার অনেকগুলি ভিন্ন ভাষা সেট আপ করার ক্ষেত্রে আপনি প্রচুর সমস্যায় পড়বেন! আমি কখনই এরকম কিছু করার সাহস করব না: ডি
নাইট

@ বেটাডেকে কি কেবল ডকারের ধারক হিসাবে ট্রাইটঅনলাইন ইনস্টল করা সহজ হবে না?
নিডিজেককব

@ নিডজেজেকোব সম্ভবত এই ভাষাগুলি ইনস্টল করার পরে এটি সম্ভবত কার্যকর হবে
বিটা ডেকে

1
অভিনন্দন, আপনি নিয়মিত প্রতিটি প্রতিযোগীকে পরাজিত করেছেন!
বেটা ক্ষয়

19

টাইপ রাইটারে শিম্পস

import random
from sys import argv

share_price = int(argv[1])
share_count = int(argv[2])
balance = float(argv[3])

x = random.random()
if x < 0.5:
    max_buy = balance / share_price
    buy_count = int(max_buy * random.random())
    print('b' + str(buy_count))
else:
    sell_count = int(share_count * random.random())
    print('s' + str(sell_count))

শিম্পস বানরের চেয়ে স্মার্ট, তারা যে স্টক কিনে না পারে তা কিনবে না, বা তাদের কাছে নেই এমন স্টক বিক্রি করবে।

এখনও অন্যথায় যদিও এলোমেলো।

পাইথন 3 দিয়ে চালান, তবে পাইথন 2 দিয়েও (?) কাজ করা উচিত?


1
তারা স্মার্ট হতে পারে, কিন্তু তারা ভাগ্যবান?
ওহুজিন

আমার সমস্ত পরীক্ষায় এটি একটি শীর্ষে উঠে এসেছে, তাই হ্যাঁ
স্কিডদেব

26
আমি অত্যন্ত কৌতূহলী যে এটি কীভাবে 20 টিরও বেশি আদেশের মাধ্যমে প্রথম রাউন্ডটি জিতেছে
এমবিআরিগ

আমি এটিকে সরলতার শিল্পে নামিয়ে রাখতে চাই। বাকি সবাই তাদের বটগুলি ওভার ইঞ্জিনিয়ারিং করছে।
স্কিডদেব

1
এটি ভুল করে এত ভালোবাসা পেয়েছে: পি
নাইট 2

10

OYAIB

from sys import argv

share_price = float(argv[1])
shares      = int(argv[2])
cash        = float(argv[3])
cur_round   = int(argv[4])
tot_rounds  = 1000.0

investments = shares * share_price
total_assets = investments + cash

target_cash = round(cur_round / tot_rounds * total_assets)

if target_cash > cash:
  shares_to_sell = min(shares, round((target_cash - cash) / share_price))
  print('s%d' % shares_to_sell)
else:
  shares_to_buy = round((cash - target_cash) / share_price)
  print('b%d' % shares_to_buy)

"বন্ডে নিজের বয়সের মালিক" এর পুরানো উক্তিটি অনুসরণ করে এই প্রোগ্রামটি একই চেষ্টা করার চেষ্টা করে। এইভাবে আমরা শেষ গেমের বাজারের অস্থিরতার अधीनमा নেই।

সম্পাদনা করুন: নিয়ামকের দিকে তাকানো থেকে বোঝা যায় যে আমরা কেবল সম্পূর্ণ শেয়ার কিনতে / বিক্রয় করতে পারি, তবে ভগ্নাংশের অ্যাকাউন্টের ভারসাম্য রাখতে পারি।


পিপিসিজিতে আপনাকে স্বাগতম!
বিটা ক্ষয়

ধন্যবাদ! প্রথমবার পোস্টিং তাই কোনও জায়গার বাইরে থাকলে আমাকে জানতে দিন।
মাত্র_বউজিং

আপনি একটি অতিরিক্ত শর্ত যোগ করতে চাইতে পারেন যে শেষ রাউন্ডে আপনি আপনার সমস্ত শেয়ার বিক্রি করেন (যেমনটি investmentsআপনার স্কোর হিসাবে গণনা করা হয় না)।
রিকিং

2
ওআইএআইবি এর সৌন্দর্য এটি স্বয়ংক্রিয়ভাবে তা করে। টার্গেট_ক্যাশ এটি "লাইফ" এর কোন বিন্দুতে রয়েছে তার উপর নির্ভর করে মোট_অ্যাসেটের এক শতাংশ। জীবনের শেষে, টার্গেট_ক্যাশটি মোট_অ্যাসেটের 100%, সুতরাং এটি যে কোনও শেয়ার বিক্রি করে তা বিক্রি করবে।
3_18

9

একাকী হিসাবরক্ষক

buy-sell.py:

from sys import argv

Price = int(argv[1])
Shares = int(argv[2])
Balance = float(argv[3])
Round = int(argv[4])

if Round % 2 == 0: print('s' + str(Shares))
if Round % 2 == 1: print('b' + str(int((Balance + 1000) / Price)))

কিছুই সংরক্ষণ করে না buy-sell.txt

বিজোড় রাউন্ডে এটি যতটা শেয়ার কিনতে পারে তা কিনে। এমনকি রাউন্ডে এটি তার সমস্ত শেয়ার বিক্রি করে।

উদ্দেশ্যটি হ'ল প্রথমে যথাসম্ভব বেশি শেয়ার কিনে শেয়ারের দাম বাড়ানো এবং তারপরে আরও অর্থ পাওয়ার জন্য এই শেয়ারগুলি বিক্রি করা। এটি কাজ করে কারণ চূড়ান্ত রাউন্ডটি সমান (রাউন্ড 1000)।

যদিও 5প্রতি জোড়া রাউন্ডের পরে শেয়ারের দাম একই থাকবে ( ) ধরে নেওয়া যে বটটি একা, সুতরাং লোন অ্যাকাউন্ট্যান্ট ), বটের ভারসাম্য বাড়ায়, যেহেতু বিক্রয়ের দাম ক্রয়ের দামের চেয়ে বেশি, এবং আরও ভারসাম্য বাড়ে আরও শেয়ার কেনার ক্ষমতা। এটি একটি দুষ্টচক্র, তবে ভাল উপায়ে (আমার জন্য)।

প্রধান দুর্বলতা খারাপ বট পাশাপাশি খেলছে, শেয়ারের দাম কমানোর জন্য বিক্রি করে (এটি তাদের পক্ষে ভাল কিনা তা নিশ্চিত নয়) comes এই ক্ষেত্রে, বটটি evil -890 এর ভারসাম্য বজায় রাখতে পারে, তবে সেখানে যথেষ্ট পরিমাণে খারাপ বট থাকে। এই হিসাবরক্ষক সত্যই তাদের মানসিক শান্তি চান। ;-)


1-এ 1 আমি নিশ্চিত না যে এটি মারানো সম্ভব কিনা; আপনি হিসাবরক্ষক এলএ পুরোপুরি বুঝতে এবং এটির মোকাবিলার চেষ্টা করলেও এটি সহজ নয়। একটি বৃহত্তর খেলায় যেখানে আপনার চেয়ে বেশি সংখ্যা রয়েছে আপনার চেয়ে বেশি হতে পারে।
ইয়াক্ক

@ ইয়াক্ক অন্যরা ইতিমধ্যে আমার পরীক্ষার রানগুলিতে এটি পরাজিত করেছেন।
এরিক দি আউটগল্ফার

1 এ 1? আমি হতভম্ব; আপনি কীভাবে কোনও প্রতিপক্ষকে দামের পরিবর্তনগুলি উল্টে দেওয়ার জন্য যথেষ্ট পরিমাণে সমৃদ্ধ হতে পারেন, বা এমনকি সময়ের সাথে সাথে সম্পদের একটি গাদা না জ্বালিয়ে বাড়াতেও তাদের আটকাতে অক্ষম (এদিকে এলএ কোরবানি দেয় না, তাই আরও শক্ত হয়ে যায়) স্টপ)। আপনি কি গেমপ্লেতে লিঙ্ক করতে পারেন যে এলএ এক-একটি হারিয়েছে?
ইয়াক্ক

@ ইয়াক্ক আমি এখনও এটি পরীক্ষার মুখোমুখি হইনি। এছাড়াও, আপনি চাইলে এটি নিয়ে আলোচনা করার জন্য আমাদের জন্য একটি চ্যাট রুম রয়েছে
এরিক দ্য আউটগল্ফার

আপনার শেয়ার থাকলে এবং দামটি আগের রাউন্ডের তুলনায় কম বা আপনার কাছে অর্থ এবং দাম বেশি হলে কিছুই না করা কি আরও শক্তিশালী হবে? এটি অন্যান্য, অনুরূপ বটগুলির সাথে সিঙ্কের বাইরে চলে যাওয়া থেকে রক্ষা করবে। এছাড়াও, আমি দেখছি না কীভাবে এটি একের পর এক মারতে পারে।
জলি জোকার

5

প্যাসিভ ট্রেডার

from sys import argv

share_price = int(argv[1])
balance = float(argv[3])
round_num = int(argv[4])

if round_num == 1:
    print('b%s' % str(int(balance / share_price)))
else:
    print('b0')

এই লোকটি পুরো "স্টকস" জিনিসটিতে বড় নয়, তবে তিনি শুনেছেন যে তিনি যদি এখন কেবলমাত্র কিছু অর্থ ব্যয় করেন তবে সময়ের সাথে সাথে তিনি সামান্য কিছু বিট পাবেন যা তার ব্যয়ের চেয়ে আরও বেশি যোগ করবে add

সে 0 ডলারে যাওয়ার জন্য পর্যাপ্ত স্টক কিনে নেবে (এই ফেলেলার কোনও ওভারড্রাফ্ট নয়, তিনি কিছুটা লাভের জন্য নিজেকে দেনায় ডুবিয়ে রাখেন না), তারপরে লভ্যাংশ তৈরি হতে দিন

পাইথন 3 দিয়ে চালান, তবে পাইথন 2 দিয়েও (?) কাজ করা উচিত?


1
আমি মনে করি আপনার কমপক্ষে 15 টি স্টক বিক্রি করা উচিত।
কাল্ডো 2'18

14
@ ক্যাল্ডো না, তিনি সেই মুহূর্তে স্টক কিনে একবার ভুলে গেছেন
স্কিদদেব

5

শতাংশ ব্যবসায়ী পাইথন 3

(সম্ভবত পাইথন 2 এ কাজ করে)

import sys
args=sys.argv

price=int(args[1])
held=int(args[2])
money=int(args[3])
roundNum=int(args[4])
prevPrice=0

if roundNum==1:
    print("b"+str((money+1000)//price))
else:
    if roundNum==1000:
        print("s"+str(held))
    else:
        with open("percentageTrader.dat","r") as f:
            prevPrice=int(f.read())
        if(price>prevPrice):
            toSell=int(held*int(1000000*(price-prevPrice))/(price))//1000000
            print("s"+str(toSell))
        if(price<prevPrice):
            toBuy=int(((money+1000)//price)*int(1000000*(prevPrice-price))//(prevPrice))//1000000
            print("b"+str(toBuy))
        if(price==prevPrice):
            print("b0")

with open("percentageTrader.dat","w") as f:
    f.write(str(price))

দৌড়ানোর বিষয়ে নির্দেশনা

  • ফাইলনাম.পি হিসাবে সংরক্ষণ করুন
  • পাইথন ফাইলনেম দিয়ে চালান py পিপি দাম # শেয়ারের ব্যালেন্স রাউন্ড #

কিভাবে এটা কাজ করে

  • প্রথম দফায় বট যতটা শেয়ার কিনে তা কিনতে পারে।
  • দাম বৃদ্ধি পেলে, বট দামের শতাংশ বৃদ্ধির সমান শতাংশ শেয়ার বিক্রি করে (নতুন মান থেকে গণনা করা হয়)
  • যদি দাম হ্রাস পায় তবে বট সর্বাধিক শেয়ারের শতাংশের শতাংশ কিনে ফেলতে পারে যা দামের শতাংশের হ্রাসের সমান (আগের মান থেকে গণনা করা)
  • 1000 রাউন্ডে সবকিছু বিক্রি করে

পরিবর্তনগুলি আশা করি ভাসমান পয়েন্ট বিভাগের কারণে সৃষ্ট সমস্যাগুলি সরিয়ে নেওয়া উচিত


4

নাভী পরিসংখ্যানবিদ

পাইথন 3 এর জন্য তৈরি, পাইথন 2 এ কাজ করতে পারে

from sys import argv
from math import floor

# Save an entry to the stock history
def save_history(price):
    with open('stockhistory.txt', 'a') as f:
        f.write(str(price) + '\n')

# Load the stock history
def load_history():
    with open('stockhistory.txt', 'r') as f:
        return [float(line.strip()) for line in f]

# Calculate average price rise/fall streak length
def average_streak(history, condition):
    streaks = []
    current_streak = 0
    last_price = history[0]
    for price in history[1:]:
        if condition(last_price, price):
            current_streak += 1
        elif current_streak:
            streaks += [current_streak]
            current_streak = 0
        last_price = price
    if current_streak:
        streaks += [current_streak]
    return sum(streaks) / len(streaks) if streaks else None

# Calculate the current streak length
def current_streak(history, condition):
    streak = 0
    while streak < len(history) - 1 and condition(history[-streak - 2], history[-streak - 1]):
        streak += 1
    return streak

def run(share_price, share_count, balance, round_number):
    save_history(share_price)

    # Sell all shares if it is the last round
    if round_number == 1000:
        print('s' + str(int(share_count)))
        return

    # Buy as many shares as possible if the price is down to one, as there's
    # nothing to lose
    if share_price == 1:
        buy_count = int(balance + 1000)
        print('b' + str(buy_count))
        return

    history = load_history()

    # Calculate the average and current rise/fall streaks
    average_rise = average_streak(history, lambda a, b: a <= b)
    current_rise = current_streak(history, lambda a, b: a <= b)
    average_fall = average_streak(history, lambda a, b: a >= b)
    current_fall = current_streak(history, lambda a, b: a >= b)

    # Do nothing if there's no analyzed data
    if not average_fall or not average_rise:
        print('b0')
        return

    # Buy shares if the current rise streak is as long as or longer than average
    if current_rise > current_fall and current_rise >= average_rise:
        buy_count = (balance + 1000) / share_price
        print('b' + str(int(buy_count)))
        return

    # Sell shares if the current fall streak is as long as or longer than average
    if current_fall > current_rise and current_fall >= average_fall:
        print('s' + str(int(share_count)))
        return

    # Otherwise, do nothing    
    print('b0')

run(*map(float, argv[1:]))

এটি একটি নির্লজ্জ পরিসংখ্যানবিদ যা দাম স্বাভাবিকের চেয়ে বেশি সময় ধরে / কমে গেলে কেবল ক্রয় / বিক্রয় করে স্টকের দামগুলি পূর্বাভাস দেওয়ার চেষ্টা করে, এছাড়াও দাম একের নিচে হলে স্টক কেনা এবং সর্বশেষে সমস্ত স্টক বিক্রি করে।


4

ডলার ব্যয় অ্যাভারেজার

(পাইথন ৩.7 দিয়ে পরীক্ষা করা)

কোডগল্ফে প্রথম পোস্ট তাই যদি আমি কিছু ভুল করে থাকি তবে আমাকে বলুন।

প্রাথমিক ধারণাটি যদি সম্ভব হয় তবে প্রতিটি রাউন্ডে একটি শেয়ার কেনা এবং শেষে সমস্ত শেয়ার বিক্রি করা।

from sys import argv
share_price = int(argv[1])
share_count = int(argv[2])
balance = float(argv[3])
round = int(argv[4])

if round < 1000:
    if balance > share_price-1000:
        print("b1")
    else:
        print("b0")
else:
    print("s" + str(share_count))

4

ইকুয়ালাইজার

from sys import argv
p, n, b, r = map(int, argv[1:])
c = p*n
print "bs"[(c+b)/2>b] + str(int(abs(((c-b)/2)/p))) if r < 999.5 else "s" + str(int(n))

শেষ ব্যতীত প্রতিটি রাউন্ডে নগদ এবং স্টকের মধ্যে সমানভাবে তার আর্থিক সংস্থানগুলি পার্টিশন করে। আমি বিশ্বাস করি যে এই কৌশলটি কমপক্ষে কিছু অর্থোপার্জনের গাণিতিকভাবে কার্যকর উপায় হতে পারে তবে আমি ভুল প্রমাণিত হতে পারি।

আমি যে বাগগুলি ধরিনি সেগুলিতে বা থাকতে পারে। কিছুটা গল্ফও করেছে।


তোমার প্রোগ্রাম বৃহৎ এখানে জড়িত সংখ্যার অসুবিধা হচ্ছে না, তাই আমি লাইন পরিবর্তন করার সুপারিশ করছি p, n, b, r = map(float, argv[1:])মধ্যেp, n, b, r = map(int, argv[1:])
বিটা ক্ষয়

@ বেটাডেকে সম্পন্ন করেছেন
এফ। পিয়ার্স

4

একটি টাইপরাইটার বানর

import random

cmd = ['b', 's'][int(random.random() * 2)]
num = str(int(random.random() * 1000000))
print("%s%s" % (cmd, num))

এটি টাইপরাইটারগুলিতে বানরের গোছা। এলোমেলোভাবে এক্স স্টক বিক্রয় করে বা কেনে, যেখানে:
0 <= X <= 1,000,000

পাইথন 3 দিয়ে চালান, তবে পাইথন 2 দিয়েও (?) কাজ করা উচিত?


4
কেন ব্যবহার করবেন না cmd=random.choose(['b','s'])এবং num = str(random.randint(0, 1000000))?
বিটা ক্ষয়

1
কারণ আমি অলস
স্কিডেদেব

1
কেন শুধু নয়import lazy
ওহুজিন

পুরো জিনিসটি হ্রাস করা যেতে পারে ;from random import randint, choice;print("{}{}".format(choice(["b", "s"]), randint(0, 1e6)))
অ্যারন এফ

6
হ্যাঁ, তবে এটি কোনও গল্ফ চ্যালেঞ্জ নয়
স্কিডসদেব

4

কম কিনুন

(পাইথন 2 বা 3)

import random

def run(price, shares, balance, round_):
    # We get no value from our leftover shares at the end, so sell them all.
    if round_ == 1000:
        print('s' + str(int(shares)))
        return

    # If the price is low enough, buy everything we can.
    if price <= 20 + round_ * 60:
        print('b' + str((balance + 1000) // price))
        return

    # If we have no shares, wait for the price to drop.
    if shares == 0:
        print('b0')
        return

    # Sometimes sell shares so we can buy if the price gets low again.
    if random.random() < 0.4:
        print('s1')
        return

    # Otherwise, just wait for a better price.
    print('b0')


if __name__ == '__main__':
    import sys
    run(*[float(x) for x in sys.argv[1:]])

3

মিথ্যা জুয়াড়ি

(পাইথন 2 বা 3)

import random

def run(price, shares, balance, round_):
    # We get no value from our leftover shares at the end, so sell them all.
    if round_ == 1000:
        print('s' + str(int(shares)))
        return

    # For the first round, just watch.
    if round_ == 1:
        with open('fg.txt', 'w') as f:
            f.write('1 0 10')
        print('b0')
        return

    # Get the state.
    with open('fg.txt') as f:
        direction, streak, previous = map(int, f.read().strip().split())
    change = price - previous

    # If the market isn't moving, wait for it to get hot again.
    if change == 0:
        print('b0')
        return

    # Keep track of the market direction.
    if (change > 0) == (direction > 0):
        streak += 1
    else:
        streak = 0
        direction *= -1

    # If the market's been going one way for too long, it has to switch, right?
    if streak > 5:
        if direction > 0:
            print('s' + str(shares // 2))
        else:
            print('b' + str((balance + 1000) // price // 2))
    # Otherwise, the market's too volatile.
    else:
        print('b0')

    # Save the state.
    with open('fg.txt', 'w') as f:
        f.write('%d %d %d' % (direction, streak, price))


if __name__ == '__main__':
    import sys
    run(*[float(x) for x in sys.argv[1:]])

3

(ডায়ালগ) এপিএল কৃষক

r←apl_stock_farmer args
 round←¯1↑args
 :If 1=round
     (buyPrice sellPrice)←10 0
     bought←1
     (currPrice shares balance)←3↑args
     r←'b10'
 :ElseIf 1000=round
     r←'s',⍕shares
 :Else
     (currPrice shares balance)←3↑args
     :If (currPrice>buyPrice)∧bought
         bought←0
         sellPrice←currPrice
         r←'s',⍕shares
     :ElseIf (currPrice<sellPrice)∧~bought
         bought←1
         buyPrice←currPrice
         r←'b',⍕⌊(1000+balance)÷currPrice
     :Else
         r←'b0'
     :End
 :End

একটি ট্রেডফেন যা প্রথম রাউন্ডে প্রতিটি সম্ভাব্য শেয়ার কিনে এবং কেবল তখন বিক্রি করে যখন শেয়ারগুলির বর্তমান মূল্য তারা কেনা দামের চেয়ে বেশি হয়। বিক্রির পরে, বট কেবলমাত্র এমন শেয়ার কিনবে যা তার সর্বশেষ বিক্রি হওয়া দামের চেয়ে সস্তা।

কারণ কৃষকের হিসাবরক্ষক তাকে বলেছিল যে আপনি কীভাবে স্টক ট্রেডিং করেন। "কম কিনুন, উচ্চ বিক্রি করুন" এবং এগুলি সমস্ত জিনিস।

দাবি পরিত্যাগী

কোটএইচ চ্যালেঞ্জের এটি আমার প্রথম প্রচেষ্টা, এবং যেহেতু আমি মূলত এখানে কেবল এপিএল করি, তাই আমি এটি নিয়েই যাওয়ার সিদ্ধান্ত নিয়েছি।

এটি বলেছিল, এটি অন্যান্য বটগুলির পাশাপাশি চালানো সম্ভব হবে কিনা তা আমি পুরোপুরি নিশ্চিত নই, কারণ এটি ট্রেডফ্যান এবং সরাসরি কোনও সিএমডি / বাশ শেলের মধ্যে খাওয়ানো যাবে না।

সুতরাং, এটি বাশ-এ চালানোর জন্য আপনার নিম্নলিখিত কমান্ডের প্রয়োজন:

$ echo apl_stock_farmer args | dyalog 'stock_exchange.dws' -script

কোথায়:

apl_stock_farmer কোডটির প্রথম লাইনে থাকা ফাংশনটির নাম।

argsস্থান পৃথক যুক্তিগুলির ভেক্টর (প্রথম রাউন্ডে, এটি হবে 10 5 100 1)।

dyalog ডায়ালগ এক্সিকিউটেবলের পথ

'stock_exchange.dws'ফাংশনযুক্ত ওয়ার্কস্পেসের নাম (বা পথ, যদি ফাইল একই ডিরেক্টরিতে শেলটি খোলা থাকে) হয়। একটি স্পষ্ট কর্মক্ষেত্র খোলার মাধ্যমে, টাইপ করে )ed apl_stock_farmer, উপরের কোডটি আটকানো এবং তারপরে একটি করে এই ওয়ার্কস্পেস ফাইলটি পাওয়া যায় )save <path>। যদি আরও সহজ হয় তবে আমি এই ওয়ার্কস্পেস ফাইলটিও সরবরাহ করতে পারি।

-script কেবলমাত্র একটি যুক্তি যা ডায়ালগটি প্রদত্ত কোডটি কার্যকর করে এবং আরএপিএল না খোলায় স্টাডআউটে মুদ্রণ করে।

দুর্ভাগ্যক্রমে, আমি এটি উইন্ডোজ সিএমডি বা পাওয়ারশেল দিয়ে কাজ করার কোনও উপায় খুঁজে পাইনি, তাই আমি গিট ব্যাশ ব্যবহার করে এটি চালিয়েছি। আমি নিশ্চিত নই যে এই বোটটি প্রতিযোগিতায় ফেলে রাখা কতটা সম্ভব, তবে আমি এই কোডটি পোষ্ট না করাই বেশি পছন্দ করি।


দুঃখিত, আমার কাছে কেবল ডায়ালগ এপিএল-এর অনিবন্ধিত সংস্করণ রয়েছে, সুতরাং আমি নিশ্চিত নই যে এটি প্রতিযোগিতায় প্রবেশকারী হিসাবে কাজ করবে
বিটা ডেসে

@ বেটাডেহে আমি বুঝতে পেরেছি, সেখানে কোনও সমস্যা নেই। আমি এই কোডটি চালানোর জন্য আপনি পিনাপল লাইব্রেরিটি ব্যবহার করতে পারেন তাও খুঁজে পেয়েছি । বিশদটি "পাইথন থেকে এপিএল অ্যাক্সেস করা" এর অধীনে রয়েছে, বিশেষত "পাইথন ব্যবহার করে একটি ট্রেডফেন সংজ্ঞায়িত করা", এবং এটি দেখতে বেশ সোজা looks
জে.সাল্লি

3

নিরক্ষর লভ্যাংশ বিনিয়োগকারী

import random
from sys import argv

price = float(argv[1])
shares = int(argv[2])
cash = float(argv[3])
round = int(argv[4])

# buy 1st round, sell last round
if round == 1:
    print('b' + str(int((cash + 1000) / price)))
elif round == 1000:
    print('s' + str(shares))

# round right before dividend: sell
elif round % 5 == 4:
    print('s' + str(shares))

# 1 round after dividend: buy
elif round % 5 == 0:
    print('b' + str(int((cash + 1000) / price)))

# 2 rounds after dividend: 50/50 sell/try to buy
elif round % 5 == 1:
    if random.random() < 0.5:
        print('s' + str(shares))
    else:
        print('b' + str(int((cash + 1000) / price)))

# 3 rounds after dividend: sell if own shares (didn't sell last round), else buy
elif round % 5 == 2:
    if shares > 0:
        print('s' + str(shares))
    else:
        print('b' + str(int((cash + 1000) / price)))

# otherwise, 4 rounds after dividend, buy
else:
    print('b' + str(int((cash + 1000) / price)))

লভ্যাংশের পরে ধরে নেওয়া, লোকদের আরও নগদ থাকে, তাই তারা কেনার সম্ভাবনা বেশি থাকে। লভ্যাংশের ঠিক আগে বিক্রয় করে, ঠিক পরে কিনে। অন্য 3 রাউন্ডে অন্য একের বিক্রয় / ক্রয় চক্রের মধ্য দিয়ে যায়।


কন্ট্রোলারের দিকে তাকিয়ে, লভ্যাংশগুলি প্রতি 5 তম রাউন্ডে নয়, 4 তম পরে প্রতিটি রাউন্ড প্রদান করে। আপনার চক্রটি এখনও কাজ করা উচিত তবে আপনার ইচ্ছা মতো নয় not
ভেস্কাহ

আপনি যদি অন্য লোকেরা কেনার পরে কিনে থাকেন তবে আরও ব্যয়বহুল হয়ে গেলে আপনি কেনা শেষ করেন।
fəˈnɛtɪk

ধন্যবাদ @ ভেস্কাহ। পাশাপাশি কিছু r1 / r1000 যুক্তি যুক্ত করতে হয়েছিল।
brian_t

@ ফেনাটেক - ধরে নিয়ে লোকেরা লভ্যাংশের পরে গোলটি কিনে, আপনিও সেই রাউন্ডটি কিনে তারপরে বিক্রি করতে চান, না?
brian_t

4 য় এর পরে প্রতি রাউন্ডে লভ্যাংশ পাওয়ার কারণে লভ্যাংশের পরে কোনও রাউন্ড নেই।
fəˈnɛtɪk

3

যতটা সম্ভব কিনুন / পুনরায় বিনিয়োগ করুন!

আমার ডলার-কস্ট অ্যাভারেজারের অনুরূপ, আশ্চর্যজনকভাবে, বেশ গড়, এটি প্রতিটি রাউন্ডকে সাশ্রয়ী মূল্যের যতগুলি শেয়ার কিনে এবং কেবলমাত্র শেষ রাউন্ডে বিক্রি করে s

from sys import argv

share_price = int(argv[1])
share_count = int(argv[2])
balance = float(argv[3])
round = int(argv[4])


if round < 1000:
    if balance > share_price-1000:
        buy_count = int((balance+1000)/share_price)
        print("b"+str(buy_count))
    else:
        print("b0")
else:
    print("s" + str(share_count))

আরে, আপনি এখানে আপনার ইন্ডেন্টেশন দিয়ে একটি ত্রুটি পেয়েছেন। আপনি কি if balance > share_price-1000:ব্লকটি ইনডেন্ট করতে চেয়েছিলেন নাকি?
বেটা ক্ষয়

হ্যাঁ. আমার ছোটখাট সম্পাদনাটি আমার ফর্ম্যাটটিকে ব্যাহত করেছে বলে মনে হচ্ছে। একটি পিসি উপর I'mback যত তাড়াতাড়ি এটা ঠিক করবে
Barbarian772

2

নভিস ব্রোকার (তবে মূল ধারণাটি পান)

se_stock_exchange.rb:

DATA_FILE = $0.sub /\.rb$/, ".data"
NUM_ROUNDS = 1000

share_price, num_shares, money, round = ARGV.map &:to_i

order = "s0"

if round == NUM_ROUNDS
  puts "s#{num_shares}"
  exit
end

if File.exists? DATA_FILE
  last_price, trend, bought_price = File.read(DATA_FILE).lines.map &:to_i
else
  last_price = 0
  trend = -1
  bought_price = 0
end

if (new_trend = share_price <=> last_price) != trend
  case trend
  when -1
    order = "b#{(money + 1000) / share_price}"
    bought_price = [bought_price, share_price].max
  when 1
    if share_price > bought_price
      order = "s#{num_shares}"
      bought_price = 0
    end
  end
  trend = new_trend
end

File.open(DATA_FILE, "w") { |f| f.puts share_price, trend, bought_price }

puts order

দাম ঘুরিয়ে দেওয়া পর্যন্ত অপেক্ষা করে, তারপরে সবকিছু কিনে / বিক্রি করে। আমি বলতে চাইছি, ডামিদের জন্য ডে ট্রেডিংয়ে এটিই বলেছে নোট: এটি সম্ভবত একটি সত্যিকারের বই এবং এটি সম্ভবত কেউ এটিকে পেয়েছে

ডাটা সংরক্ষণ করে se_stock_exchange.dataruby se_stock_exchange.rb ${SHARE_PRICE} ${SHARES} ${MONEY} ${ROUND}(উপযুক্ত মান প্রতিস্থাপন) দিয়ে চালান with


এটি কোটএইচ আমার প্রথম ছুরিকাঘাত, সুতরাং আমি যদি এটি ভুল করে চলেছি তবে আমাকে জানান।
iamnotmaynard 16


আমি এই ত্রুটিটি পেয়েছি:se_stock_exchange.rb:24:in `<main>': undefined method `+' for nil:NilClass (NoMethodError)
এরিক দি আউটগল্ফার

4
@ বেটাডে: খুব খারাপ লেখকের মাঝের নামটি 'এ' দিয়ে শুরু হয় না।
3D1T0R

3
@ নিডজেজেকোব: যদি এটি 'এ' হত: "আন এ লোগু" " এনালগ " এর সাথে সাদৃশ্যপূর্ণ
3D1T0R

2

হাফ মোর বা কিছুই না

def run(price, shares, balance, cur_round):
    if cur_round==1000:
        print('s'+str(int(shares)))
        return

    if cur_round==1:
        with open('HalfMoreOrNothing.dat', 'w') as f:
            f.write(str(int(price)))
        print('b'+str(int((balance+1000)/price)))
        return

    if shares==0:
        with open('HalfMoreOrNothing.dat', 'w') as f:
            f.write(str(int(price)))
        print('b'+str(int((balance+1000)/price)))
        return

    with open('HalfMoreOrNothing.dat', 'r') as f:
        bought_price=int(f.read())
    if price>=bought_price*1.5:
        print('s'+str(int(shares)))
        return

    print('b0')

if __name__ == '__main__':
    import sys
    run(*[float(x) for x in sys.argv[1:]])

আমি পাইথনটি খুব কমই ব্যবহার করি, যদি এটি কোথাও কোনও ত্রুটি উত্পন্ন করে তবে আমাকে জানান।

কৌশলটি হ'ল শেয়ারটি দামের চেয়ে কমপক্ষে 50% বড় হওয়া অবধি অপেক্ষা করা যতক্ষণ না এগুলি বিক্রি করার মুহুর্তে, তারপরে সেগুলি বিক্রয় করুন, তারপরে অবিলম্বে নতুন শেয়ার কিনুন যাতে এটি নতুন শেয়ারের দাম বৃদ্ধির জন্য অপেক্ষা করতে পারে।

আশা করি, লোকে চিম্পসগুলি শেষের দিকে শেয়ার বিক্রি শুরু করবে না ... (মনে হচ্ছে বেশিরভাগ বটগুলি ঠিক মুহুর্তের জন্য অপেক্ষা করে, যা কিছু হোক না কেন)


2

ফিবানচি

জিনিসগুলি আরও সহজ করার জন্য আমি পাইথন 3 এ এটি আবার লিখেছি। আশা রাখি,!

import math
from sys import argv

price = float(argv[1])
shares = int(argv[2])
balance = float(argv[3])
roundNum = int(argv[4])

fibonacci = [2,3,5,8,13,21,34,55,89,144,233,377,610,987]
if (roundNum == 1):
    buy = int((balance+1000)/price)
    print('b' + str(buy))
elif (roundNum in fibonacci) and roundNum % 2 == 1 and balance > 0:
    buy = int((balance/price)/2)
    print('b' + str(buy))
elif ((roundNum in fibonacci) and roundNum % 2 == 0) or roundNum % 100 == 0:
    if (roundNum == 1000):
        sell = shares
        print('s' + str(sell))
    else:
        sell = math.ceil(shares/2)
        print('s' + str(sell))
else:
    print('b0')

এটি রাউন্ডটি একটি বিজোড় ফিবোনাচি সংখ্যার সমান হলে অর্ধেকতম পরিমাণের শেয়ার কিনে এবং যখন গোলটি এমনকি ফিবোনাকির সংখ্যার সমান হয় এবং প্রতি 100 রাউন্ডের সমান হয় তখন উপলব্ধ শেয়ারের অর্ধেক বিক্রয় করে। 1000 শেয়ারে সমস্ত শেয়ার বিক্রয় করে। অন্যথায়, এটি কেবল অপেক্ষা করে wa ব্যালেন্স ইতিবাচক হলে কেবল শেয়ার কিনে।


আরে, আমি ত্রুটিটি পেয়েছিError in roundNum%%2 : non-numeric argument to binary operator Execution halted
বিটা ডিকায়

@ বেটাডেচে আমি কোডটি আপডেট করেছি যা সমস্যার সমাধান করতে পারে। আমাকে জানতে দাও.
রবার্ট এস

1

লোভী বি ***** ডি

# Gready one...
from sys import argv

SMA_PERIOD = 5
LAST_BUY_DAY = 985
LAST_SELL_DAY = 993

# Save an entry to the stock history
def save_history(price):
    with open('db.txt', 'a') as f:
        f.write(str(price) + '\n')

# Load the stock history
def load_history():
    with open('db.txt', 'r') as f:
        return [float(line.strip()) for line in f]

def get_sma(d, n):
    l = d[-n:]
    return int(sum(l) / len(l))


def buy(price, account):
    if account + 1000 > 0:
        print 'b' + str(int((account + 1000) / price))
        return
    print 'b0'

def sell(holdings):
    print 's'+ str(int(holdings))


def run(price, holdings, account, day):

    save_history(price)
    d = load_history()

    if price <= get_sma(d, SMA_PERIOD) and day < LAST_BUY_DAY:
        return buy(price, account)

    if price > get_sma(d, SMA_PERIOD):
        return sell(holdings)

    if day >= LAST_SELL_DAY:
        return sell(holdings)

    # Otherwise, do nothing    
    print 'b0'


run(*map(float, argv[1:]))  

দাম বাড়লে একবারে সস্তা হয়ে যাবে এবং বিক্রি করে দেবে ...


আপনার কোডটি পুরো জায়গা জুড়ে। প্রথমত, আপনি মুদ্রণ বিবৃতি ফিরিয়ে দেন তবে তিনটি যুক্তি sell()যা আপনি কেবল একটি গ্রহণ করেন
বিটা ডেকে

() বিক্রি করার জন্য তিনটি আরগ দিয়ে টাইপ করুন ... এখন মুদ্রণ বিবৃতি ফেরত নিয়ে আপনার উদ্বেগ কী?
আরেক এস

কেবলমাত্র এগুলি অপ্রয়োজনীয়
বিটা ডিকায়

কেউ কেউ যুক্তি দেয় যে তারা পাঠযোগ্যতার সাথে সহায়তা করে
আরেক এস

আপনি কি প্রিন্টগুলির কারণে ফলাফলগুলিতে এটি অন্তর্ভুক্ত করেননি? আফাইক টাইপ বিক্রয়ে () সংজ্ঞাটি এটি কাজ করা বন্ধ করবে না ... আমি সেটাকে ঠিক করেছি
আরেক এস

1

প্রযুক্তি বিশ্লেষণ রোবট

আমি ব্যবসায়ের অর্থনীতি অধ্যয়ন করি তাই আমি শেয়ার বাজার (প্রযুক্তিগত বিশ্লেষণ) বিশ্লেষণের সহজতম পদ্ধতিটি উপলব্ধি করার চেষ্টা করেছি। তত্ত্ব অনুসারে আপনাকে কেবল গ্রাফের সমস্ত ন্যূনতম বিশ্লেষণ করতে হবে কোনও ট্রেন্ড রয়েছে কিনা তা দেখতে (আপ সাজিয়ে)। আপ ট্রেন্ডের সময় আপনাকে কিনতে হবে এবং ডাউন ট্রেন্ডের সময় আপনাকে বিক্রি করতে হবে।

আমি মনে করি না যে এই পদ্ধতিটি খুব ভালভাবে কাজ করবে তবে এর চেষ্টা করে দেখি :)

import sys
from sys import argv

share_price = int(argv[1])
share_number = int(argv[2])
bank_account = float(argv[3])
round_number = int(argv[4])

max_buy_greedily = (1000 + bank_account) / share_price
minima = []

def log():
    f = open("log_technical_analysis.txt","a+")
    f.write("%d;" % share_price)

def analyze():
    f = open("log_technical_analysis.txt","r+")
    line = f.readline()
    values = line.split(";")
    values.pop()
    for i in range(len(values) - 1):
        if i > 0 and int(values[i-1]) > int(values[i]) and int(values[i+1]) > int(values[i]):
            minima.append(int(values[i]))
    if len(minima) >= 3 and minima[len(minima) - 1] > minima[len(minima) - 2] and minima[len(minima) - 2] > minima[len(minima) - 3]:
        print('b' + str(int(max_buy_greedily)))
    elif len(minima) >= 3 and minima[len(minima) - 1] < minima[len(minima) - 2] and minima[len(minima) - 2] < minima[len(minima) - 3]:
        print('s' + str(share_number))
    else:
        print('b0')

if round_number >= 994:
    print('s' + str(share_number))
    sys.exit(0)

if share_price <= 15:
    print('b' + str(int(max_buy_greedily)))
    log()
    sys.exit(0)

log()
analyze()
sys.exit(0)

পাইথন 3 দিয়ে পরীক্ষা করা হয়েছে


2
শুভকামনা! এটি একটি সাধারণ বাজার থেকে অনেক দূরে: ডি
বিটা ডিকায়

1
@ বেটাডেহে হ্যাঁ হ্যাঁ:] তবে আপনি ভাবছেন যে বেশিরভাগ লোকেরা কীভাবে এলোমেলোভাবে তাদের অর্থ শেয়ারের বাজারে (বা বিটকয়েন) ব্যয় করে: ডি
সোলেনিয়া

1

ভাগ্যবান সংখ্যা 6

সম্পাদনা: ওফ এফএসস, আমি মনে করি বিক্রয় বিক্রয়কে আমার কাছে রূপান্তর না করা আমার সমস্যাগুলির মধ্যে একটি ছিল, ভাল এখানে আমরা আবার যাই।

সম্ভবত আমার শেষ অবদান, যদি না আমি কাজে বিরক্ত হই এবং কিছুটা পরিশীলিত কিছু তৈরি না করি তবে আমি ইতিমধ্যে অত্যাধুনিক বটগুলির মতো কুলুঙ্গি পূরণ করি।

এই লোকটি মূলত প্রতি 6 রাউন্ডে তার কিছু শেয়ার বিক্রি করে, কারণ হে 6 তার ভাগ্যবান নম্বর।

from sys import argv
import random

share_price = int(argv[1])
share_count = int(argv[2])
balance = float(argv[3])
round = int(argv[4])
x = random.uniform(1,2)

if round == 1 or round == 1000:
    print("s"+str(share_count))
elif round % 6 == 0 and share_price >= 10:
    sell = int(share_count/x)
    print("s"+str(sell))
elif balance > share_price-1000:
    buy_count = int((balance+1000)/share_price)
    print("b"+str(buy_count))
else:
    print("b0")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.