ΠΠ»ΠΎΠ³ ΠΈΠΌ. TaurusGOLD
' Π Excel Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ: ' 1. QUIK API (qlua.exe) ' 2. Microsoft XML ' 3. ADODB Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
| A | B | C | D | E | F | G |
|---|---|---|---|---|---|---|
| Π’ΠΈΠΊΠ΅Ρ | ΠΠ°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ | ΠΠΎΠ»-Π²ΠΎ | Π¦Π΅Π½Π° | Π‘ΡΠ°ΡΡΡ | ID Π·Π°ΡΠ²ΠΊΠΈ | ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ |
| GAZP | BUY | 10 | 160.50 | ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ | Β | π₯ ΠΡΠΏΡΠ°Π²ΠΈΡΡ |
| SBER | SELL | 5 | 280.30 | ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ | Β | π₯ ΠΡΠΏΡΠ°Π²ΠΈΡΡ |
' ΠΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ QUIK ΡΠ΅ΡΠ΅Π· DDE
Option Explicit
' ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
Private Const QUIK_DDE_SERVICE = "QLUA"
Private Const QUIK_DDE_TOPIC = "QuikTrans2"
Private Const TRANS2_TABLE = "TRANS2"
' ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ QUIK
Public Sub ConnectToQUIK()
On Error GoTo ErrorHandler
Dim ddeChannel As Long
ddeChannel = DDEInitiate(QUIK_DDE_SERVICE, QUIK_DTE_TOPIC)
If ddeChannel > 0 Then
ThisWorkbook.Sheets("ΠΠΎΠ½ΡΡΠΎΠ»Ρ").Range("B2"). <a name="cut"></a> Value = "ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΎ"
DDETerminate ddeChannel
Else
ThisWorkbook.Sheets("ΠΠΎΠ½ΡΡΠΎΠ»Ρ").Range("B2").Value = "ΠΡΠΈΠ±ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ"
End If
Exit Sub
ErrorHandler:
MsgBox "ΠΡΠΈΠ±ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ QUIK: " & Err.Description
End Sub
' ΠΡΠΏΡΠ°Π²ΠΊΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π² QUIK
Public Sub SendOrderToQUIK()
On Error GoTo ErrorHandler
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Π’ΠΎΡΠ³ΠΎΠ²Π»Ρ")
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Dim i As Long
For i = 2 To lastRow ' Π‘ΡΡΠΎΠΊΠ° 1 - Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ
' ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π½Π°ΠΆΠ°ΡΠ° Π»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ
If ws.Cells(i, "G").Value = "π₯ ΠΡΠΏΡΠ°Π²ΠΈΡΡ" Then
Dim ticker As String
Dim operation As String
Dim quantity As Long
Dim price As Double
ticker = ws.Cells(i, "A").Value
operation = ws.Cells(i, "B").Value
quantity = ws.Cells(i, "C").Value
price = ws.Cells(i, "D").Value
' ΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π·Π°ΡΠ²ΠΊΡ
Dim transactionId As String
transactionId = SendTransaction(ticker, operation, quantity, price)
' ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΡΡΠ°ΡΡΡ
If transactionId <> "" Then
ws.Cells(i, "E").Value = "ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ"
ws.Cells(i, "F").Value = transactionId
ws.Cells(i, "G").Value = "β
ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ"
Else
ws.Cells(i, "E").Value = "ΠΡΠΈΠ±ΠΊΠ°"
ws.Cells(i, "G").Value = "β ΠΡΠΈΠ±ΠΊΠ°"
End If
End If
Next i
Exit Sub
ErrorHandler:
MsgBox "ΠΡΠΈΠ±ΠΊΠ° ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π·Π°ΡΠ²ΠΊΠΈ: " & Err.Description
End Sub
' Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
Private Function SendTransaction(ticker As String, operation As String, _
quantity As Long, price As Double) As String
Dim ddeChannel As Long
ddeChannel = DDEInitiate(QUIK_DDE_SERVICE, QUIK_DDE_TOPIC)
If ddeChannel = 0 Then
SendTransaction = ""
Exit Function
End If
' Π€ΠΎΡΠΌΠΈΡΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ TRANS2
Dim transactionData As String
transactionData = "CLASSCODE=TQBR;" & _
"SECCODE=" & ticker & ";" & _
"ACTION=NEW_ORDER;" & _
"ACCOUNT=L01-00000F00;" & _
"OPERATION=" & operation & ";" & _
"PRICE=" & Format(price, "0.00") & ";" & _
"QUANTITY=" & quantity & ";" & _
"TYPE=L;" & _
"TRANS_ID=" & Format(Now, "yyyymmddhhnnss") & ";" & _
"BROKERREF=EXCEL_TRADE"
' ΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠ΅ΡΠ΅Π· DDE
DDEPoke ddeChannel, TRANS2_TABLE, transactionData
' ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ID ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
SendTransaction = "T" & Format(Now, "yyyymmddhhnnss")
DDETerminate ddeChannel
End Function' ΠΠΌΠΏΠΎΡΡ ΡΡΠ°ΠΊΠ°Π½Π° ΠΊΠΎΡΠΈΡΠΎΠ²ΠΎΠΊ
Public Sub ImportQuotesFromQUIK()
On Error GoTo ErrorHandler
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("ΠΠΎΡΠΈΡΠΎΠ²ΠΊΠΈ")
Dim tickers As Variant
tickers = GetTickerList()
Dim i As Long
For i = LBound(tickers) To UBound(tickers)
ImportTickerData tickers(i), ws, i + 1
Next i
Exit Sub
ErrorHandler:
MsgBox "ΠΡΠΈΠ±ΠΊΠ° ΠΈΠΌΠΏΠΎΡΡΠ° ΠΊΠΎΡΠΈΡΠΎΠ²ΠΎΠΊ: " & Err.Description
End Sub
' ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΏΠΎ ΡΠΈΠΊΠ΅ΡΡ
Private Sub ImportTickerData(ticker As String, ws As Worksheet, rowNum As Long)
Dim ddeChannel As Long
ddeChannel = DDEInitiate(QUIK_DDE_SERVICE, "QUOTES")
If ddeChannel > 0 Then
' ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
ws.Cells(rowNum, 1).Value = ticker
ws.Cells(rowNum, 2).Value = DDERequest(ddeChannel, ticker & "|LAST")
ws.Cells(rowNum, 3).Value = DDERequest(ddeChannel, ticker & "|BID")
ws.Cells(rowNum, 4).Value = DDERequest(ddeChannel, ticker & "|ASK")
ws.Cells(rowNum, 5).Value = DDERequest(ddeChannel, ticker & "|VOLUME")
DDETerminate ddeChannel
End If
End Sub
' Π‘ΠΏΠΈΡΠΎΠΊ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΡ
ΡΠΈΠΊΠ΅ΡΠΎΠ²
Private Function GetTickerList() As Variant
GetTickerList = Array("GAZP", "SBER", "LKOH", "GMKN", "ROSN", "NVTK", "TATN", "MTSS", "AFKS", "VTBR")
End Function' ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΎΡΠ³ΠΎΠ²ΡΠΉ ΡΠΎΠ±ΠΎΡ
Public Sub AutoTradingRobot()
Dim wsTrade As Worksheet
Set wsTrade = ThisWorkbook.Sheets("ΠΠ²ΡΠΎΡΠΎΡΠ³ΠΎΠ²Π»Ρ")
Dim wsQuotes As Worksheet
Set wsQuotes = ThisWorkbook.Sheets("ΠΠΎΡΠΈΡΠΎΠ²ΠΊΠΈ")
' ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡΠΈΠ΅ ΡΠ΅Π½Ρ
UpdateAllQuotes
' ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΈ ΡΠΎΡΠ³ΡΠ΅ΠΌ
Dim lastRow As Long
lastRow = wsTrade.Cells(wsTrade.Rows.Count, "A").End(xlUp).Row
Dim i As Long
For i = 2 To lastRow
ProcessTradingSignal wsTrade, i
Next i
End Sub
' ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΡΠ³ΠΎΠ²ΡΡ
ΡΠΈΠ³Π½Π°Π»ΠΎΠ²
Private Sub ProcessTradingSignal(ws As Worksheet, rowNum As Long)
Dim ticker As String
Dim strategy As String
Dim signal As String
ticker = ws.Cells(rowNum, 1).Value
strategy = ws.Cells(rowNum, 2).Value
signal = AnalyzeSignal(ticker, strategy)
If signal <> "HOLD" Then
' ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΠΎΡΠ³ΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ
ExecuteAutoTrade ticker, signal, ws.Cells(rowNum, 3).Value
ws.Cells(rowNum, 4).Value = signal
ws.Cells(rowNum, 5).Value = Now
End If
End Sub
' ΠΠ½Π°Π»ΠΈΠ· ΡΠΈΠ³Π½Π°Π»ΠΎΠ²
Private Function AnalyzeSignal(ticker As String, strategy As String) As String
Dim currentPrice As Double
Dim bidPrice As Double
Dim askPrice As Double
' ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡΠΈΠ΅ ΡΠ΅Π½Ρ
currentPrice = GetCurrentPrice(ticker)
bidPrice = GetBidPrice(ticker)
askPrice = GetAskPrice(ticker)
Select Case strategy
Case "MEAN_REVERSION"
AnalyzeSignal = MeanReversionSignal(ticker, currentPrice)
Case "BREAKOUT"
AnalyzeSignal = BreakoutSignal(ticker, currentPrice)
Case "ARBITRAGE"
AnalyzeSignal = ArbitrageSignal(ticker, bidPrice, askPrice)
Case Else
AnalyzeSignal = "HOLD"
End Select
End Function' ΠΠΌΠΏΠΎΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΠΎΡΡΡΠ΅Π»Ρ
Public Sub ImportPortfolio()
Dim wsPortfolio As Worksheet
Set wsPortfolio = ThisWorkbook.Sheets("ΠΠΎΡΡΡΠ΅Π»Ρ")
wsPortfolio.Cells.ClearContents
' ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ
wsPortfolio.Range("A1:E1").Value = Array("Π’ΠΈΠΊΠ΅Ρ", "ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ", "Π‘ΡΠ΅Π΄Π½ΡΡ", "Π’Π΅ΠΊΡΡΠ°Ρ", "P&L")
' ΠΠΌΠΏΠΎΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΉ ΡΠ΅ΡΠ΅Π· DDE
Dim ddeChannel As Long
ddeChannel = DDEInitiate(QUIK_DDE_SERVICE, "DEPO")
If ddeChannel > 0 Then
Dim i As Long: i = 2
Dim securities As Variant
securities = GetTickerList()
Dim ticker As Variant
For Each ticker In securities
ImportPosition ddeChannel, ticker, wsPortfolio, i
i = i + 1
Next ticker
DDETerminate ddeChannel
End If
End Sub
' ΠΠΌΠΏΠΎΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΏΠΎ ΡΠΈΠΊΠ΅ΡΡ
Private Sub ImportPosition(ddeChannel As Long, ticker As String, ws As Worksheet, rowNum As Long)
On Error Resume Next
ws.Cells(rowNum, 1).Value = ticker
ws.Cells(rowNum, 2).Value = DDERequest(ddeChannel, ticker & "|TOTAL_NET")
ws.Cells(rowNum, 3).Value = DDERequest(ddeChannel, ticker & "|AVG_PRICE")
ws.Cells(rowNum, 4).Value = DDERequest(ddeChannel, ticker & "|LAST")
' Π Π°ΡΡΠ΅Ρ P&L
If IsNumeric(ws.Cells(rowNum, 2).Value) And IsNumeric(ws.Cells(rowNum, 4).Value) Then
Dim pnl As Double
pnl = (ws.Cells(rowNum, 4).Value - ws.Cells(rowNum, 3).Value) * ws.Cells(rowNum, 2).Value
ws.Cells(rowNum, 5).Value = pnl
End If
End Sub' Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΡ ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°ΡΠ±ΠΈΡΡΠ°ΠΆΠ°
Public Sub StatisticalArbitrage()
Dim pair1 As String: pair1 = "GAZP"
Dim pair2 As String: pair2 = "LKOH"
Dim price1 As Double: price1 = GetCurrentPrice(pair1)
Dim price2 As Double: price2 = GetCurrentPrice(pair2)
Dim spread As Double: spread = price1 / price2
Dim meanSpread As Double: meanSpread = 0.85 ' ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΠ΅Π΄Π½Π΅Π΅
Dim stdDev As Double: stdDev = 0.05 ' ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅
If spread > meanSpread + 2 * stdDev Then
' GAZP ΠΏΠ΅ΡΠ΅ΠΊΡΠΏΠ»Π΅Π½ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ LKOH
ExecutePairTrade pair1, "SELL", pair2, "BUY", 10
ElseIf spread < meanSpread - 2 * stdDev Then
' GAZP ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ΄Π°Π½ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ LKOH
ExecutePairTrade pair1, "BUY", pair2, "SELL", 10
End If
End Sub
' ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ½ΠΎΠΉ ΡΠ΄Π΅Π»ΠΊΠΈ
Private Sub ExecutePairTrade(ticker1 As String, operation1 As String, _
ticker2 As String, operation2 As String, quantity As Long)
SendTransaction ticker1, operation1, quantity, 0
SendTransaction ticker2, operation2, quantity, 0
End Sub' ΠΠ°ΠΏΡΡΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ
Public Sub StartAutoUpdate()
Application.OnTime Now + TimeValue("00:00:05"), "UpdateTradingData"
End Sub
' ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ
Public Sub UpdateTradingData()
On Error GoTo ErrorHandler
' ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΊΠΎΡΠΈΡΠΎΠ²ΠΊΠΈ
ImportQuotesFromQUIK
' ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΠΎΡΡΡΠ΅Π»Ρ
ImportPortfolio
' ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π°Π²ΡΠΎΡΠΎΡΠ³ΠΎΠ²Π»Ρ Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Π°
If ThisWorkbook.Sheets("ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ").Range("B2").Value = "ΠΠ" Then
AutoTradingRobot
End If
' ΠΠ»Π°Π½ΠΈΡΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅
Application.OnTime Now + TimeValue("00:00:10"), "UpdateTradingData"
Exit Sub
ErrorHandler:
MsgBox "ΠΡΠΈΠ±ΠΊΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ: " & Err.Description
Application.OnTime Now + TimeValue("00:00:30"), "UpdateTradingData"
End Sub
' ΠΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ
Public Sub StopAutoUpdate()
On Error Resume Next
Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), _
Procedure:="UpdateTradingData", Schedule:=False
End SubπΒ ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ Π·Π°ΠΏΡΡΠΊΡ:ΠΡΠΊΡΠΎΠΉΡΠ΅ ExcelΒ ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅Β ALT + F11Β Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° VBA
ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΠΌΠΎΠ΄ΡΠ»ΡΒ ΠΈ Π²ΡΡΠ°Π²ΡΡΠ΅ ΠΊΠΎΠ΄ Π²ΡΡΠ΅
ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅Β ΠΊ QUIK Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Π½Π°ΡΡΡΠΎΠ΅ΠΊ
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΒ ConnectToQUIKΒ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
ΠΠ°ΡΠ½ΠΈΡΠ΅ ΡΠΎΡΠ³ΠΎΠ²Π»ΡΒ ΡΠ΅ΡΠ΅Π· Π»ΠΈΡΡ Β«Π’ΠΎΡΠ³ΠΎΠ²Π»ΡΒ»
β Β ΠΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΒ Π²ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ
β Β ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΒ ΡΡΡΠΈΠ½Π½ΡΡ Π·Π°Π΄Π°Ρ
β Β ΠΠΈΠ±ΠΊΠΎΡΡΡΒ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΉ ΡΠ΅ΡΠ΅Π· Excel ΡΠΎΡΠΌΡΠ»Ρ
β Β ΠΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Β Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Excel
β Β ΠΡΡΡΡΠΎΠ΅ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅Β ΡΠΎΡΠ³ΠΎΠ²ΡΡ ΠΈΠ΄Π΅ΠΉ
Π‘ΠΈΡΡΠ΅ΠΌΠ° Π³ΠΎΡΠΎΠ²Π° ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ! Π’Π΅ΡΡΠΈΡΡΠΉΡΠ΅ Π½Π° Π΄Π΅ΠΌΠΎ-ΡΡΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠ³ΠΎΠ²Π»Π΅ΠΉ.
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΠ°Π²ΠΈΡΡΡ ΠΊΠ°ΠΊ ΡΠΎ ΠΈΠ½Π°ΡΠ΅. ΠΠ°ΡΠ΅ΠΌ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ?Β ΠΠ±ΠΎ ΠΊΡΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π»Ρ ΡΠ΅Π³ΠΎ Π½Π΅ Π·Π°Π΄Π°Π΅Ρ Π²ΠΎΠΏΡΠΎΡΠΎΠ², Π° ΠΊΡΠΎ Π·Π°Π΄Π°Π΅Ρ ΡΠΎΠΌΡ ΠΈ Π½Π΅ Π·Π°ΡΠ΅ΠΌ!