<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Закрывает 2 раза позицию, в итоге открывает]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Закрывает 2 раза позицию, в итоге открывает форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sun, 03 May 2026 11:32:19 +0300</pubDate>
		<item>
			<title>Закрывает 2 раза позицию, в итоге открывает</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message24978/topic2847/">Закрывает 2 раза позицию, в итоге открывает</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			ясно, не знал, в следующий раз исправлю <br />
			<i>31.05.2017 07:17:58, kvazar1988.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message24978/topic2847/</link>
			<guid>http://forum.quik.ru/messages/forum10/message24978/topic2847/</guid>
			<pubDate>Wed, 31 May 2017 07:17:58 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Закрывает 2 раза позицию, в итоге открывает</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message24975/topic2847/">Закрывает 2 раза позицию, в итоге открывает</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_G1rKVTWG" href="/user/4532/" bx-tooltip-user-id="4532">kvazar1988</a>, оформаляйте код и логи в спойлеры ( кнопка &#91;<B>SP</B>&#93; ). Невозможно смотреть на такие посты. <br />
			<i>31.05.2017 06:50:01, vgi.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message24975/topic2847/</link>
			<guid>http://forum.quik.ru/messages/forum10/message24975/topic2847/</guid>
			<pubDate>Wed, 31 May 2017 06:50:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Закрывает 2 раза позицию, в итоге открывает</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message24960/topic2847/">Закрывает 2 раза позицию, в итоге открывает</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			За такие посты надо сразу банить навечно! :( <br />
			<i>30.05.2017 15:21:59, Imersio Arrigo.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message24960/topic2847/</link>
			<guid>http://forum.quik.ru/messages/forum10/message24960/topic2847/</guid>
			<pubDate>Tue, 30 May 2017 15:21:59 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Закрывает 2 раза позицию, в итоге открывает</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message24959/topic2847/">Закрывает 2 раза позицию, в итоге открывает</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте еще раз. Разобрался со старыми ошибками скрипта, там не верно работал цикл фо. Теперь этот скрипт покупает хорошо, но возникла трудность с продажей. На демоквике хорошо работает, а в реальном первую заявку он считает не прошедшей и открывает еще одну. вот часть лога: ,0,30.05.2017,12:42:03,Робот: ОТКРЫЛ ПОЗИЦИЮ №1,,<br />1,0,30.05.2017,12:52:32,Простой MA-робот: В ПРОЦЕССЕ ЗАКРЫТИЯ,,<br />1,0,30.05.2017,12:52:32,Точка закрытия 1: 1,,<br />1,0,30.05.2017,12:52:32,Точка закрытия 3,,<br />1,0,30.05.2017,12:52:32,звкрытие Status 4303,,<br />1,0,30.05.2017,12:52:32,Робот: Транзакция не прошла! ОШИБКА: ,,<br />1,0,30.05.2017,12:52:32,Точка закрытия 1: 1,,<br />1,0,30.05.2017,12:52:32,Точка закрытия 3,,<br />1,0,30.05.2017,12:52:32,Заявка 26412225679 успешно зарегистрирована.,,<br />1,0,30.05.2017,12:52:33,Робот: trans_Status 3 trans_result_msg Заявка 26412225703 успешно зарегистрирована.,,<br />1,0,30.05.2017,12:52:33,Робот: trans_Status 4305 trans_result_msg ,,<br />А вот код, помогите пожалуйста понять почему первая заявка у него не верная<table class="data-table"><tr><td>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br />187<br />188<br />189<br />190<br />191<br />192<br />193<br />194<br />195<br />196<br />197<br />198<br />199<br />200<br />201<br />202<br />203<br />204<br />205<br />206<br />207<br />208<br />209<br />210<br />211<br />212<br />213<br />214<br />215<br />216<br />217<br />218<br />219<br />220<br />221<br />222<br />223<br />224<br />225<br />226<br />227<br />228<br />229<br />230<br />231<br />232<br />233<br />234<br />235<br />236<br />237<br />238<br />239<br />240<br />241<br />242<br />243<br />244<br />245<br />246<br />247<br />248<br />249<br />250<br />251<br />252<br />253<br />254<br />255<br />256<br />257<br />258<br />259<br />260<br />261<br />262<br />263<br />264<br />265<br />266<br />267<br />268<br />269<br />270<br />271<br />272<br />273<br />274<br />275<br />276<br />277<br />278<br />279<br />280<br />281<br />282<br />283<br />284<br />285<br />286<br />287<br />288<br />289<br />290<br />291<br />292<br />293<br />294<br />295<br />296<br />297<br />298<br />299<br />300<br />301<br />302<br />303<br />304<br />305<br />306<br />307<br />308<br />309<br />310<br />311<br />312<br />313<br />314<br />315<br />316<br />317<br />318<br />319<br />320<br />321<br />322<br />323<br />324<br />325<br />326<br />327<br />328<br />329<br />330<br />331<br />332<br />333<br />334<br />335<br />336<br />337<br />338<br />339<br />340<br />341<br />342<br />343<br />344<br />345<br />346<br />347<br />348<br />349<br />350<br />351<br />352<br />353<br />354<br />355<br />356<br />357<br />358<br />359<br />360<br />361<br />362<br />363<br />364<br />365<br />366<br />367<br />368<br />369<br />370<br />371<br />372<br />373<br />374<br />375<br />376<br />377<br />378<br />379<br />380<br />381<br />382<br />383<br />384<br />385<br />386<br />387<br />388<br />389<br />390<br />391<br />392<br />393<br />394<br />395<br />396<br />397<br />398<br />399<br />400<br />401<br />402<br />403<br />404<br />405<br />406<br />407<br />408<br />409<br />410<br />411<br />412<br />413<br />414<br />415<br />416<br />417<br />418</td><td> --[[<br />]]<br /> <br />--/*НАСТРАИВАЕМЫЕ ПАРАМЕТРЫ*/<br />--ACCOUNT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = 'NL0011100043'; &nbsp; &nbsp; &nbsp; -- Идентификатор счета<br />ACCOUNT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = 'SPBFUT0025E'; &nbsp; &nbsp; &nbsp; &nbsp;-- Идентификатор счета<br />--CLASS_CODE &nbsp; &nbsp; &nbsp; &nbsp;= 'QJSIM'; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Код класса<br />CLASS_CODE &nbsp; &nbsp; &nbsp; &nbsp;= 'SPBFUT'; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- Код класса<br />--SEC_CODE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= 'SBER'; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- Код бумаги<br />SEC_CODE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= 'SiM7'; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- Код бумаги<br />NPos=1 &nbsp; --размер открываемых позиций одной сделкой<br />NProsk=50 --проскальзывание<br />Price1=&quot;PRICE_SAR&quot; &nbsp;--ссылка на график цены<br />ParMed1=&quot;SAR_1&quot; &nbsp; &nbsp; --синий, ссылка на график медленного параболика<br />ParSr1=&quot;SAR_2&quot; &nbsp; &nbsp; &nbsp;--красный, ссылка на график среднего параболика<br />ParFiltr1=&quot;SAR_3&quot; &nbsp; --зеленый, ссылка на график фильтровочного параболика<br />ParFas1=&quot;SAR_4&quot; &nbsp; &nbsp; &nbsp;--желтый, ссылка на график быстрого параболика<br /> <br />INTERVAL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= INTERVAL_M1; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Таймфрейм графика (для построения скользящих)<br /> <br />--/*РАБОЧИЕ ПЕРЕМЕННЫЕ РОБОТА (менять не нужно)*/<br />SEC_PRICE_STEP &nbsp; &nbsp;= 0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- ШАГ ЦЕНЫ ИНСТРУМЕНТА<br />DS &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= nil; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Источник данных графика (DataSource)<br />ROBOT_STATE &nbsp; &nbsp; &nbsp; ='В ПОИСКЕ ТОЧКИ ВХОДА';-- СОСТОЯНИЕ робота ['В ПРОЦЕССЕ СДЕЛКИ', либо 'В ПОИСКЕ ТОЧКИ ВХОДА']<br />trans_id &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= os.time(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Задает начальный номер ID транзакций<br />trans_Status &nbsp; &nbsp; &nbsp;= nil; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Статус текущей транзакции из функции OnTransPeply<br />trans_result_msg &nbsp;= ''; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- Сообщение по текущей транзакции из функции OnTransPeply<br />CurrentDir ect &nbsp; &nbsp; = 'BUY'; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Текущее НАПРАВЛЕНИЕ ['BUY', или 'SELL']<br />LastOpenBarIndex &nbsp;= &nbsp;0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- Индекс свечи, на которой была открыта последняя позиция (нужен для того, чтобы после закрытия по стопу тут же не открыть еще одну позицию)<br />Run &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = true; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- Флаг поддержания работы бесконечного цикла в main<br />Napravlenie_Sdelki=false --направление открытия позиции &nbsp;,Napravlenie_Sdelki='ПОЗИЯ КУПЛЕНА, ОТКРЫТА' &nbsp; Napravlenie_Sdelki='ПОЗИЯ ПРОДАНА, ОТКРЫТА'<br /> <br /> <br /> <br /> <br />-- Функция первичной инициализации скрипта (ВЫЗЫВАЕТСЯ ТЕРМИНАЛОМ QUIK в самом начале)<br />function OnInit()<br /> &nbsp; -- Получает доступ к свечам графика<br /> &nbsp; local Error = '';<br /> &nbsp; DS,Error = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL);<br /> &nbsp; -- Проверка<br /> &nbsp; if DS == nil then<br /> &nbsp; &nbsp; &nbsp;message('Простой MA-робот:ОШИБКА получения доступа к свечам! '..Error);<br /> &nbsp; &nbsp; &nbsp;-- Завершает выполнение скрипта<br /> &nbsp; &nbsp; &nbsp;Run = false;<br /> &nbsp; &nbsp; &nbsp;return;<br /> &nbsp; end;<br /> <br /> &nbsp; -- Получает ШАГ ЦЕНЫ ИНСТРУМЕНТА<br /> &nbsp; SEC_PRICE_STEP = getParamEx(CLASS_CODE, SEC_CODE, &quot;SEC_PRICE_STEP&quot;).param_value;<br /> &nbsp; message('SEC_PRICE_STEP'..tostring(SEC_PRICE_STEP))<br /> &nbsp; &nbsp;--message(' Price = getParamEx(CLASS_CODE, SEC_CODE, offer).param_value'..tostring( getParamEx(CLASS_CODE, SEC_CODE, 'offer').param_value))<br />	--message(' Price = getParamEx(CLASS_CODE, SEC_CODE, bid).param_value'..tostring( getParamEx(CLASS_CODE, SEC_CODE, 'bid').param_value))<br /> <br />end;<br /> <br />function main()<br /> <br /> &nbsp; -- Выводит сообщение<br /> &nbsp; message('Простой MA-робот: '..ROBOT_STATE);<br /> &nbsp; -- &quot;Бесконечный&quot; цикл<br /> &nbsp; while Run do<br /> &nbsp; NumCandles1=getNumCandles(Price1)<br /> &nbsp; NumCandles2=getNumCandles(ParMed1)<br /> <br /> &nbsp; &nbsp; tPrice1,n1,s1 = getCandlesByIndex (Price1, 0, NumCandles1-2, 2) &nbsp; --считывает данные с графика цены<br /> &nbsp; &nbsp; tPrice2,n2,s2 = getCandlesByIndex (ParMed1, 0, NumCandles2-2, 2) &nbsp;--считывает данные с графика медленного параболика<br /> <br />	 &nbsp;---------------------------------------------------------------------------------------------------------------------------------------------------------------------<br />	 &nbsp;--механизм открытия позиции 1<br />	 &nbsp;---------------------------------------------------------------------------------------------------------------------------------------------------------------------<br />	 &nbsp;--Если СОСТОЯНИЕ робота &quot;В ПРОЦЕССЕ СДЕЛКИ&quot;<br /> &nbsp; &nbsp; &nbsp;if ROBOT_STATE == 'В ПРОЦЕССЕ СДЕЛКИ' then<br /> &nbsp; &nbsp; &nbsp; &nbsp; -- Выводит сообщение<br /> &nbsp; &nbsp; &nbsp; &nbsp; message('Робот: В ПРОЦЕССЕ СДЕЛКИ');<br /> &nbsp; &nbsp; &nbsp; &nbsp; -- Делает 10 попыток открыть сделку<br /> &nbsp; &nbsp; &nbsp; &nbsp; local Price = false; -- Переменная для получения результата открытия позиции (цена, либо ошибка(false))<br /> &nbsp; &nbsp; &nbsp; &nbsp; for i=1,10 do<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if not Run then return; end; -- Если скрипт останавливается, не затягивает процесс<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Совершает СДЕЛКУ указанного типа [&quot;BUY&quot;, или &quot;SELL&quot;] по рыночной(текущей) цене размером в 1 лот,<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--- возвращает цену открытой сделки, либо FALSE, если невозможно открыть сделку<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Price = Trade(CurrentDirect);<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Если сделка открылась<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if Price ~= false or ROBOT_STATE =='ОТКРЫЛ ПОЗИЦИЮ №1' &nbsp;then<br />			ROBOT_STATE = 'ОТКРЫЛ ПОЗИЦИЮ №1'<br />			LastOpenBarIndex = DS:Size();<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- Прерывает цикл FOR<br />			 &nbsp; i=20<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sleep(100); -- Пауза в 100 мс между попытками открыть сделку<br />			if i==10 and Price == false and &nbsp;ROBOT_STATE == 'В ПРОЦЕССЕ СДЕЛКИ' then &nbsp;ROBOT_STATE='В ПОИСКЕ ТОЧКИ ВХОДА' &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp; end;<br /> &nbsp; &nbsp; &nbsp; &nbsp; if not Run then return; end; -- Если скрипт останавливается, не затягивает процесс<br /> &nbsp; &nbsp; &nbsp; &nbsp; -- Если сделка открыта<br /> &nbsp; &nbsp; &nbsp; &nbsp; if Price ~= false then<br />		 ROBOT_STATE = 'ОТКРЫЛ ПОЗИЦИЮ №1'<br />		 message('Робот: ОТКРЫЛ ПОЗИЦИЮ №1');<br /> &nbsp; &nbsp; &nbsp; &nbsp;end;<br />---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br />--откоытие позиции 1<br />---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br /> &nbsp; &nbsp; &nbsp;else<br /> &nbsp; &nbsp; &nbsp; &nbsp; -- СОСТОЯНИЕ робота 'В ПОИСКЕ ТОЧКИ ВХОДА'<br /> &nbsp; &nbsp; &nbsp; &nbsp; -- Если на этой свече еще не было открыто позиций<br /> &nbsp; &nbsp; &nbsp; &nbsp; if DS:Size() &amp;gt; LastOpenBarIndex then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Если быстрая пересекла медленную СНИЗУ ВВЕРХ<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- if FastMA(DS:Size()-1) &nbsp;SlowMA() then<br />		 &nbsp; if crossOverMed() and ROBOT_STATE == 'В ПОИСКЕ ТОЧКИ ВХОДА' and ParFiltrOver() or crossOverFiltr() and ROBOT_STATE == 'В ПОИСКЕ ТОЧКИ ВХОДА' and &nbsp;ParFiltSar1Over() then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- Задает направление НА ПОКУПКУ<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CurrentDirect = 'BUY';<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; message('CurrentDirect = &quot;BUY&quot;');<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- Меняет СОСТОЯНИЕ робота на &quot;В ПРОЦЕССЕ СДЕЛКИ&quot;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ROBOT_STATE = 'В ПРОЦЕССЕ СДЕЛКИ';<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Если быстрая пересекла медленную СВЕРХУ ВНИЗ<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;elseif &nbsp; crossUnderMed() and ROBOT_STATE == 'В ПОИСКЕ ТОЧКИ ВХОДА' and ParFiltrUnder() &nbsp;or crossUnderFiltr() and ROBOT_STATE == 'В ПОИСКЕ ТОЧКИ ВХОДА' and &nbsp;ParFiltrSar1Under() then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- Если по данному инструменту не запрещены операции шорт<br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Задает направление НА ПРОДАЖУ<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CurrentDirect = 'SELL';<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;message('CurrentDirect = &quot;SELL&quot;');<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Меняет СОСТОЯНИЕ робота на &quot;В ПРОЦЕССЕ СДЕЛКИ&quot;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ROBOT_STATE = 'В ПРОЦЕССЕ СДЕЛКИ';<br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;<br /> &nbsp; &nbsp; &nbsp; &nbsp; end;<br /> &nbsp; &nbsp; &nbsp;end;<br /> <br />	 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br />	 --закрытие позиции 1<br /> &nbsp; &nbsp; -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br /> &nbsp; &nbsp; if ROBOT_STATE == 'ОТКРЫЛ ПОЗИЦИЮ №1' and Napravlenie_Sdelki=='ПОЗИЯ КУПЛЕНА, ОТКРЫТА' and crossUnderMed() or ROBOT_STATE == 'ОТКРЫЛ ПОЗИЦИЮ №1' and Napravlenie_Sdelki=='ПОЗИЯ ПРОДАНА, ОТКРЫТА' and crossOverMed() then<br /> &nbsp; &nbsp; &nbsp; &nbsp; -- Выводит сообщение<br /> &nbsp; &nbsp; &nbsp; &nbsp; message('Робот: В ПРОЦЕССЕ ЗАКРЫТИЯ');<br />		 ROBOT_STATE = 'В ПРОЦЕССЕ ЗАКРЫТИЯ'<br /> &nbsp; &nbsp; &nbsp; &nbsp; -- Делает 10 попыток закрыть сделку<br /> &nbsp; &nbsp; &nbsp; &nbsp; local PriceZak = false; -- Переменная для получения результата открытия позиции (цена, либо ошибка(false))<br /> &nbsp; &nbsp; &nbsp; &nbsp; for i=1,10 do<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if not Run then return; end; -- Если скрипт останавливается, не затягивает процесс<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if Napravlenie_Sdelki=='ПОЗИЯ КУПЛЕНА, ОТКРЫТА' then &nbsp;CurrentDirectZak='SELLzak' elseif Napravlenie_Sdelki=='ПОЗИЯ ПРОДАНА, ОТКРЫТА' then CurrentDirectZak='BUYzak' end<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Совершает СДЕЛКУ указанного типа [&quot;BUY&quot;, или &quot;SELL&quot;] по рыночной(текущей) цене размером в 1 лот,<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--- возвращает цену открытой сделки, либо FALSE, если невозможно открыть сделку<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PriceZak = TradeZak(CurrentDirectZak);<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Если сделка открылась<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if getItem (&quot;FUTURES_CLIENT_HOLDING&quot;,0).totalnet==0 or ROBOT_STATE == 'В ПОИСКЕ ТОЧКИ ВХОДА' then<br />			i=20<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- Прерывает цикл FOR<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sleep(100); -- Пауза в 100 мс между попытками открыть сделку<br />			if i==10 and Price == false and &nbsp;ROBOT_STATE == 'В ПРОЦЕССЕ ЗАКРЫТИЯ' then &nbsp;ROBOT_STATE='ОТКРЫЛ ПОЗИЦИЮ №1' end<br /> &nbsp; &nbsp; &nbsp; &nbsp; end;<br /> &nbsp; &nbsp; &nbsp; &nbsp; if not Run then return; end; -- Если скрипт останавливается, не затягивает процесс<br /> &nbsp; &nbsp; &nbsp; &nbsp; -- Если сделка закрыта<br /> &nbsp; &nbsp; &nbsp; &nbsp; if PriceZak~= false and getItem (&quot;FUTURES_CLIENT_HOLDING&quot;,0).totalnet==0 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Запоминает индекс свечи, на которой была открыта последняя позиция (нужен для того, чтобы после закрытия по стопу тут же не открыть еще одну позицию)<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- LastOpenBarIndex = DS:Size();<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Выводит сообщение<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;message('Робот: Закрыта сделка '..tostring(CurrentDirectZak)..' по цене '..tostring(PriceZak));<br />			ROBOT_STATE = 'В ПОИСКЕ ТОЧКИ ВХОДА';<br /> &nbsp; &nbsp; &nbsp; &nbsp; end<br />	 &nbsp;end<br /> <br />	 -----------------------------------------------------------------------------------------------------------------------<br /> <br /> <br /> <br /> <br /> <br />------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br /> &nbsp; &nbsp; &nbsp;sleep(1);--Пауза 10 мс, для того, чтобы не перегружать процессор компьютера<br /> &nbsp; end;<br />end;<br /> <br />-- Функция вызывается терминалом QUIK при получении ответа на транзакцию пользователя<br />function OnTransReply(trans_reply)<br /> &nbsp; -- Если поступила информация по текущей транзакции<br /> &nbsp; if trans_reply.trans_id == trans_id then<br /> &nbsp; &nbsp; &nbsp;-- Передает статус в глобальную переменную<br /> &nbsp; &nbsp; &nbsp;trans_Status = trans_reply.status;<br /> &nbsp; &nbsp; &nbsp;-- Передает сообщение в глобальную переменную<br /> &nbsp; &nbsp; &nbsp;trans_result_msg &nbsp;= trans_reply.result_msg;<br />	 &nbsp;message('Робот: trans_Status '..tostring(trans_Status)..' trans_result_msg '..tostring(trans_result_msg));<br /> &nbsp; end;<br />end;<br /> <br />-- Функция ВЫЗЫВАЕТСЯ ТЕРМИНАЛОМ QUIK при остановке скрипта<br />function OnStop()<br /> &nbsp; Run = false;<br />end;<br /> <br />-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br />-- ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ --<br />-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br /> <br />-- Совершает СДЕЛКУ указанного типа (Type) [&quot;BUY&quot;, или &quot;SELL&quot;] по рыночной(текущей) цене размером в 1 лот,<br />--- возвращает цену открытой сделки, либо FALSE, если невозможно открыть сделку<br />function Trade(Type)<br /> &nbsp; --Получает ID транзакции<br /> &nbsp; trans_id = trans_id + 1;<br /> <br /> &nbsp; local Price = 0;<br /> &nbsp; local Operation = '';<br /> &nbsp; --Устанавливает цену и операцию, в зависимости от типа сделки и от класса инструмента<br /> &nbsp; if Type == 'BUY' then<br /> &nbsp; &nbsp; &nbsp;if CLASS_CODE ~= 'QJSIM' and CLASS_CODE ~= 'TQBR' then Price = getParamEx(CLASS_CODE, SEC_CODE, 'offer').param_value + NProsk*SEC_PRICE_STEP;end; -- по цене, завышенной на 10 мин. шагов цены<br /> &nbsp; &nbsp; &nbsp;Operation = 'B';<br /> &nbsp; else<br /> &nbsp; &nbsp; &nbsp;if CLASS_CODE ~= 'QJSIM' and CLASS_CODE ~= 'TQBR' then Price = getParamEx(CLASS_CODE, SEC_CODE, 'bid').param_value - NProsk*SEC_PRICE_STEP;end; -- по цене, заниженной на 10 мин. шагов цены<br /> &nbsp; &nbsp; &nbsp;Operation = 'S';<br /> &nbsp; end;<br /> &nbsp; -- Заполняет структуру для отправки транзакции<br /> &nbsp; &nbsp; message(' Price = getParamEx(CLASS_CODE, SEC_CODE, offer).param_value'..tostring( getParamEx(CLASS_CODE, SEC_CODE, 'offer').param_value))<br /> &nbsp; &nbsp; message(' Price = getParamEx(CLASS_CODE, SEC_CODE, bid).param_value'..tostring( getParamEx(CLASS_CODE, SEC_CODE, 'bid').param_value))<br /> <br /> &nbsp; local Transaction={<br /> &nbsp; &nbsp; &nbsp;['TRANS_ID']   = tostring(trans_id),<br /> &nbsp; &nbsp; &nbsp;['ACTION']     = 'NEW_ORDER',<br /> &nbsp; &nbsp; &nbsp;['CLASSCODE']  = CLASS_CODE,<br /> &nbsp; &nbsp; &nbsp;['SECCODE']    = SEC_CODE,<br /> &nbsp; &nbsp; &nbsp;['OPERATION']  = Operation, -- операция (&quot;B&quot; - buy, или &quot;S&quot; - sell)<br /> &nbsp; &nbsp; &nbsp;['TYPE']       = 'M', -- по рынку (MARKET)<br /> &nbsp; &nbsp; &nbsp;['QUANTITY']   = tostring(NPos), -- количество<br /> &nbsp; &nbsp; &nbsp;['ACCOUNT']    = ACCOUNT,<br /> &nbsp; &nbsp; &nbsp;['PRICE']      = tostring(Price),<br /> &nbsp; &nbsp; &nbsp;['COMMENT']    = 'Простой MA-робот'<br /> &nbsp; }<br /> &nbsp; -- Отправляет транзакцию<br /> &nbsp; sendTransaction(Transaction);<br /> &nbsp; &nbsp;-- &nbsp;OnTransReply()--пробую так исправить<br /> &nbsp; -- Ждет, пока получит статус текущей транзакции (переменные &quot;trans_Status&quot; и &quot;trans_result_msg&quot; заполняются в функции OnTransReply())<br /> &nbsp; while Run and trans_Status == nil do sleep(1);--[[ message('Робот1,1: trans_Status: '..tostring(trans_Status)..'trans_result_msg'..tostring(trans_result_msg));]]  end;<br /> &nbsp; -- message('Робот: trans_Status: '..tostring(trans_Status))<br /> &nbsp; -- Запоминает значение<br /> &nbsp; local Status = trans_Status;<br /> &nbsp; -- Очищает глобальную переменную<br /> &nbsp; trans_Status = nil;<br /> &nbsp; -- Если транзакция не выполнена по какой-то причине<br /> &nbsp; --message('Робот1,2: trans_Status: '..tostring(trans_Status)..'trans_result_msg'..tostring(trans_result_msg));<br /> &nbsp; message('Робот1,2: Status: '..tostring(Status)..'trans_result_msg'..tostring(trans_result_msg));<br /> &nbsp; if Status ~= 3 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; -- Выводит сообщение с ошибкой<br /> &nbsp; &nbsp; &nbsp; &nbsp; message('Робот: Транзакция не прошла!\nОШИБКА: '..tostring(trans_result_msg));<br /> <br /> &nbsp; &nbsp; &nbsp;-- Возвращает FALSE<br /> &nbsp; &nbsp; &nbsp;return false;<br /> &nbsp; else --Транзакция отправлена<br /> &nbsp; &nbsp; &nbsp;local OrderNum = nil;<br /> &nbsp; &nbsp; &nbsp;--ЖДЕТ пока ЗАЯВКА на ОТКРЫТИЕ сделки будет ИСПОЛНЕНА полностью<br />	 &nbsp;message('ЖДЕТ пока ЗАЯВКА на ОТКРЫТИЕ сделки будет ИСПОЛНЕНА полностью');<br /> &nbsp; &nbsp; &nbsp;--Запоминает время начала в секундах<br /> &nbsp; &nbsp; &nbsp;local BeginTime = os.time();<br /> &nbsp; &nbsp; &nbsp;while Run and OrderNum == nil do<br /> &nbsp; &nbsp; &nbsp; &nbsp; --Перебирает ТАБЛИЦУ ЗАЯВОК<br /> &nbsp; &nbsp; &nbsp; &nbsp; for i=getNumberOf('orders')-1, 0, -1 do<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;local order = getItem('orders', i);<br />			--message('Робот1,3:order: '..tostring(order) );<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--Если заявка по отправленной транзакции ИСПОЛНЕНА ПОЛНОСТЬЮ<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if order.trans_id == trans_id and order.balance == 0 then<br />			message('Робот1,4:trans_id: '..tostring(trans_id)..'order.balance '.. tostring(order.balance));<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --Запоминает номер заявки<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OrderNum &nbsp;= order.order_num;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --Прерывает цикл FOR<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;<br /> &nbsp; &nbsp; &nbsp; &nbsp; end;<br /> &nbsp; &nbsp; &nbsp; &nbsp; --Если прошло 10 секунд, а заявка не исполнена, значит произошла ошибка<br /> &nbsp; &nbsp; &nbsp; --[[  if os.time() - BeginTime &amp;gt; 9 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Выводит сообщение с ошибкой<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;message('Робот: Прошло 10 секунд, а заявка не исполнена, значит произошла ошибка');<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Возвращает FALSE<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return false;<br /> &nbsp; &nbsp; &nbsp; &nbsp; end;]]<br /> &nbsp; &nbsp; &nbsp; &nbsp; sleep(10); -- Пауза 10 мс, чтобы не перегружать процессор компьютера<br /> &nbsp; &nbsp; &nbsp;end;<br /> <br /> &nbsp; &nbsp; &nbsp;--ЖДЕТ пока СДЕЛКА ОТКРЫТИЯ позиции будет СОВЕРШЕНА<br /> &nbsp; &nbsp; &nbsp;--Запоминает время начала в секундах<br /> &nbsp; &nbsp; &nbsp;BeginTime = os.time();<br /> &nbsp; &nbsp; &nbsp;while Run do<br /> &nbsp; &nbsp; &nbsp; &nbsp; --Перебирает ТАБЛИЦУ СДЕЛОК<br /> &nbsp; &nbsp; &nbsp; &nbsp; for i=0,getNumberOf('trades')-1 do<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;local trade = getItem('trades', i);<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--Если сделка по текущей заявке<br />			--message('Робот1,5:trade: '..tostring(trade) );<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if trade.order_num == OrderNum then<br />			message('Робот1,6:trade.order_num: '..tostring(trade.order_num) );<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --Возвращает фАКТИЧЕСКУЮ ЦЕНУ открытой сделки<br />			 &nbsp; if Type == 'BUY' then Napravlenie_Sdelki='ПОЗИЯ КУПЛЕНА, ОТКРЫТА' elseif Type == 'SELL' then Napravlenie_Sdelki='ПОЗИЯ ПРОДАНА, ОТКРЫТА' end &nbsp;-- флаг направления позиции<br />			 --message('открыта ли позиция роботом '..OnTransReply(status))<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; message('Робот1,7:trade.order_num: '..tostring(trade.price) );<br />			 &nbsp; return trade.price;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;<br /> &nbsp; &nbsp; &nbsp; &nbsp; end;<br /> &nbsp; &nbsp; &nbsp; &nbsp; --Если прошло 10 секунд, а сделка не совершена, значит на демо-счете произошла ошибка<br /> &nbsp; &nbsp; &nbsp; --[[  if os.time() - BeginTime &amp;gt; 9 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Выводит сообщение с ошибкой<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;message('Робот: Прошло 10 секунд, а сделка не совершена, значит на демо-счете произошла ошибка');<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Возвращает FALSE<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return false;<br /> &nbsp; &nbsp; &nbsp; &nbsp; end;]]<br /> &nbsp; &nbsp; &nbsp; &nbsp; sleep(10); -- Пауза 10 мс, чтобы не перегружать процессор компьютера<br /> &nbsp; &nbsp; &nbsp;end;<br /> &nbsp; end;<br />end;<br /> <br />--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br />--закрытие позиции<br />--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br /> <br />-- Совершает СДЕЛКУ указанного типа (Type) [&quot;BUY&quot;, или &quot;SELL&quot;] по рыночной(текущей) цене размером в 1 лот,<br />--- возвращает цену открытой сделки, либо FALSE, если невозможно открыть сделку<br />function TradeZak(TypeZak)<br /> &nbsp; --Получает ID транзакции<br /> &nbsp; trans_id = trans_id + 1;<br /> &nbsp; message('Точка закрытия 1: '..tostring(getItem(&quot;FUTURES_CLIENT_HOLDING&quot;,0).totalnet)) --then ROBOT_STATE = 'В ПОИСКЕ ТОЧКИ ВХОДА'; &nbsp;message('Точка закрытия 1') else<br /> &nbsp; if getItem(&quot;FUTURES_CLIENT_HOLDING&quot;,0).totalnet==0 then<br /> &nbsp; ROBOT_STATE = 'В ПОИСКЕ ТОЧКИ ВХОДА'; &nbsp;message('Точка закрытия 2') else<br /> &nbsp; message('Точка закрытия 3')<br /> &nbsp; local Price = 0;<br /> &nbsp; local Operation = '';<br /> &nbsp; --Устанавливает цену и операцию, в зависимости от типа сделки и от класса инструмента<br /> &nbsp; if getItem(&quot;FUTURES_CLIENT_HOLDING&quot;,0).totalnet0 &nbsp;then TypeZak ='SELLzak' end<br /> &nbsp; if TypeZak == 'BUYzak' then<br /> &nbsp; &nbsp; &nbsp;if CLASS_CODE ~= 'QJSIM' and CLASS_CODE ~= 'TQBR' then Price = getParamEx(CLASS_CODE, SEC_CODE, 'offer').param_value + NProsk*SEC_PRICE_STEP;end; -- по цене, завышенной на 10 мин. шагов цены<br /> &nbsp; &nbsp; &nbsp;Operation = 'B';<br /> &nbsp; else<br /> &nbsp; &nbsp; &nbsp;if CLASS_CODE ~= 'QJSIM' and CLASS_CODE ~= 'TQBR' then Price = getParamEx(CLASS_CODE, SEC_CODE, 'bid').param_value - NProsk*SEC_PRICE_STEP;end; -- по цене, заниженной на 10 мин. шагов цены<br /> &nbsp; &nbsp; &nbsp;Operation = 'S';<br /> &nbsp; end;<br /> &nbsp; -- Заполняет структуру для отправки транзакции<br /> &nbsp; local Transaction={<br /> &nbsp; &nbsp; &nbsp;['TRANS_ID']   = tostring(trans_id),<br /> &nbsp; &nbsp; &nbsp;['ACTION']     = 'NEW_ORDER',<br /> &nbsp; &nbsp; &nbsp;['CLASSCODE']  = CLASS_CODE,<br /> &nbsp; &nbsp; &nbsp;['SECCODE']    = SEC_CODE,<br /> &nbsp; &nbsp; &nbsp;['OPERATION']  = Operation, -- операция (&quot;B&quot; - buy, или &quot;S&quot; - sell)<br /> &nbsp; &nbsp; &nbsp;['TYPE']       = 'M', -- по рынку (MARKET)<br /> &nbsp; &nbsp; &nbsp;['QUANTITY']   = tostring(math.abs(getItem(&quot;FUTURES_CLIENT_HOLDING&quot;,0).totalnet)), -- количество<br /> &nbsp; &nbsp; &nbsp;['ACCOUNT']    = ACCOUNT,<br /> &nbsp; &nbsp; &nbsp;['PRICE']      = tostring(Price),<br /> &nbsp; &nbsp; &nbsp;['COMMENT']    = 'Простой MA-робот'<br /> &nbsp; }<br /> &nbsp; -- Отправляет транзакцию<br /> &nbsp; sendTransaction(Transaction);<br /> &nbsp; -- Ждет, пока получит статус текущей транзакции (переменные &quot;trans_Status&quot; и &quot;trans_result_msg&quot; заполняются в функции OnTransReply())<br /> &nbsp; while Run and trans_Status == nil do sleep(1); end;<br /> <br /> &nbsp; -- Запоминает значение<br /> &nbsp; local Status = trans_Status;<br /> &nbsp; -- Очищает глобальную переменную<br /> &nbsp; trans_Status = nil;<br /> &nbsp; message('звкрытие Status '..tostring(Status))<br /> &nbsp; -- Если транзакция не выполнена по какой-то причине<br /> &nbsp; if Status ~= 3 then<br /> &nbsp; &nbsp; &nbsp;-- Если данный инструмент запрещен для операции шорт<br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; -- Выводит сообщение с ошибкой<br /> &nbsp; &nbsp; &nbsp; &nbsp; message('Робот: Транзакция не прошла!\nОШИБКА: '..tostring(trans_result_msg));<br /> <br /> <br /> &nbsp; &nbsp; &nbsp;-- Возвращает FALSE<br /> &nbsp; &nbsp; &nbsp;return false;<br /> &nbsp; else --Транзакция отправлена<br /> &nbsp; &nbsp; &nbsp;local OrderNum = nil;<br /> &nbsp; &nbsp; &nbsp;--ЖДЕТ пока ЗАЯВКА на ОТКРЫТИЕ сделки будет ИСПОЛНЕНА полностью<br /> &nbsp; &nbsp; &nbsp;--Запоминает время начала в секундах<br /> &nbsp; &nbsp; &nbsp;local BeginTime = os.time();<br /> &nbsp; &nbsp; &nbsp;while Run and OrderNum == nil do<br /> &nbsp; &nbsp; &nbsp; &nbsp; --Перебирает ТАБЛИЦУ ЗАЯВОК<br /> &nbsp; &nbsp; &nbsp; &nbsp; for i=getNumberOf('orders')-1, 0, -1 do<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;local order = getItem('orders', i);<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--Если заявка по отправленной транзакции ИСПОЛНЕНА ПОЛНОСТЬЮ<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if order.trans_id == trans_id and order.balance == 0 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --Запоминает номер заявки<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OrderNum &nbsp;= order.order_num;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --Прерывает цикл FOR<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;<br /> &nbsp; &nbsp; &nbsp; &nbsp; end;<br /> &nbsp; &nbsp; &nbsp; &nbsp; --Если прошло 10 секунд, а заявка не исполнена, значит произошла ошибка<br /> &nbsp; &nbsp; &nbsp; --[[  if os.time() - BeginTime &amp;gt; 9 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Выводит сообщение с ошибкой<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;message('Робот: Прошло 10 секунд, а заявка не исполнена, значит произошла ошибка');<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Возвращает FALSE<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return false;<br /> &nbsp; &nbsp; &nbsp; &nbsp; end;]]<br /> &nbsp; &nbsp; &nbsp; &nbsp; sleep(10); -- Пауза 10 мс, чтобы не перегружать процессор компьютера<br /> &nbsp; &nbsp; &nbsp;end;<br /> <br /> &nbsp; &nbsp; &nbsp;--ЖДЕТ пока СДЕЛКА ОТКРЫТИЯ позиции будет СОВЕРШЕНА<br /> &nbsp; &nbsp; &nbsp;--Запоминает время начала в секундах<br /> &nbsp; &nbsp; &nbsp;BeginTime = os.time();<br /> &nbsp; &nbsp; &nbsp;while Run do<br /> &nbsp; &nbsp; &nbsp; &nbsp; --Перебирает ТАБЛИЦУ СДЕЛОК<br /> &nbsp; &nbsp; &nbsp; &nbsp; for i=0,getNumberOf('trades')-1 do<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;local tradeZak = getItem('trades', i);<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--Если сделка по текущей заявке<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if tradeZak.order_num == OrderNum --[[and  getItem (&quot;FUTURES_CLIENT_HOLDING&quot;,0).totalnet==0 ]]	then<br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --Возвращает фАКТИЧЕСКУЮ ЦЕНУ открытой сделки<br />			 &nbsp; --if Type == 'BUY' then Napravlenie_Sdelki='ПОЗИЯ КУПЛЕНА, ОТКРЫТА' elseif Type == 'SELL' then Napravlenie_Sdelki='ПОЗИЯ ПРОДАНА, ОТКРЫТА' end &nbsp;-- флаг направления позиции<br />				ROBOT_STATE = 'В ПОИСКЕ ТОЧКИ ВХОДА';<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return tradeZak.price;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;<br /> &nbsp; &nbsp; &nbsp; &nbsp; end;<br /> &nbsp; &nbsp; &nbsp; &nbsp; --Если прошло 10 секунд, а сделка не совершена, значит на демо-счете произошла ошибка<br /> &nbsp; &nbsp; &nbsp; --[[  if os.time() - BeginTime &amp;gt; 9 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Выводит сообщение с ошибкой<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;message('Робот: Прошло 10 секунд, а сделка не совершена, значит на демо-счете произошла ошибка');<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Возвращает FALSE<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return false;<br /> &nbsp; &nbsp; &nbsp; &nbsp; end;]]<br /> &nbsp; &nbsp; &nbsp; &nbsp; sleep(10); -- Пауза 10 мс, чтобы не перегружать процессор компьютера<br /> &nbsp; &nbsp; &nbsp;end;<br /> &nbsp; end;<br />end;<br />end</td></tr></table> <br />
			<i>30.05.2017 15:20:47, kvazar1988.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message24959/topic2847/</link>
			<guid>http://forum.quik.ru/messages/forum10/message24959/topic2847/</guid>
			<pubDate>Tue, 30 May 2017 15:20:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
