Jump to content
Serzh Black

HRMonitor автоматическое переключение майнеров при понижении hashrate или при повышении прибыльности, инструмент для сбора статистики по монетам или алгоритмам и просто органайзер батников

Recommended Posts

@Riva а пришлите мне свой конфиг

Share this post


Link to post
Share on other sites

исправления и добавления в 0.69:

 

по нажатию [C]

1. профит в USD показывается даже если программа считает его в юанях

2. отображается количество монет в день

3. отображается количество блоков в день (для соло)

 

вообще из программы получается еще и не плохой онлайн калькулятор профита (сам не похвалишь, никто не похвалит ))))). Онлайн не в том смысле, что надо заполнить форму на сайте и получить одноразовую чушь, а в том плане, что данные оперативно подтягиваются из надежных источников и прогноз обновляется раз в минуту.

 

Edited by Serzh Black

Share this post


Link to post
Share on other sites

TradeSatoshi API постоянно отваливается, помогите правильно написать регулярное выражение под coinmarketcap

 

Пробовал так

 

        my $coinrate = &GetContentFromURL("https://api.coinmarketcap.com/v1/ticker/bitcoin-private/?convert=BTC");
        $CStat{$c}{rate} = $1 if $coinrate =~ /\{"id": "bitcoin-private",.+?"price_btc": "(\d+\.\d+)"\}/;

 

и так

 

        my $coinrate = &GetContentFromURL("https://api.coinmarketcap.com/v1/ticker/bitcoin-private/");

        $CStat{$c}{rate} = $1 if $coinrate =~ /"price_btc": "(\d+\.\d+)"/;

 

Всё равно ошибка


 

 

 

 

Share this post


Link to post
Share on other sites

вот это вариант точно работает

$CStat{$c}{rate} = $1 if $coinrate =~ /"price_btc": "(\d+\.\d+)"/;

Share this post


Link to post
Share on other sites
1 час назад, Serzh Black сказал:

вот это вариант точно работает

$CStat{$c}{rate} = $1 if $coinrate =~ /"price_btc": "(\d+\.\d+)"/;

 

Кидаю конфиг в личку, а то беда вообще

 

image.thumb.png.f180a10772f5b36e686443da90acc2f6.png

Share this post


Link to post
Share on other sites

а блокревард и блоктайм для btcp вы где берете? если нигде и не задаете вручную, то как же оно посчитается?

смотрите еще раз пример для ravencoin.

а курс с биржи берется правильно.

Share this post


Link to post
Share on other sites

для расчетов профита в битках всего навсего нужно: блоктайм, блокревард, хэшрейт и курс.

 

чтобы проверить достаточно ли данных и какие данные скормлены программе можно на этапе отладки добавить в eval монет(ы) в самом конце такую строчку: print " - $c: $CStat{$c}{hr} - $CStat{$c}{br} - $CStat{$c}{bt} - $CStat{$c}{rate}\n";

 

    eval     => '
        $CStat{$c}{hr} =~ s/,//g;
        $CStat{$c}{algo} = "Equihash";
        $CStat{$c}{hr} = $CStat{$c}{hr}*1000;
        my $coinrate = &GetContentFromURL("https://api.coinmarketcap.com/v1/ticker/bitcoin-private/?convert=BTC");
        $CStat{$c}{rate} = $1 if $coinrate =~ /"price_btc": "(\d+\.\d+)"/;
        print " - $c: $CStat{$c}{hr} - $CStat{$c}{br} - $CStat{$c}{bt} - $CStat{$c}{rate}\n";
    ',

если будут пустоты - то данных недостаточно

 

Share this post


Link to post
Share on other sites

Использование профита с yiimp пулов, полагаю, вопросов не вызывает. А для самостоятельного расчета профита составил небольшой пример. Думаю, если его разобрать, потом провести эксперименты с другой монетой, то в дальнейшем вы будете описывать новые монеты не глядя. Достаточно будет скопировать нужный вариант из примера конфига и исправить данные.

 

запуск:

hrm.exe --profit --nowindows

 

пример конфига (hrm.cfg) с комментариями:

%VARS = (
	'EV'  => '
		# необязательный кусок кода, который нужен лишь для отображения и сравнения сложностей из разных источников
		print " - WTM difficulty: $CStat{GBX1}{diffwtm}\n";
		print " - Block explorer difficulty: $CStat{GBX4}{diff}\n";
		print " - Check results here: http://whattomine.com/coins/225-gbx-neoscrypt\n";
	',
);

###################################################################
# COINS                                                           #
###################################################################

%C = (

# данные с WTM. расчет профита по HR
'GBX1' =>
{
	'wtmname'     => 'GoByte',
	'skip'        => 'monitor',
},

# данные с WTM. расчет профита по diff
'GBX2' =>
{
	'wtmname'     => 'GoByte',
	'skip'        => 'monitor',
	'eval'        => '
		# пересчет сложности в HR (HRM считает по мощности)
		# для dagger hashimoto формула не должна содержать 0x100000000
		$CStat{$c}{hr} = $CStat{$c}{diffwtm}*0x100000000/$CStat{$c}{bt};
	',
},

# данные с WTM. HR с block explorer. расчет профита по HR
'GBX3' =>
{
	'wtmname'     => 'GoByte',
	'skip'        => 'monitor',
	'hrurl'       => 'https://explorer.gobyte.network/api/getmininginfo',
	'hrregexp'    => '"networkhashps": (.*?),',
},

# данные с WTM. diff с block explorer. расчет профита по diff
# рекомендуемый вариант для монет которые есть на WTM
# если биржевой курс WTM устраивает
'GBX4' =>
{
	'wtmname'     => 'GoByte',
	'skip'        => 'monitor',
	'hrurl'       => 'https://explorer.gobyte.network/api/getmininginfo',
	'hrregexp'    => '"difficulty": (.*?),',
	'eval'        => '
		# сохраним diff только лишь для сравнения с WTM. 
		$CStat{$c}{diff} = $CStat{$c}{hr};
		# пересчет diff в HR
		$CStat{$c}{hr} = $CStat{$c}{hr}*0x100000000/$CStat{$c}{bt};
	',
},

# данные с WTM. diff с block explorer. курс с биржи. расчет профита по diff
# рекомендуемый вариант для монет которые есть на WTM
# в действительности в этом примере нам с WTM нужен только алгоритм и block reward,
# block time при расчете по diff не нужен, а курс мы берем с биржи
'GBX5' =>
{
	'wtmname'     => 'GoByte',
	'skip'        => 'monitor',
	'hrurl'       => 'https://explorer.gobyte.network/api/getmininginfo',
	'hrregexp'    => '"difficulty": (.*?),',
	'eval'        => '
		# пересчет diff в HR
		$CStat{$c}{hr} = $CStat{$c}{hr}*0x100000000/$CStat{$c}{bt};
		# курс с биржи
		my $prices = &GetContentFromURL("https://stocks.exchange/api2/prices");
		$CStat{$c}{rate} = $1 if $prices =~ /\{"buy":"(\d+\.?\d*)","sell":"\d+\.?\d*","market_name":"GBX_BTC"/;
	',
},

# все данные заданны вручную. 
# diff с block explorer. курс с биржи. расчет профита по diff
# рекомендуемый вариант для монет которых нет на WTM
'GBX6' =>
{
	'wtmname'     => 'любое имя которого нет на WTM',
	'skip'        => 'monitor',
	'hrurl'       => 'https://explorer.gobyte.network/api/getmininginfo',
	'hrregexp'    => '"difficulty": (.*?),',
	'eval'        => '
		# обозначим алгоритм монеты. обязательно!
		$CStat{$c}{algo} = "NeoScrypt";
		# block reward. обязательно!
		$CStat{$c}{br} = 7.5;
		# block time в секундах. может быть любым, если расчет по diff
		# но лучше указывать правильное значение
		$CStat{$c}{bt} = 150;
		# пересчет сложности в HR
		$CStat{$c}{hr} = $CStat{$c}{hr}*0x100000000/$CStat{$c}{bt};
		# курс с биржи
		my $prices = &GetContentFromURL("https://stocks.exchange/api2/prices");
		$CStat{$c}{rate} = $1 if $prices =~ /\{"buy":"(\d+\.?\d*)","sell":"\d+\.?\d*","market_name":"GBX_BTC"/;
	',
},

);

%ALGSHR = ('NeoScrypt'     => '2');

1;

 

ЗЫ: обновил версию, в которой сохраняется сложность с WTM и которую можно использовать в программе

 

 

 

Edited by Serzh Black

Share this post


Link to post
Share on other sites

Ну тогда ещё подскажи необразованному, где брать block reward на примере suprnova

Edited by Riva

Share this post


Link to post
Share on other sites

Причем тут пул? Посмотрите примеры. Для вас в первую очередь и публикую. Еще раз повторю: из спецификации монеты

Share this post


Link to post
Share on other sites

@Riva Можете взять с WTM:  https://whattomine.com/coins.json. По каждой монете есть "block_time": и "block_reward":

Share this post


Link to post
Share on other sites

И еще bitcointalk

Share this post


Link to post
Share on other sites

Спасибо, с этим разобрался.

 

А что делать с теми монетами у которых нет ещё биржевого курса и вообще неизвестна стоимость. Например, монета Transend TCS. Как присвоить такой монете жёсткий показатель цены (временно) скажем в 0.000001 BTC (0.01$ примерно). Саму цену стартовую примерно можно прикинуть исходя из количества монет.

 

Вообщем как задать постоянную константу цены?

Edited by Riva

Share this post


Link to post
Share on other sites

HRM v.0.71

 

Теперь в профит режиме используется значение {hrlimit} монеты. Это индивидуальный аналог общего лимита по монетам $VARS{LT}

 

Как это использовать

 

В процессе мониторинга одной монеты (и всех ее форков) было выяснено, что сложность сети меняется слишком редко. Это вызывает следующее: месяц блокчейн монеты находится в анабиозе в результате слишком высокой сложности. Хотя пулы и самостоятельные вычисления в HRM показывают не плохой профит по этой монете, на самом деле это не так. Мощность мала, блоки находятся существенно реже значения block time, разработчикам даже приходится арендовать мощности, чтобы сеть жила. Примерно через месяц сеть корректирует сложность, она падает раз в 5, соответственно профит в 5 раз вверх. Т.к. сложность фиксирована, то профит постоянен и не зависит от количества майнеров (мощности сети). Блоки сыпятся как из рога изобилия, но такой "клондайк" продолжается день-два, затем сложность вверх, майнеры уходят, и все повторяется.

 

Установка {hrlimit} для таких монет позволит HRM не майнить монету не смотря на хороший вычисленный профит (это все враки!) и поймать момент резкого падения сложности. Устанавливаем {hrlimit} в значение ниже которого монета будет находиться на паузе и будет исключена из майнинга. Когда профит "подскочит" HRM снимет паузу и включит монету в майнинг. День майнинга в это время по профиту, как правило, равносилен неделе при обычных раскладах

 

Edited by Serzh Black

Share this post


Link to post
Share on other sites

@Riva 

5 часов назад, Riva сказал:

Вообщем как задать постоянную константу цены?

$CStat{$c}{rate} = 0.000001;                        

Share this post


Link to post
Share on other sites

@Serzh Black Если я правильно понял суть проблемы, то для таких монет лучше рассчитывать профит по сложности, а не по хэшрейту, а не чесать правое ухо через левое плечо, устанавливая hrlimit для профит режима.

Кстати, о каких монетах идет речь?

Edited by 5alex

Share this post


Link to post
Share on other sites

@5alex вообще говоря лучше всегда использовать сложность. если сложность меняется с каждым блоком или в течение небольшого промежутка времени, то можно использовать hashrate. у таких монет график сложности вполне адекватный

image.thumb.png.0c51d98ac6322a7e902ccfbd09629e82.png

image.thumb.png.e532ccf83c52edf6304b32c49d98f829.png

 

а для тех форков сейчас он выглядит так:

 

image.thumb.png.28fccaf3b016981ba465f631cbda8550.png

 

Когда ее начинал майнить на графике была вертикальная ступенька.

 

По поводу "не чесать правое ухо через левое плечо, устанавливая hrlimit для профит режима" не понял. если сейчас для нее не установить hrlimit, то она будет в профите и будет майнится, но по факту профита нет. блоки редки. монет мало. транзакции подтверждаются очень долго.

 

Что за монеты не скажу, уж простите. Но нашел я такое их поведение при помощи HRM. Все yiimp пулы, которые нахожу добавляю в закладки. Для каждого создаю батник с --getcoins для обычных и с --getalgos и --getcoins для мультипулов с конвертацией. Периодически запускаю и смотрю что в профите. Если появилось что-то новенькое или ситуация кардинально изменилась, то выясняю почему и стоит ли это внимания. Читаю что пишут разрабы в своих каналах и пользователи. В общем определенное количество времени в день этому посвящаю.

 

Share this post


Link to post
Share on other sites
5 часов назад, Serzh Black сказал:

блокчейн монеты находится в анабиозе в результате слишком высокой сложности.

Если сложность слишком высокая, и расчет ведется именно по сложности, то откуда возьмется "не плохой профит"?

 

 

Share this post


Link to post
Share on other sites

Ну как откуда. Из биржевого курса и из расчета что монету майнят и новые блоки в рамках блоктайм

Share this post


Link to post
Share on other sites
15 часов назад, Serzh Black сказал:

Как это использовать

 

Ну сделайте пример на какой-то "левой" монете, а то вообще не понятно как задать {hrlimit} "заведомо больше максимального и максимально возможного профита по всем монетам"

Share this post


Link to post
Share on other sites

@Riva    Например вот так:

 hrlimit  => '1.23456',

цифры профита подставите свои.)

Share this post


Link to post
Share on other sites

To Serzh Black.

Подскажи, пожалуйстаб как так получается, что при разных вариантах расчтеа, получается разный профит. Причем на примере монеты BWK он отличается в 2 раза!

На монете RVN по твоему примеру - примерно одинаково.

Может у меня ошибка в коде? Какой вариант расчета предпочительнее использовать: по Diff по HR?

###################################################################
# COINS                                                           #
###################################################################
#\d - цифра
#\d+ - одна или несколько цифр
#\. - точка
#. - любой символ
#.+ - один или несколько любых символов
#скобки - это то что пытаемся найти.

%C = (

#============================================================================================================

#профит считается по diff
'BWK(d)' =>
{
    'wtmname'     => 'BWK',
    'hrurl'       => 'http://explorer.bulwarkcrypto.com/api/getdifficulty',
    'hrregexp'    => '(\d+\.\d+)',
    'skip'        => 'monitor',

    'eval'        => '
        # обозначим алгоритм монеты. обязательно!
        $CStat{$c}{algo} = "Nist5";
        # block reward. обязательно!
        $CStat{$c}{br} = 21.875;
        # block time в секундах. может быть любым, если расчет по diff
        # но лучше указывать правильное значение
        $CStat{$c}{bt} = 90;
        # пересчет сложности в HR
        $CStat{$c}{hr} = $CStat{$c}{hr}*0x100000000/$CStat{$c}{bt};
        # курс с биржи
        my $RATE = &GetContentFromURL("https://api.crypto-bridge.org/api/v1/ticker");
        $CStat{$c}{rate} = $1 if $RATE =~ /\{"id":"BWK_BTC",.+?"bid":"(\d+\.\d+)"\}/;
#        print "BWK Excange Rate (CryptoBridge):  $CStat{$c}{rate}\n";
    ',
},

#профит (hr) считается по hashrate, данным из спецификации монеты 
'BWK(hr)' =>
{
    'wtmname'     => 'BWK',
    'hrurl'       => 'http://explorer.bulwarkcrypto.com/api/getnetworkhashps',
    'hrregexp'    => '(\d+)',
    'skip'        => 'monitor',

    'eval'        => '
        # обозначим алгоритм монеты. обязательно!
        $CStat{$c}{algo} = "Nist5";
        # block reward. обязательно!
        $CStat{$c}{br} = 21.875;
        # block time в секундах. может быть любым, если расчет по diff
        # но лучше указывать правильное значение
        $CStat{$c}{bt} = 90;
        # курс с биржи
        my $RATE = &GetContentFromURL("https://api.crypto-bridge.org/api/v1/ticker");
        $CStat{$c}{rate} = $1 if $RATE =~ /\{"id":"BWK_BTC",.+?"bid":"(\d+\.\d+)"\}/;
#        print "BWK Excange Rate (CryptoBridge):  $CStat{$c}{rate}\n";
    ',
},

#============================================================================================================


);
###################################################################
# PROFIT MODE                                                     #
###################################################################

#Мой средний хэшрейт на алгоритме:
%ALGSHR = (
        'Nist5'        => '600',
);


1;

Share this post


Link to post
Share on other sites

@Shpirny да. в два раза. сложность и hr прямо пропорциональны. если hr растет то bt падает. и наоборот. для большинства алго сложность это средний hr * bt с коэфицентом 1/2^32. грубо говоря из сложности можно получить средний hr за определенное время из которого сеть установила сложность.

судя по сложности 28301.73675817  hr на тот момент был 1350611486626 (что сходится с WTM). сейчас эксплорер показывает 632270364827. т.е. в два раза меньше. если эксплорер не врет (не должен по идее) то добиваются блоки с высокой сложностью и через какое-то время когда сеть скорректирует сложность расчеты выровняются но не совпадут. помониторьте монетку, отпишитесь. интересно. надеюсь я мыслю правильно.

ЗЫ: расчет надо вести по сложности

 

Share this post


Link to post
Share on other sites

@Serzh Black Подскажите правильный синтаксис для оператора   if  else

Share this post


Link to post
Share on other sites

можно так

if (true) { ... }
elsif (true) { ... }
elsif (true) { ... }
elsif (true) { ... }
...
else { .. }

но Perl полиморфный язык. есть 15 разных способов это сделать

Edited by Serzh Black

Share this post


Link to post
Share on other sites