نحوه ساخت یک ربات تجارت داوری رمزنگاری

ساخت وبلاگ

Post Image

اگر می خواهید این پروژه را امتحان کنید یا آن را برای استراتژی خود سفارشی کنید ، به یک حساب ماکرومتا نیاز دارید. با کلیک بر روی دکمه زیر ، یک دقیقه برای ثبت نام در یک حساب رایگان وقت بگذارید.

من خوش شانس بوده ام که زندگی حرفه ای داشته ام که مرا در معرض تجربیات بسیاری قرار داده است. من نه تنها دست خود را در معماری و مهندسی نرم افزار امتحان نکرده ام ، بلکه سالهاست که یک معامله گر کمی حرفه ای است. بیشتر معاملات من با معاملات آتی شاخص و ارز در بورس کالای شیکاگو (CME) و همچنین تجارت سهام ایالات متحده بود.

هیجان عمومی پیرامون ارزهای رمزنگاری شده علاقه من را کاهش داد. وجود دارد~267 مبادلات معاملاتی cryptocurrency در سراسر جهان با احتمالاً حدود 8-10 مبادله با نقدینگی و شهرت کافی که ممکن است شخص در نظر داشته باشد ، در سراسر جهان گسترش یافته است. با توجه به تعداد مبادلات و نوسانات ارزهای رمزنگاری شده ، می خواستم ببینم که آیا ساخت یک ربات تجاری که می تواند در مبادلات مختلفی انجام شود ، انجام می دهد و با انجام کاری مانند آربیتراژ مبادله ای امکان پذیر است.

داوری مبادله چیست؟

یک داوری مبادله اساساً یک استراتژی معاملاتی است که براساس تفاوت بین قیمت رمزنگاری در صرافی های مختلف است. به طور کلی اگر اختلاف قیمت وجود داشته باشد و اختلافات با گذشت زمان جمع شود ، این فرصت ها باز می شوند تا در نهایت به مبلغ قابل توجهی مانند 1-3 ٪ در بازار cryptocurrency تبدیل شوند. این فرصت های داوری فقط برای چند ثانیه می تواند وجود داشته باشد ، بنابراین یک معامله گر داوری باید به طور مداوم بهترین فرصت ها را جستجو کند و سپس آنها را در هر زمان ممکن پیاده سازی کند.

اجرای استراتژی های داوری در بازار رمزنگاری چندان آسان نیست و شامل تعدادی از پیچیدگی های فنی است. علاوه بر داشتن سپرده در مبادلات عمده متعدد ، از طرف فنی ، توانایی نظارت بر فرصت های داوری به طور همزمان ، تجارت محلی در هر مبادله با حداقل تأخیر و دید و تعامل به موقع و تعامل بین نمایندگان تجارت در سطح جهان است. این چالش برای ساختن این نوع زیرساخت های توزیع شده به دلار بزرگ و تیمی با تخصص فنی لازم نیاز دارد.

داده های قیمت رمزنگاری در زمان واقعی با ماکرومتا

Macrometa یک شبکه داده جهانی است که یک پایگاه داده غیرمتمرکز ، توزیع شده ، موتور پردازش جریان و بستر محاسباتی را ارائه می دهد که در 175 منطقه Global Edge اجرا می شود. برنامه ها ، API ها و سرویس های وب که بر روی ماکرومتا نوشته شده اند به طور خودکار در سطح جهان مستقر می شوند و درخواست هایی را از نزدیکترین مکان لبه نسبت به درخواست با تأخیرهای محلی خواندن-نوشتن (یعنی تأخیر بسیار کم) انجام می دهند.

Macrometa طیف وسیعی از قابلیت های آماده را ارائه می دهد که برنامه ای مانند یک ربات تجارت رمزنگاری را به سرعت و به راحتی امکان پذیر می کند. ما در این آموزش از ویژگی های زیر ماکرومتا استفاده خواهیم کرد:

  1. پلت فرم توسعه دهنده توزیع کننده سرور ، غیر متمرکز و GEO ماکرومتا که یک پایگاه داده ، یک موتور جریان و پردازنده جریان و یک عملکرد/کانتینر را ارائه می دهد.
  2. ما از پایگاه داده اسناد جهانی برای ذخیره داده های تجاری و به اشتراک گذاری کلیه ابرداده های مرتبط با تجارت و ایالت بین ربات های غیر متمرکز ، بدون تابعیت و مؤلفه ها استفاده خواهیم کرد.
  3. ما برای انتشار داده های قیمت در زمان واقعی از هر مبادله از جریانهای توزیع شده GEO استفاده خواهیم کرد. هر ربات در جریان مشترک است و در مورد خرید یا فروش تصمیم می گیرد
  4. سرانجام ما از به روزرسانی های زمان واقعی از پایگاه داده جهانی استفاده خواهیم کرد تا به طور خودکار به مشتری/ربات ها/مشترکین از تغییرات در پایگاه داده اطلاع دهیم تا آنها بتوانند استراتژی معاملاتی خود را تغییر دهند

بنابراین با ویژگی های ذکر شده در بالا ، من می توانم ببینم که آیا می توان از Macrometa برای ساخت یک ربات معاملاتی رمزنگاری شده برای تجارت محلی در مبادلات متعدد ضمن ارائه دید جهانی و ارتباطات استفاده کرد.

برخی از سلب مسئولیت ها قبل از ادامه کار - استراتژی تجارت نمونه ای از قابلیت های پلت فرم ماکرومتا است. همچنین ، در حال حاضر من ارزهای رمزپایه را تجارت نمی کنم. معاملات شامل خطرات قابل توجهی است ، بنابراین همیشه دقت خود را انجام دهید. لطفاً به یاد داشته باشید که این پست در مورد نحوه استفاده از پلتفرم ماکرومتا است و نه در مورد چگونگی یا تجارت. پست وی این است که به عنوان مشاوره تجاری یا راهنمایی های مالی مورد استفاده قرار گیرد.

استراتژی تجارت رمزنگاری

برای این آموزش ، اجازه می دهیم از یک استراتژی معاملات ساده روند استفاده کنیم:

  • خرید → وقتی قیمت فعلی از 10 نوار متوسط حرکت ساده عبور می کند
  • فروش → وقتی قیمت فعلی از زیر 10 نوار متوسط حرکت می کند

ربات تجارت این استراتژی را با:

  • جفت BTC/USD در Coinbase Pro Exchange
  • جفت BTC/EUR در مبادله Bitstamp
  • جفت BTC/JPY در تبادل Bitflyer

لطفاً توجه داشته باشید که استراتژی تجارت یک نمونه فرضی است و لغزش ، گسترش ، اندازه موقعیت ، اندازه گیری موقعیت ، مانده حساب و غیره را در نظر نمی گیرد. کد این ربات معاملاتی منبع باز است.

ربات تجارت داوری رمزنگاری در عمل

برای برنامه تک صفحه می توانید به GUI دسترسی پیدا کنید - نسخه ی نمایشی زنده

با کلیک بر روی پیوند بالا باید چیزی مانند آنچه در زیر مشاهده می کنید نشان دهد.

در حال حاضر با پیش فرض بروید و روی تأیید کلیک کنید.

پس از کلیک بر روی تأیید ، صفحه بعدی از شما می خواهد منطقه را برای اتصال داشبورد انتخاب کنید. در حال حاضر این نسخه ی نمایشی در 4 منطقه اجرا می شود. منطقه ای را انتخاب کنید که از نظر جغرافیایی به شما نزدیک باشد.

پس از کلیک بر روی تأیید ، یک داشبورد Realtime مانند آنچه در زیر مشاهده می شود مشاهده خواهید کرد.

هر یک از نمودارهای موجود در تصویر فوق نشان دهنده نقل قول های جفت cryptocurrency ، میانگین متحرک آن و مبادله نقل قول ها از آن است. این از جریانهای جغرافیایی اصلاح شده که قبلاً به آنها اشاره کردم ، سرو می شود. این ربات از 1 جریان جغرافیایی اصلاح شده در هر جفت ارز و مبادله استفاده می کند.

پانل پایین معاملات انجام شده توسط ربات را در هر یک از مبادلات در آن منطقه نشان می دهد. با انجام معاملات ، این پانل در زمان واقعی به روز می شود. برای فیلتر کردن معاملات می توانید از جعبه فیلتر استفاده کنید.

اکنون که شما ایده ای از داشبورد به نظر می رسد ، زمان آن رسیده است که به داخل ربات های کوچک ربات تجارت و کد داشبورد شیرجه بزنید.

نمای 30،000 فوت

ربات معاملاتی از جریان های جغرافیایی مورد استفاده در پلت فرم ماکرومتا برای انتشار نقل قول های cryptocurrency محلی و میانگین های متحرک در هر منطقه استفاده می کند و در نقل قول ها و میانگین های متحرک از مناطق دیگر مشترک می شود. جریانهای جغرافیایی مورد استفاده شما را قادر می سازد در هر منطقه منتشر کنید و در هر منطقه دیگری مشترک شوید.

به همین ترتیب از ویژگی های پایگاه داده در زمان واقعی ماکرومتا برای ضبط معاملات محلی در هر منطقه استفاده می کند که سپس به طور خودکار در سطح جهانی و قابل مشاهده در همه مناطق در زمان واقعی قابل استفاده هستند. بیشتر بانکهای اطلاعاتی یک منطقه واحد و بر اساس طبیعت است. بانک اطلاعاتی ماکرومتا Geo-Distribed است و به روزرسانی های مبتنی بر کشش و فشار امکان پذیر است. ایده این است که هر ربات معاملاتی برای به روزرسانی در مجموعه معاملات (جدول) در هر منطقه مشترک است تا در زمان واقعی به روز شود.

سرانجام ، GUI یک برنامه کوچک صفحه ای است که می توانید در هر منطقه به صورت محلی وصل شوید و در مجموعه جریان ها و معاملات جغرافیایی مشترک مشترک شوید تا یک نمای جهانی در زمان واقعی بدست آورید.

کد منبع ربات Crypto

ساختن ربات تجارت جهانی و داشبورد به همان اندازه که فکر می کنید دشوار نبود. پلت فرم بسیاری از پیچیدگی های مرتبط با سیستم های توزیع شده را خلاصه می کند. به عنوان یک توسعه دهنده ، می توانید بیشتر روی نوشتن برنامه هایی که با یک سیستم محلی صحبت می کنند تمرکز کنید (به عنوان مثال ، تجارت ربات و داشبورد).

چند یادداشت دیگر:

  1. در ابتدا ربات معاملاتی برای اجرای در 3- ژئو- فعال (یعنی 3 نمونه) ساخته شده است که در آن هر نمونه به یک مبادله محلی متصل می شود ، معاملات و منتشر می کند و در جریان های مربوط به جغرافیایی و پایگاه داده مربوطه منتشر می شود. برای آسانتر کردن نسخه های نمایشی ، ما متعاقباً کد را تغییر دادیم تا یک نمونه واحد از ربات به هر 3 صرافی متصل شود و معاملات را انجام می دهد ، در حالی که هنوز در جریان های مربوط به جغرافیایی مربوطه منتشر می شود.
  2. ربات معاملاتی در پایتون با استفاده از درایور PYC8 (درایور پایتون ماکرومتا) توسعه یافت. برای آسانتر کردن نسخه های نمایشی ، ما کد را با استفاده از JSC8 (درایور JavaScript Macrometa) به JavaScript تغییر دادیم.

تدوین و استقرار

شما می توانید در آموزش readme. md جزئیات مربوط به نحوه کامپایل و اجرای ربات تجارت و داشبورد محلی و همچنین از طریق S3 را بخوانید.

ساختار و جزئیات کد ربات Crypto

این نسخه ی نمایشی معاملات ارز رمزنگاری دو بخش دارد:

  1. یک برنامه گره
  2. یک برنامه داشبورد UI که در Reactjs نوشته شده است

برنامه گره (ربات معاملات AKA)

برنامه گره دارای چهار پرونده اصلی است:

  • config. js - حاوی اعتبار ماکرومتا برای استفاده برای نسخه ی نمایشی است.
  • index. js - کار اولیه سازی برای JSC8 و جریان در این پرونده است.
  • Producer. js - این پرونده آخرین مقادیر را از مبادلات مختلف دریافت می کند و آنها را به جریان های مربوط به جغرافیایی مربوطه منتشر می کند. از کتابخانه CCXT برای اتصال به مبادلات مختلف استفاده می کند.
  • Consumer. js - این پرونده در جریان ها مشترک است ، میانگین متحرک را به جریان های مربوط به جغرافیایی مربوطه محاسبه می کند. همچنین ، این باعث می شود تجارت و فروش معاملات و سوابق آنها را در مجموعه معاملات انجام دهد.

نسخه ی نمایشی برای هر جفت cryptocurrency که معامله می شود ، دو جریان جغرافیایی ایجاد می کند:

  • BTC/USD-Cryto-Trader-Quotes-USD و Crypto-Tader-Quotes-AVG-USD
  • BTC/EUR-جریان های Cryto-Trader-Quotes-Eur و Crypto-Tader-Quotes-AVG-EUR
  • BTC/JPY-Cryto-Trader-Quotes-Jpy و Crypto-Tader-Quotes-AVG-JPY جریان

در زیر بخش اصلی کد در index. js وجود دارد.

// شروع جهانی را شروع کنید محاصره کردن quetecurr_exchange_map = <"دلار آمریکا": <"منطقه": "ایالات متحده آمریکا", "تبادل": "GDAX", // این شناسه مبادله در CCXT است قیمت: خالی, رزم: خالی>, "یورو": <"منطقه": "اروپا", "تبادل": "Bitstamp", // این شناسه مبادله در CCXT است قیمت: خالی, رزم: خالی>, "jpy": <"منطقه": "آسیا و اقیانوسیه", "تبادل": "bitflyer", // این شناسه مبادله در CCXT است قیمت: خالی, رزم: خالی>,> // C8Streams محاصره کردن QUOTES_TOPIC_PREFIX = "کریپتو-معامله-به نقل از-"; محاصره کردن AVGQUOTES_TOPIC_PREFIX = "crypto-trader-quotes-avg-"; ناهمگام تابع init( ) <// به پلت فرم داده Macrometa متصل شویدپارچه =جدید پارچه(`https://$ `); در انتظارپارچه.وارد شدن(نام مستاجر، نام کاربری، رمز عبور)؛پارچه.استفاده از مستاجر(نام مستاجر)؛پارچه.استفاده از فابریک(fabricName)؛// نمادهای صرافی کریپتو را دریافت کنید محاصره کردنکلید =هدف - شی.کلیدها(quetecurr_exchange_map); برای (اجازه دهیدکلیدofکلیدها)<محاصره کردنobj =quetecurr_exchange_map[کلید]؛// یک جریان جغرافیایی تکراری برای نقل قول ایجاد کنید محاصره کردنquote_topic =`$ $ `; obj.قیمت= پارچهجریان(نقل قول_موضوع،نادرست); در انتظارobj.قیمت.createStream(); // برای میانگین متحرک یک جریان جغرافیایی تکراری ایجاد کنید محاصره کردنma_topic =`$ $ `; obj.رزم= پارچهجریان(موضوع اصلی،نادرست); در انتظارobj.رزم.createStream(); محاصره کردن درOpenCallback = ( ) => <تولید داده(key, obj, regionUrl);> در انتظار مصرف داده(obj, onOpenCallback, regionUrl, fabric);>>; 

قسمت بعدی کد اصلی در فایل producer. js است.

// کد اتصال به صرافی: ناهمگام تابع init_exchange(ارزش) <if(! ارزش)پرت كردن "شیء نقل قول تصویب نشد"; محاصره کردنعید = ارزشتبادل; محاصره کردنمبادله =جدیدccxt[eid](); تبادل.EnableRateLimit = درست است، واقعی; تبادل.حد نرخ = حد نرخ; کنسول.ورود به سیستم(بارگیری بازارها برای تبادل ارزهای دیجیتال:+ معاوضهنام); در انتظارتبادل.load_markets(); برگشت exchange;> // کد دریافت داده های تیک از صرافی: ناهمگام تابع دریافت_تیکر(تبادل، quote_currency، regionName) <if(! تبادل)پرت كردن "خطا: مبادله پوچ یا خالی است!"; اجازه دهیدنماد =`$ /$ `; اجازه دهیدتیکر =در انتظارتبادل.fetch_ticker(سمبل)؛اجازه دهیدبستن = تیک تیک['بستن'] اجازه دهیدts =ریاضی.کف(تاریخ.اکنون() / 1000); اجازه دهیدquote_dict =<>quote_dict.منطقه= regionName quote_dict.تبادل= مبادلهنامquote_dict.سمبل= نماد quote_dict.مهر زمانی= ts quote_dict.بستن= بستنبرگشت JSON.رشته کردن(quote_dict)> // کدی برای انتشار داده های تیک دار در جریان های مشابه جغرافیایی مربوطه: ناهمگام تابع تولید داده(کلید، مقدار، آدرس URL) <محاصره کردنExchangeObj =در انتظار init_exchange(ارزش)؛محاصره کردن = ارزش؛setInterval(ناهمگام () => <اجازه دهیدتیکر =در انتظار دریافت_تیکر(exchangeObj، کلید، منطقه)؛quoteStream.تهيه كننده(ticker, regionUrl);>, delay);> 

قسمت بعدی کد اصلی در فایل customers. js است.

ناهمگام تابع مصرف داده(obj، onOpenCallback، regionUrl، پارچه) <اجازه دهیددسته جمع آوری =در انتظارپارچه.مجموعه("تجارت") tradectr =در انتظاردسته جمع آوریشمردن() tradectr = تریدکتر.شمردن محاصره کردنclose_history = [];محاصره کردنma_history = [];محاصره کردن = obj;محاصره کردننام اشتراک =`$ -$ `؛نقل قولمصرف كننده(نام اشتراک ،<درپ: () => <// تولید کننده این جریان را شروع کنید درOpenCallback();>, جنجال: ناهمگام (msg) => <تلاش كردن <اجازه دهیدdecode_msg_obj =JSON.تجزیه کردن(MSG) ؛اجازه دهیدBUFF =جدید بافنده(decode_msg_obj.ظرفیت ترابری, "Base64"); اجازه دهیدDEC = BUFF.شیب دار('ascii') ؛دسامبر =JSON.تجزیه کردن(دسامبر) ؛// پیام برای استخراج قیمت خرید و فروش قارچبستن = دسامبر.بستن; قارچtimestamp = dec.مهر زمانی; قارچنماد = دسامبر.سمبل; قارچمبادله = دسامبر.تبادل; قارچquoteregion = دسامبر.منطقه; if(Close && Timestamp)فشار دادن(close);> // محاسبه و انتشار SMA if(close_history.طول>= ma_len)فشار دادن(NJ.منظور داشتن(close_history)) ؛اجازه دهیدsma_dict =<>؛sma_dict ["منطقه"] = quoteregion ؛sma_dict ['تبادل'] = مبادله ؛sma_dict ['سمبل'] = نماد ؛sma_dict ['MA'] = ma_history [ma_history.طول - 1] ؛sma_dict ['بستن'] = بستن ؛sma_dict ["Timestamp"] = Timestamp.شیب دار(); اجازه دهیدsma_dic_str =JSON.رشته کردن(sma_dict) ؛Mastreamتهيه كننده(sma_dic_str, regionUrl);> // آیا ما نیاز به خرید داریم؟ if(ma_history.طول> 3&& close_history [close_history.طول - 1]>ma_history [ma_history.طول - 1] && close_history [close_history.طول - 2] طول - 2]) <اجازه دهیدTradeobj =<>؛Tradeobj ["_key"] = "خرید-"+ (Timestamp).شیب دار() ؛Tradeobj ["تبادل"] = مبادله ؛Tradeobj ["سمبل"] = نماد ؛Tradeobj ["QUOTE_REGION"] = quoteregion ؛Tradeobj ["Trade_strategy"] = "تجارت MA"؛Tradeobj ["Timestamp"] = Timestamp ؛Tradeobj ["Trade_Type"] = "خرید"؛Tradeobj ["قیمت تجاری"] = بستن ؛در انتظار insert_trade_into_c8db(منطقه ، Tradeobj ، پارچه) ؛تجارت += =1 // تعداد تجارت را افزایش دهید کنسول.ورود به سیستم("تجارت:" + JSON.رشته کردن(tradeobj));> // آیا ما نیاز به فروش داریم؟ دیگر if(ma_history.طول> 3&& close_history [close_history.طول - 1] طول - 1] && close_history [close_history.طول - 2]>ma_history [ma_history.طول - 2]) <اجازه دهیدTradeobj =<>؛Tradeobj ["_key"] = "فروش-"+ Timestamp.شیب دار() ؛Tradeobj ["تبادل"] = مبادله ؛Tradeobj ["سمبل"] = نماد ؛Tradeobj ["QUOTE_REGION"] = quoteregion ؛Tradeobj ["Trade_strategy"] = "تجارت MA"؛Tradeobj ["Timestamp"] = Timestamp ؛Tradeobj ["Trade_Type"] = "فروش"؛Tradeobj ["قیمت تجاری"] = بستن ؛تلاش كردن <در انتظار insert_trade_into_c8db(منطقه ، Tradeobj ، پارچه) ؛تجارت += =1; // تعداد تجارت را افزایش دهید کنسول.ورود به سیستم(`فروش تجارت:$ json.stringify(tradeobj)>`);> گرفتن(ه)<کنسول.ورود به سیستم("خطا در قرار دادن به جمع آوری", e);>>>>, regionUrl);> 

روش زیر:

  • داده ها را از جریان نقل قول مصرف می کند ،
  • میانگین حرکت در حال حرکت به طور متوسط در حال حرکت را محاسبه و منتشر می کند
  • سیگنال خرید و فروش را شبیه سازی می کند و
  • رکوردی را در مجموعه معاملات وارد می کند.

در مرحله بعدی درج های روش برای تجارت به ویژگی پایگاه داده پلت فرم داده ماکرومتا است.

ناهمگام تابع insert_trade_into_c8db(خوشه ، تجارت ، پارچه) <if(خوشه ===تعریف نشده||خوشه ===خالی) <کنسول.ورود به سیستم("خطا: خوشه تهی یا خالی است!")> if(Tradeobj ===تعریف نشده||Tradeobj ===خالی) <کنسول.ورود به سیستم(("خطا: شیء داده های تجارت تهی یا خالی است!"))> اجازه دهیدc8url = خوشهمحاصره کردنمجموعه = پارچه.مجموعه("تجارت") اجازه دهیدوجود دارد =در انتظارمجموعه.وجود دارد() if(وجود دارد ===نادرست) <در انتظارمجموعه.ايجاد كردن()> // تجارت را وارد کنید اجازه دهیدdoc =<>؛DOC.تبادل= TradeObj.تبادل؛DOC.سمبل= TradeObj.سمبل؛DOC.نقل قول= TradeObj.نقل قول؛DOC.trade_strategy= TradeObj.trade_strategy؛DOC.مهر زمانی= TradeObj.مهر زمانی؛DOC.trade_type= TradeObj.trade_type؛DOC.قیمت تجاری= TradeObj.قیمت تجاری؛DOC.تجارت= خوشه ؛مجموعه.صرفه جویی(doc) ؛کنسول.ورود به سیستم("اطلاعات تجارت ذخیره شده به C8DB در" "+ c8url +"': "+ (doc).شیب دار());> 

GUI (داشبورد رمزنگاری)

برنامه تک صفحه ای (یعنی داشبورد) در کلیه جریان های جغرافیایی و همچنین مجموعه معاملات برای نمایش نمودارها و معاملات در داشبورد مشترک است.

این پست خیلی طولانی تر از آنچه پیش بینی شده بود ، شد ، بنابراین ما در حال توضیح توضیحات کد برای داشبورد هستیم. توسعه دهندگان جاوا اسکریپت باید با نگاه مستقیم به کد بتوانند درک کنند. می توانید کد را برای این در فهرست ذکر شده در زیر پیدا کنید.

افکار نهایی

امیدوارم از آموزش لذت برده باشید و بتوانید از آن به عنوان نمونه برای نوشتن ربات های تجاری خود استفاده کنید. لطفا در صورت تمایل به من اطلاع دهید که چه چیزی ساخته اید و همچنین هرگونه نظری یا بازخورد.

سرانجام ، برخی از توصیه های ناخواسته به عنوان راهی برای گفتن از خواندن همه راه. برای من ، یک معامله گر خوب کسی است که مرتباً از کارگزار خود چک می کند. متأسفانه برای اکثر افراد چک ها فقط در جهت دیگر ، یعنی از آنها به کارگزار می روند. اگر در این گروه بعدی قرار گرفتید ، بیشتر مواردی را که در مورد تجارت خوانده اید ، نادیده بگیرید. درعوض ، یک استراتژی ساده را انتخاب کنید ، به آن بچسبید و تجارت کاغذ را تا زمانی که به طور مداوم سودآور نباشید. این یک آموزش در برابر صبر ، نظم ، مهارت و طرز فکر تجاری خواهد بود. پس از آن ، تا زمانی که بر چالش های روانی مرتبط با پول واقعی در خط غلبه کنید ، با پول کم تجارت کنید. این خلاصه دو دهه تجربه تجارت من پاره وقت و تمام وقت است.

استراتژی برای تحلیل فاندمنتال...
ما را در سایت استراتژی برای تحلیل فاندمنتال دنبال می کنید

برچسب : نویسنده : سعید شیخ‌زاده بازدید : <-PostHit-> تاريخ : سه شنبه 24 مرداد 1402 ساعت: 8:56