Текущий профит "Опцион"

Автор записи: АндрейАВ

СнимокСкрипт показывает текущий профит Вашей опционной позиции. Запишите свои позиции в код скрипта или в файл состояния - profit. Данный файл сформируется (если включить, а потом выключить скрипт) в той же директории где лежит скрипт.

Текст скрипта QLua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
-- Текущий профит
Class_Fut   = "SPBFUT"; -- Класс фьючерса
Sec_Fut     = "SRZ5";   -- Код фьючерса
Class_Opt   = "SPBOPT"; -- Класс опциона
Step_Strike = 250;      -- Шаг страйка
Commission  = 2.25;     -- Комиссия (биржа + брокер за 1-у торговую операцию по 1-му лоту)
 
-- Call
Sec_C1    = ""; -- Код опциона в 1 позиции
Sec_C2    = ""; -- Код опциона в 2 позиции
Sec_C3    = ""; -- Код опциона в 3 позиции
Sec_C4    = ""; -- Код опциона в 4 позиции
Volume_C1 = 0;  -- Объем 1 позиции
Volume_C2 = 0;  -- Объем 2 позиции
Volume_C3 = 0;  -- Объем 3 позиции
Volume_C4 = 0;  -- Объем 4 позиции
Open_C1   = 0;  -- Цена открытия 1 позиции
Open_C2   = 0;  -- Цена открытия 2 позиции
Open_C3   = 0;  -- Цена открытия 3 позиции
Open_C4   = 0;  -- Цена открытия 4 позиции
 
-- Put
Sec_P1    = ""; -- Код опциона в 1 позиции
Sec_P2    = ""; -- Код опциона в 2 позиции
Sec_P3    = ""; -- Код опциона в 3 позиции
Sec_P4    = ""; -- Код опциона в 4 позиции
Volume_P1 = 1;  -- Объем 1 позиции
Volume_P2 = 1;  -- Объем 2 позиции
Volume_P3 = 0;  -- Объем 3 позиции
Volume_P4 = 0;  -- Объем 4 позиции
Open_P1   = 0;  -- Цена открытия 1 позиции
Open_P2   = 0;  -- Цена открытия 2 позиции
Open_P3   = 0;  -- Цена открытия 3 позиции
Open_P4   = 0;  -- Цена открытия 4 позиции
 
-- Константы для строк таблицы
Call     = 1;  -- Наименование "Call" и текущая цена фьючерса (bid)
Call_1   = 2;  -- Позиция 1 (код опциона, объем, цена, профит)
Call_2   = 3;  -- Позиция 2 (код опциона, объем, цена, профит)
Call_3   = 4;  -- Позиция 3 (код опциона, объем, цена, профит)
Call_4   = 5;  -- Позиция 4 (код опциона, объем, цена, профит)
Itogo_C  = 6;  -- Текущий профит Call
        -- 7;  -- Пустая строка
Put      = 8;  -- Наименование "Put"
Put_1    = 9;  -- Позиция 1 (код опциона, объем, цена, профит)
Put_2    = 10; -- Позиция 2 (код опциона, объем, цена, профит)
Put_3    = 11; -- Позиция 3 (код опциона, объем, цена, профит)
Put_4    = 12; -- Позиция 4 (код опциона, объем, цена, профит)
Itogo_P  = 13; -- Текущий профит Put
        -- 14; -- Пустая строка
Itogo_CP = 15; -- Текущий профит Call + Put
 
IsRun = true; -- Флаг поддержания работы скрипта
 
function OnInit() -- Функция вызывается терминалом QUIK перед вызовом функции main()
   local f = io.open(getScriptPath().."//profit.txt","r+"); -- Пытается открыть файл состояния в режиме "чтения/записи"
   if f ~= nil then -- Если файл существует, перебирает строки файла, считывает содержимое в соответствующие переменные
      local Count = 0; -- Счетчик строк
      for line in f:lines() do
         Count = Count + 1;
         if     Count == 1  then Sec_C1    = line;           -- Код опциона в 1 позиции
         elseif Count == 2  then Sec_C2    = line;           -- Код опциона в 2 позиции
         elseif Count == 3  then Sec_C3    = line;           -- Код опциона в 3 позиции
         elseif Count == 4  then Sec_C4    = line;           -- Код опциона в 4 позиции
         elseif Count == 5  then Volume_C1 = tonumber(line); -- Объем 1 позиции
         elseif Count == 6  then Volume_C2 = tonumber(line); -- Объем 2 позиции
         elseif Count == 7  then Volume_C3 = tonumber(line); -- Объем 3 позиции
         elseif Count == 8  then Volume_C4 = tonumber(line); -- Объем 4 позиции
         elseif Count == 9  then Open_C1   = tonumber(line); -- Цена открытия 1 позиции
         elseif Count == 10 then Open_C2   = tonumber(line); -- Цена открытия 2 позиции
         elseif Count == 11 then Open_C3   = tonumber(line); -- Цена открытия 3 позиции
         elseif Count == 12 then Open_C4   = tonumber(line); -- Цена открытия 4 позиции
         elseif Count == 13 then Sec_P1    = line;           -- Код опциона в 1 позиции
         elseif Count == 14 then Sec_P2    = line;           -- Код опциона в 2 позиции
         elseif Count == 15 then Sec_P3    = line;           -- Код опциона в 3 позиции
         elseif Count == 16 then Sec_P4    = line;           -- Код опциона в 4 позиции
         elseif Count == 17 then Volume_P1 = tonumber(line); -- Объем 1 позиции
         elseif Count == 18 then Volume_P2 = tonumber(line); -- Объем 2 позиции
         elseif Count == 19 then Volume_P3 = tonumber(line); -- Объем 3 позиции
         elseif Count == 20 then Volume_P4 = tonumber(line); -- Объем 4 позиции
         elseif Count == 21 then Open_P1   = tonumber(line); -- Цена открытия 1 позиции
         elseif Count == 22 then Open_P2   = tonumber(line); -- Цена открытия 2 позиции
         elseif Count == 23 then Open_P3   = tonumber(line); -- Цена открытия 3 позиции
         elseif Count == 24 then Open_P4   = tonumber(line); -- Цена открытия 4 позиции
         end;
      end;
      f:close(); -- Закрывает файл
   end;
 
   CreateTable(); -- Создает таблицу
end;
 
function main() -- Функция, реализующая основной поток выполнения в скрипте
   while IsRun do -- Цикл будет выполнятся, пока IsRun == true
      Price = tonumber(getParamEx(Class_Fut, Sec_Fut, "bid").param_value); -- Текущая цена фьючерса
      SetCell(t_id, Call, 2, tostring(Price)); -- Выводит "Текущая цена фьючерса" в таблицу
      sleep(100);
   end;
end;
 
function CreateTable() -- Функция создает таблицу
   t_id = AllocTable(); -- Получает доступный id для создания
   -- Добавляет колонки
   AddColumn(t_id, 0, "Инструмент", true, QTABLE_STRING_TYPE, 15);
   AddColumn(t_id, 1, "Позиция", true, QTABLE_INT_TYPE, 15);
   AddColumn(t_id, 2, "Цена", true, QTABLE_INT_TYPE, 15);
   AddColumn(t_id, 3, "Профит", true, QTABLE_INT_TYPE, 15);
   t = CreateWindow(t_id); -- Создает таблицу
   SetWindowCaption(t_id, "Текущий профит"); -- Устанавливает заголовок
   SetWindowPos(t_id, 600, 0, 355, 310); -- Задает положение и размеры окна таблицы
   -- Добавляет строки
   InsertRow(t_id, Call);
   InsertRow(t_id, Call_1);
   InsertRow(t_id, Call_2);
   InsertRow(t_id, Call_3);
   InsertRow(t_id, Call_4);
   InsertRow(t_id, Itogo_C);
   InsertRow(t_id, 7);        -- Пустая строка
   InsertRow(t_id, Put);
   InsertRow(t_id, Put_1);
   InsertRow(t_id, Put_2);
   InsertRow(t_id, Put_3);
   InsertRow(t_id, Put_4);
   InsertRow(t_id, Itogo_P);
   InsertRow(t_id, 14);       -- Пустая строка
   InsertRow(t_id, Itogo_CP);
   -- Добавляет значения в ячейки
   SetCell(t_id, Call, 0, "Call"); Green(Call, 0);
   SetCell(t_id, Call_1, 0, Sec_C1); SetCell(t_id, Call_1, 1, tostring(Volume_C1)); SetCell(t_id, Call_1, 2, tostring(Open_C1)); SetCell(t_id, Call_1, 3, tostring(0));
   SetCell(t_id, Call_2, 0, Sec_C2); SetCell(t_id, Call_2, 1, tostring(Volume_C2)); SetCell(t_id, Call_2, 2, tostring(Open_C2)); SetCell(t_id, Call_2, 3, tostring(0));
   SetCell(t_id, Call_3, 0, Sec_C3); SetCell(t_id, Call_3, 1, tostring(Volume_C3)); SetCell(t_id, Call_3, 2, tostring(Open_C3)); SetCell(t_id, Call_3, 3, tostring(0));
   SetCell(t_id, Call_4, 0, Sec_C4); SetCell(t_id, Call_4, 1, tostring(Volume_C4)); SetCell(t_id, Call_4, 2, tostring(Open_C4)); SetCell(t_id, Call_4, 3, tostring(0));
   SetCell(t_id, Itogo_C, 0, "Итого Call"); SetCell(t_id, Itogo_C, 3, tostring(0));
   SetCell(t_id, Put, 0, "Put"); Red(Put, 0);
   SetCell(t_id, Put_1, 0, Sec_P1); SetCell(t_id, Put_1, 1, tostring(Volume_P1)); SetCell(t_id, Put_1, 2, tostring(Open_P1)); SetCell(t_id, Put_1, 3, tostring(0));
   SetCell(t_id, Put_2, 0, Sec_P2); SetCell(t_id, Put_2, 1, tostring(Volume_P2)); SetCell(t_id, Put_2, 2, tostring(Open_P2)); SetCell(t_id, Put_2, 3, tostring(0));
   SetCell(t_id, Put_3, 0, Sec_P3); SetCell(t_id, Put_3, 1, tostring(Volume_P3)); SetCell(t_id, Put_3, 2, tostring(Open_P3)); SetCell(t_id, Put_3, 3, tostring(0));
   SetCell(t_id, Put_4, 0, Sec_P4); SetCell(t_id, Put_4, 1, tostring(Volume_P4)); SetCell(t_id, Put_4, 2, tostring(Open_P4)); SetCell(t_id, Put_4, 3, tostring(0));
   SetCell(t_id, Itogo_P, 0, "Итого Put"); SetCell(t_id, Itogo_P, 3, tostring(0));
   SetCell(t_id, Itogo_CP, 0, "Итого C+P"); SetCell(t_id, Itogo_CP, 3, tostring(0));
end;
 
-- Функции по раскраске строк/ячеек таблицы
function Green(Line, Col) -- Зеленый
   if Col == nil then Col = QTABLE_NO_INDEX; end; -- Если индекс столбца не указан, окрашивает всю строку
   SetColor(t_id, Line, Col, RGB(165,227,128), RGB(0,0,0), RGB(165,227,128), RGB(0,0,0));
end;
function Gray(Line, Col) -- Серый
   if Col == nil then Col = QTABLE_NO_INDEX; end;
   SetColor(t_id, Line, Col, RGB(200,200,200), RGB(0,0,0), RGB(200,200,200), RGB(0,0,0));
end;
function Red(Line, Col) -- Красный
   if Col == nil then Col = QTABLE_NO_INDEX; end;
   SetColor(t_id, Line, Col, RGB(255,168,164), RGB(0,0,0), RGB(255,168,164), RGB(0,0,0));
end;
 
function OnParam(class, sec) -- Функция вызывается терминалом QUIK при изменении текущих параметров
   if class == Class_Opt then -- Если скрипт в позиции по опционам и изменение пришло по этому опциону
      if sec == Sec_C1 then
         if Volume_C1 > 0 then
            local Bid = tonumber(getParamEx(Class_Opt, Sec_C1, "bid").param_value); -- Получает текущий bid по опциону
            local Profit = (Bid - Open_C1) * math.abs(Volume_C1) - Commission * 2 * math.abs(Volume_C1); -- Считает текущий профит по опционной позиции
            SetCell(t_id, Call_1, 3, tostring(Profit)); -- Выводит значение в таблицу
            if Profit > 0 then Green(Call_1); elseif Profit == 0 then Gray(Call_1); else Red(Call_1); end; -- Окрашивает строку в зависимости от профита
         end;
         if Volume_C1 < 0 then
            local Offer = tonumber(getParamEx(Class_Opt, Sec_C1, "offer").param_value); -- Получает текущий offer по опциону
            local Profit = (Open_C1 - Offer) * math.abs(Volume_C1) - Commission * 2 * math.abs(Volume_C1); -- Считает текущий профит по опционной позиции
            SetCell(t_id, Call_1, 3, tostring(Profit)); -- Выводит значение в таблицу
            if Profit > 0 then Green(Call_1); elseif Profit == 0 then Gray(Call_1); else Red(Call_1); end; -- Окрашивает строку в зависимости от профита
         end;
      end;
      if sec == Sec_C2 then
         if Volume_C2 > 0 then
            local Bid = tonumber(getParamEx(Class_Opt, Sec_C2, "bid").param_value);
            local Profit = (Bid - Open_C2) * math.abs(Volume_C2) - Commission * 2 * math.abs(Volume_C2);
            SetCell(t_id, Call_2, 3, tostring(Profit));
            if Profit > 0 then Green(Call_2); elseif Profit == 0 then Gray(Call_2); else Red(Call_2); end;
         end;
      if Volume_C2 < 0 then
            local Offer = tonumber(getParamEx(Class_Opt, Sec_C2, "offer").param_value);
            local Profit = (Open_C2 - Offer) * math.abs(Volume_C2) - Commission * 2 * math.abs(Volume_C2);
            SetCell(t_id, Call_2, 3, tostring(Profit));
            if Profit > 0 then Green(Call_2); elseif Profit == 0 then Gray(Call_2); else Red(Call_2); end;
         end;
      end;
      if sec == Sec_C3 then
         if Volume_C3 > 0 then
            local Bid = tonumber(getParamEx(Class_Opt, Sec_C3, "bid").param_value);
            local Profit = (Bid - Open_C3) * math.abs(Volume_C3) - Commission * 2 * math.abs(Volume_C3);
            SetCell(t_id, Call_3, 3, tostring(Profit));
            if Profit > 0 then Green(Call_3); elseif Profit == 0 then Gray(Call_3); else Red(Call_3); end;
         end;
         if Volume_C3 < 0 then
            local Offer = tonumber(getParamEx(Class_Opt, Sec_C3, "offer").param_value);
            local Profit = (Open_C3 - Offer) * math.abs(Volume_C3) - Commission * 2 * math.abs(Volume_C3);
            SetCell(t_id, Call_3, 3, tostring(Profit));
            if Profit > 0 then Green(Call_3); elseif Profit == 0 then Gray(Call_3); else Red(Call_3); end;
         end;
      end;
      if sec == Sec_C4 then
         if Volume_C4 > 0 then
            local Bid = tonumber(getParamEx(Class_Opt, Sec_C4, "bid").param_value);
            local Profit = (Bid - Open_C4) * math.abs(Volume_C4) - Commission * 2 * math.abs(Volume_C4);
            SetCell(t_id, Call_4, 3, tostring(Profit));
            if Profit > 0 then Green(Call_4); elseif Profit == 0 then Gray(Call_4); else Red(Call_4); end;
         end;
         if Volume_C4 < 0 then
            local Offer = tonumber(getParamEx(Class_Opt, Sec_C4, "offer").param_value);
            local Profit = (Open_C4 - Offer) * math.abs(Volume_C4) - Commission * 2 * math.abs(Volume_C4);
            SetCell(t_id, Call_4, 3, tostring(Profit));
            if Profit > 0 then Green(Call_4); elseif Profit == 0 then Gray(Call_4); else Red(Call_4); end;
         end;
      end;
      local ProfitCall = tonumber(GetCell(t_id, Call_1, 3).image) + tonumber(GetCell(t_id, Call_2, 3).image) + tonumber(GetCell(t_id, Call_3, 3).image) + tonumber(GetCell(t_id, Call_4, 3).image); -- Общий текущий профит Call
      SetCell(t_id, Itogo_C, 3, tostring(ProfitCall));
      if ProfitCall > 0 then Green(Itogo_C); elseif ProfitCall == 0 then Gray(Itogo_C); else Red(Itogo_C); end;
 
      if sec == Sec_P1 then
         if Volume_P1 > 0 then
            local Bid = tonumber(getParamEx(Class_Opt, Sec_P1, "bid").param_value);
            local Profit = (Bid - Open_P1) * math.abs(Volume_P1) - Commission * 2 * math.abs(Volume_P1);
            SetCell(t_id, Put_1, 3, tostring(Profit));
            if Profit > 0 then Green(Put_1); elseif Profit == 0 then Gray(Put_1); else Red(Put_1); end;
         end;
         if Volume_P1 < 0 then
            local Offer = tonumber(getParamEx(Class_Opt, Sec_P1, "offer").param_value);
            local Profit = (Open_P1 - Offer) * math.abs(Volume_P1) - Commission * 2 * math.abs(Volume_P1);
            SetCell(t_id, Put_1, 3, tostring(Profit));
            if Profit > 0 then Green(Put_1); elseif Profit == 0 then Gray(Put_1); else Red(Put_1); end;
         end;
      end;
      if sec == Sec_P2 then
         if Volume_P2 > 0 then
            local Bid = tonumber(getParamEx(Class_Opt, Sec_P2, "bid").param_value);
            local Profit = (Bid - Open_P2) * math.abs(Volume_P2) - Commission * 2 * math.abs(Volume_P2);
            SetCell(t_id, Put_2, 3, tostring(Profit));
            if Profit > 0 then Green(Put_2); elseif Profit == 0 then Gray(Put_2); else Red(Put_2); end;
         end;
         if Volume_P2 < 0 then
            local Offer = tonumber(getParamEx(Class_Opt, Sec_P2, "offer").param_value);
            local Profit = (Open_P2 - Offer) * math.abs(Volume_P2) - Commission * 2 * math.abs(Volume_P2);
            SetCell(t_id, Put_2, 3, tostring(Profit));
            if Profit > 0 then Green(Put_2); elseif Profit == 0 then Gray(Put_2); else Red(Put_2); end;
         end;
      end;
      if sec == Sec_P3 then
         if Volume_P3 > 0 then
            local Bid = tonumber(getParamEx(Class_Opt, Sec_P3, "bid").param_value);
            local Profit = (Bid - Open_P3) * math.abs(Volume_P3) - Commission * 2 * math.abs(Volume_P3);
            SetCell(t_id, Put_3, 3, tostring(Profit));
            if Profit > 0 then Green(Put_3); elseif Profit == 0 then Gray(Put_3); else Red(Put_3); end;
         end;
         if Volume_P3 < 0 then
            local Offer = tonumber(getParamEx(Class_Opt, Sec_P3, "offer").param_value);
            local Profit = (Open_P3 - Offer) * math.abs(Volume_P3) - Commission * 2 * math.abs(Volume_P3);
            SetCell(t_id, Put_3, 3, tostring(Profit));
            if Profit > 0 then Green(Put_3); elseif Profit == 0 then Gray(Put_3); else Red(Put_3); end;
         end;
      end;
      if sec == Sec_P4 then
         if Volume_P4 > 0 then
            local Bid = tonumber(getParamEx(Class_Opt, Sec_P4, "bid").param_value);
            local Profit = (Bid - Open_P4) * math.abs(Volume_P4) - Commission * 2 * math.abs(Volume_P4);
            SetCell(t_id, Put_4, 3, tostring(Profit));
            if Profit > 0 then Green(Put_4); elseif Profit == 0 then Gray(Put_4); else Red(Put_4); end;
         end;
         if Volume_P4 < 0 then
            local Offer = tonumber(getParamEx(Class_Opt, Sec_P4, "offer").param_value);
            local Profit = (Open_P4 - Offer) * math.abs(Volume_P4) - Commission * 2 * math.abs(Volume_P4);
            SetCell(t_id, Put_4, 3, tostring(Profit));
            if Profit > 0 then Green(Put_4); elseif Profit == 0 then Gray(Put_4); else Red(Put_4); end;
         end;
      end;
      local ProfitPut = tonumber(GetCell(t_id, Put_1, 3).image) + tonumber(GetCell(t_id, Put_2, 3).image) + tonumber(GetCell(t_id, Put_3, 3).image) + tonumber(GetCell(t_id, Put_4, 3).image); -- Общий текущий профит Put
      SetCell(t_id, Itogo_P, 3, tostring(ProfitPut));
      if ProfitPut > 0 then Green(Itogo_P); elseif ProfitPut == 0 then Gray(Itogo_P); else Red(Itogo_P); end;
 
      local ProfitCP = tonumber(GetCell(t_id, Itogo_C, 3).image) + tonumber(GetCell(t_id, Itogo_P, 3).image); -- Общий текущий профит Call + Put
      SetCell(t_id, Itogo_CP, 3, tostring(ProfitCP));
      if ProfitCP > 0 then Green(Itogo_CP); elseif ProfitCP == 0 then Gray(Itogo_CP); else Red(Itogo_CP); end;
   end;
end;
 
function OnStop() -- Функция вызывается терминалом QUIK при остановке скрипта из диалога управления
   -- Сохранение текущего состояния в файл
   local f = io.open(getScriptPath().."//profit.txt","r+"); -- Пытается открыть файл в режиме "чтения/записи"
   if f == nil then -- Если файл не существует
      f = io.open(getScriptPath().."//profit.txt","w"); -- Создает файл в режиме "записи"
      f:close(); -- Закрывает файл
      f = io.open(getScriptPath().."//profit.txt","r+"); -- Открывает уже существующий файл в режиме "чтения/записи"
   end;
   -- Записывает в файл текущие состояния (каждое значение в новой строке)
   f:write(Sec_C1.."\n");                -- Код опциона в 1 позиции
   f:write(Sec_C2.."\n");                -- Код опциона в 2 позиции
   f:write(Sec_C3.."\n");                -- Код опциона в 3 позиции
   f:write(Sec_C4.."\n");              -- Код опциона в 4 позиции
   f:write(tostring(Volume_C1).."\n"); -- Объем 1 позиции
   f:write(tostring(Volume_C2).."\n"); -- Объем 2 позиции
   f:write(tostring(Volume_C3).."\n"); -- Объем 3 позиции
   f:write(tostring(Volume_C4).."\n"); -- Объем 4 позиции
   f:write(tostring(Open_C1).."\n");   -- Цена открытия 1 позиции
   f:write(tostring(Open_C2).."\n");   -- Цена открытия 2 позиции
   f:write(tostring(Open_C3).."\n");   -- Цена открытия 3 позиции
   f:write(tostring(Open_C4).."\n");   -- Цена открытия 4 позиции
   f:write(Sec_P1.."\n");                -- Код опциона в 1 позиции
   f:write(Sec_P2.."\n");                -- Код опциона в 2 позиции
   f:write(Sec_P3.."\n");                -- Код опциона в 3 позиции
   f:write(Sec_P4.."\n");              -- Код опциона в 4 позиции
   f:write(tostring(Volume_P1).."\n"); -- Объем 1 позиции
   f:write(tostring(Volume_P2).."\n"); -- Объем 2 позиции
   f:write(tostring(Volume_P3).."\n"); -- Объем 3 позиции
   f:write(tostring(Volume_P4).."\n"); -- Объем 4 позиции
   f:write(tostring(Open_P1).."\n");   -- Цена открытия 1 позиции
   f:write(tostring(Open_P2).."\n");   -- Цена открытия 2 позиции
   f:write(tostring(Open_P3).."\n");   -- Цена открытия 3 позиции
   f:write(tostring(Open_P4).."\n");   -- Цена открытия 4 позиции
   f:flush();                          -- Сохраняет изменения в файле
   f:close();                          -- Закрывает файл
 
   IsRun = false;
end;

Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!