Что нового

Скрипт для торговли в хабах

modnik

Знающий
Сообщения
138
Репутация
13
уже реализовано, в программе ЕВЕ трейдер.
 

asa12

Новичок
Сообщения
66
Репутация
3
У меня всё как всегда, Не как у людей. Распознавание в еве нет никаких проблем, а вот настроить логику и оформить в языке программирования, мля вот проблема.
А у всех я смотрю наоборот.
--------
Короче написал майнера. Стало чет сккучно - пока он ещё до халка прокачается. Решил побарыжить на триале. Просто интересная логическая задача.
 

Akenil

Новичок
Сообщения
9
Репутация
0
Для начала надо определиться чтио собственно и как будет делать торговый бот:

- он тупо снижает цену на 0.1 иск , при появлении более дешевого товара?
- он ищет дешевый товар на одной станци и скупщика на другой и перевозит тоар?
- он покупает дешевле, а продает дороже на станциии где находится?

Т.е. какая логика действия нужна, и что требуется от бот-торговца?

Мое имхо - все неудачи с торг ботом имееннно из-за непонимания сути требования к нему.


Добавлено:
Сообщение автоматически объединено:

Jonik Silver сказал(а):
Сам когда-то начинал делать торгового бота, но дело надежно встало когда началось воплощение в металле.
На самом деле все просто. Работаем с маркетом по своим ордерам через вкладку My Orders. ......можно пользовать "родную" SQLite. Файл импортируется сам ...... Дальше делаем анализ на предмет стоит ли изменять свой ордер, если стоит меняем. Можно еще мониторить рынок через вкладку search ithem.....

А не проще в игре мониторить строку с твоим товаром через search ithem и как только товар опускается на вторую строчку - снижать цену на 0.1 иск ниже цены товара строчкой выше?

И не надо никакой логики и навороченной программы, все описывается легче намного, при решении через эесель . :smile:
 

asa12

Новичок
Сообщения
66
Репутация
3
Akenil сказал(а):
- он тупо снижает цену на 0.1 иск ,
Не, это сделал. Но слишком простая стратегия и не интересно.
Мой вариант логики: ручками собираем 10-20 товаров нам интересных. Запихиваем данные по товарам в базу. Делаем анализ на основе трейдера (покупаем? и по какой цене), и на какой позиции начинаем продавать.
Результат: вложил 2 000 кк в товары на покупку, на предположении что вырастут. Прошла неделя - стоят 2700, уже продал на 1350 кк. Результат 20-30% в 2 недели - ещё надо допродать.
Итог - рынок евы маленький, анализируется легко. Девы его контролируют, резкие скачки не допускают +-30% (три позиции скупили не допустили роста цены(+300% к объему торгов). Сверх прибыль невозможна. Времени требуется много, на подбор товаров.
Ихмо, на производстве заработок постояннее, майнер вообще халява, но маленькая.
Торговый бот + хаулер нужен, для производника.
 

Trunk

Новичок
Сообщения
10
Репутация
0
Belfigor сказал(а):
Тебе не Ф1 в данном случае читать надо а нашу функцию TrimColor использовать которую Арчибальд выкладывал.
91.gif



Добавлено:
Сообщение автоматически объединено:

Код:
Func TrimColor($TargetTrim)
	#cs TrimarkColor - Comment Start
		Исползуется для получения из цвета в формате RGB значение яркости пикселя. Возвращает значение от 0 до 255.
		Скорость:
		Функция выполняется за ~0.06-0.10 мс.
	#ce TrimColor - Comment End
	Dim $a, $as, $as1, $as2, $a_fin
	$a = Hex($TargetTrim, 6)
	$a_fin = (Dec(StringTrimRight($a, 4)) + Dec(StringTrimLeft(StringTrimRight($a, 2), 2)) + Dec(StringTrimLeft($a, 4)))/3
	$TargetTrim = Round($a_fin, 0)
	Return $TargetTrim
EndFunc




Это последний вариант функции?
$as, $as1, $as2 - явно тут лишние
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Незнаю, поищи на форуме лежит так же функция CheckPixel или как-то так называется.
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Я тоже не помню, убирал ли те лишние переменные или оставил...
http://autoit-script.ru/index.php?topic=62.0
Убирал, да...
 

Jonik Silver

Знающий
Сообщения
19
Репутация
11
Немного вернулся к теме своего трейд-бота и воплотил некоторые мысли в металл.
Данные маркета и ордеров заносятся в базу данных, опираясь на которую мы делаем анализ и изменяем ордера причем в таблице для данных маркета их желательно сохранять, а таблицу для ордеров можно и очищать. Не мудрствуя лукаво возьмем SQLite родную для АвтоИта. Так же может потребоваться браузер для баз SQLite.
Код:
Func InitDatabase()
_SQLite_Startup ()
_SQLite_Open ("Market.db")
EndFunc
Func CloseDatabase()
_SQLite_Close()
_SQLite_Shutdown()
EndFunc

Func CreateEmptyDatabase()
;Создание набора таблиц
InitDatabase()
_SQLite_Exec (-1, "CREATE TABLE MarketOrders (price NUM, volRemaining NUM, typeID NUM, range NUM, orderID NUM, volEntered NUM, minVolume NUM ,bid NUM, issued TEXT, duration NUM, stationID NUM, regionID NUM, solarSystemID NUM, TimeStamp TEXT);")
_SQLite_Exec (-1, "CREATE TABLE Ithems (typeID NUM, Title TEXT);")
_SQLite_Exec (-1, "CREATE TABLE Regions (regionID NUM, Title TEXT);")
_SQLite_Exec (-1, "CREATE TABLE SolarSystems (solarSystemID NUM, Title TEXT, CC NUM);")
_SQLite_Exec (-1, "CREATE TABLE Stations (stationID NUM, Title TEXT);")
_SQLite_Exec (-1, "CREATE TABLE MyOrders (orderID NUM, typeID NUM, charID NUM, charName TEXT, regionID NUM, regionName TEXT, stationID NUM, stationName TEXT, range NUM, bid NUM, price NUM, volEntered NUM, volRemaining NUM, issued TEXT, orderState NUM, minVolume NUM, contraband TEXT, accountID NUM, duration NUM, isCorp NUM, solarSystemID NUM, solarSystemName TEXT, escrow NUM, TimeStamp TEXT);")
_SQLite_Exec (-1, "CREATE TABLE Stock (typeID NUM, MaxBuy NUM, MinSell NUM, range NUM);")
CloseDatabase()
EndFunc

Func ClearTableDatabase($TableName)
;зачистка выбранной таблицы от данных
InitDatabase()
_SQLite_Exec (-1, "DELETE FROM " & $TableName & ";")
CloseDatabase()
EndFunc

С помощью приведенных функций мы можем открыть нашу базу данных, которая должна находиться в одной директории со скриптом, впрочем путь можно установить при желании любой. Если по указанному пути базы не будет найдено, то будет создана пустая база. Которую можно заполнить структурой таблиц. Так же есть функции для очистки таблиц и закрытия открытой базы.

Теперь, когда у нас имеется готовое хранилище, сделаем загрузку данных в него.
Код:
Dim $MARKETLOGS = @MyDocumentsDir & "\EVE\logs\Marketlogs"
Func GetMyOrders($ImportFile) 
;в качестве параметра передается имя файла который будем обрабатывать
Local $File, $i, $n, $line, $check, $temp, $Captions, $Data, $FieldCount, $TimeStamp
If StringLeft($ImportFile, 9) = "My orders" Then 
	$File = FileOpen($MARKETLOGS & "\" & $ImportFile)
	;Возьмем из имени файла время когда были импортированы ордера----------
	$i = StringLen($ImportFile)-19
	$n  = StringLen($ImportFile)-4
	$temp = StringMid($ImportFile, $i+1, $n-$i)
	$TimeStamp = StringLeft($temp, 4) & "-" & StringMid($temp, 6, 2) & "-" &  StringMid($temp, 9, 2) & " " & StringMid($temp, 12, 2) & ":" & StringRight($temp, 2)
	;----------------------------------------------------------------------
	$i=0
	$n=0
	$check=0
	While 1
		$i = $i + 1
		$line = FileReadLine($File, $i)	;считываем строку из файла
		If @error = -1 Then ExitLoop
		If $i = 1 Then
			;проверка наличия необходимых заголовков в файле----------
			If Not (StringRegExp($line, "orderID", 0) And StringRegExp($line, "typeID", 0) And StringRegExp($line, "charID", 0) And StringRegExp($line, "charName", 0) And StringRegExp($line, "regionID", 0) And StringRegExp($line, "regionName", 0) And StringRegExp($line, "stationID", 0) And StringRegExp($line, "stationName", 0) And StringRegExp($line, "range", 0) And StringRegExp($line, "bid", 0) And StringRegExp($line, "price", 0) And StringRegExp($line, "volEntered", 0) And StringRegExp($line, "volRemaining", 0) And StringRegExp($line, "issued", 0) And StringRegExp($line, "orderState", 0) And StringRegExp($line, "minVolume", 0) And StringRegExp($line, "contraband", 0) And StringRegExp($line, "accountID", 0) And StringRegExp($line, "duration", 0) And StringRegExp($line, "isCorp", 0) And StringRegExp($line, "solarSystemID", 0) And StringRegExp($line, "solarSystemName", 0) And StringRegExp($line, "escrow", 0)) Then ExitLoop
			;---------------------------------------------------------
			$Captions = StringRegExp($line, '(.*?),', 3)
			;контроль количества полей---------------------------
			$FieldCount = UBound($Captions)
			If Not $FieldCount = 23 Then ExitLoop
			;----------------------------------------------------
			;очистка таблицы ордеров перед новым заполнением			
			ClearTableDatabase("MyOrders")
			$temp = ""
		EndIf
		If $i>1 Then
			$Data = StringRegExp($line, '(.*?),', 3)
			If UBound($Data) = $FieldCount Then 
				If $temp = "" Then $temp = "INSERT INTO MyOrders(orderID, typeID, charID, charName, regionID, regionName, stationID, stationName, range, bid, price, volEntered, volRemaining, issued, orderState, minVolume, contraband, accountID, duration, isCorp, solarSystemID, solarSystemName, escrow, TimeStamp) VALUES (" & "'" & $Data[0] & "'"
				For $n = 0 To $FieldCount-1
					;создаем строку для занесения данных в базу
					If StringInStr("typeID,charID,charName,regionID,regionName,stationID,stationName,range,bid,price,volEntered,volRemaining,issued,orderState,minVolume,contraband,accountID,duration,isCorp,solarSystemID,solarSystemName,escrow", $Captions[$n]) Then $temp = $temp & ", '" & $Data[$n] & "'"
				Next
				;завершаем строку
				$temp = $temp &  ", '" & $TimeStamp & "');"	
				;выполняем запрос на добавление данных
				InitDatabase()
				_SQLite_Exec (-1, $temp)
				CloseDatabase()
				$temp = ""
			EndIf
		EndIf
	$check=1
	Wend
	FileClose($File)
EndIf
EndFunc

Эта функция очищает таблицу ордеров в нашей базе данных, хотя можно и не очищать, если требуется анализ изменения ордеров ботом, и загружает данные из файла экспорта ордеров из ЕВЫ, файлы эти имеют названия вроде My orders-2010.11.03 0941.txt. Аналогичным образом построена функция для загрузки данных маркета, которые мы опять же импортируем из ЕВЫ, эти файлы имеют названия вроде The Forge-Deflection Shield Emitter-2011.02.03 034356.txt.

И да еще, требуется объявление:
#include <SQLite.au3>
#include <SQLite.dll.au3>
 
Верх