Блог им. Bondiator

Вопрос по lua

Всем привет!

Вопрос к знатокам Lua.

Как правильно добавить сигналку (sig в коде ниже), чтобы ее значение учитывалось при отправке транзакций?
В текущем виде скрипт работать не хочет.


while stopped==false do

		sig=1 --значение по умолчанию
		
			if условие and sig==1 then
				sig=2 --после транзакции изменяется на 2
				отправка транзакции


			elseif условие and flag==2 then
				sig=1 --после транзакции меняется на исходную 1 
				отправка транзакции
			end
	end
457
11 комментариев
Разница с моим кодом в том, что отправку транзакции я вынес из тела логического перехода. Внутри if — end только формируются флаги (у Вас sig):

if continueTrend == 0 then

            if Bu == true then
                if oFlag == 1 then
                    Bu = false

                else
                    oFlag = 1
                end
            end
            if Se == true then
                if oFlag == 2 then
                    Se = false

                else
                    oFlag = 2
                end
            end

 end


Выполняемая задача: предотвратить повторные отправки ботом сигналов.
Bu — последний сигнал на покупку в общем массиве сигналов;
Se — последний сигнал на продажу в общем массиве сигналов.

Массив сигналов формируется при запуске скрипта  и постоянно дополняется новыми сигналами.
Если Вы знакомы со скриптом прогрммирования в AmiBroker, то поймете идею функции ExRem.
avatar
Eugene Bright, да, я знаком с этой функцией ExRem, но Ваш вариант как-то для моего уровня сложноват...
А если в верхней строке только убрать исходное значение, то такой вариант будет работать?
Врач-бондиатОр, в верхней строке Вашего кода или моего?

avatar
Eugene Bright, моего ). Как максимально просто заставить флаги работать?
Врач-бондиатОр, с флагами всегда возня… Можно легко заблудиться.
Здесь главное — не сокращать код, а писать его очень подробно. И не втискивать какие-то другие команды и операторы в тело обработки флагов.
Исходные значения лучше выносить за кусок кода обработки флага.

Кароч, кусок кода обработки флагов должен работать только с флагами. Все остальные команды, которые используют результат значения флага, нужно писать ВНЕ этого куска.
avatar
Может попробовать flag==2 заменить  на sig==2
avatar
Vkt, опечатка )
"sig=1 --значение по умолчанию" вынеси за цикл while, иначе у тебя sig всегда равно 1
avatar

Врач-бондиатОр, во-первых, как правильно заметил Cubigator,
«sig=1 --значение по умолчанию» надо вынести за цикл while.
Во-вторых, если транзакция в первом условии должна принимать sig=1, а транзакция во-втором условии должна принимать sig=2, то это и надо прописывать в условиях, кроме того, надо поменять местами операции присвоения и  отправки транзакций, если есть желание менять значение сигналки именно после транзакций.
Как-то так:

sig=1 --значение по умолчанию
     while stopped==false do
          if условие and sig==1 then
          отправка транзакции
          sig=2 --после транзакции изменяется на 2
          elseif условие and flag==2 and sig==2 then
          отправка транзакции
          sig=1 --после транзакции меняется на исходную 1
          end
     end

 

 

avatar

Читайте на SMART-LAB:
Фото
Итоги OsEngine 2025 года и планы на 2026. Новогодний выпуск
В этом видео подведём итоги работы над OsEngine в 2025 году и расскажем о том, что ждёт проект дальше. Сделано было многое, но мы пройдёмся по...
Фото
Облигации «Атомэнергопрома» стали еще интереснее
На фоне ограниченного выбора длинных выпусков на российском рынке новые облигации «Атомэнергопрома» закономерно становятся одними из самых...
Предварительные итоги года на рынке жилья и ипотеки
Аналитический центр ДОМ.РФ подводит предварительные итоги года. Объём продаж жилья по договорам долевого участия (ДДУ) в 2025 г. (в рамках...

теги блога Врач-бондиатОр

....все тэги



UPDONW
Новый дизайн