Блог им. 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
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
475
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:
Фото
ММК отчитался лучше ожиданий: подтверждаем парную идею с доходностью 12%
Фото
Недолгая радость. Каким будет эффект от решений ЦБ для рынка и экономики
Пятничное решение Банка России не разочаровало инвесторов и даже ненадолго улучшило настроения на рынке. ЦБ снизил ставку на 0,25 п.п., до...
Фото
Нефть дает евро передышку, но геополитика удерживает доллар на плаву
Энергетический рынок завершает неделю коррекцией после стремительного ралли. Brent отступила от отметки выше $100 за баррель, а WTI потеряла...

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

....все тэги



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