diff --git a/Monitor/wwwroot/assets/js/waves.js b/Monitor/wwwroot/assets/js/waves.js index ae55d90..8df0b48 100644 --- a/Monitor/wwwroot/assets/js/waves.js +++ b/Monitor/wwwroot/assets/js/waves.js @@ -336,7 +336,7 @@ Tabs /*! VelocityJS.org (1.2.2). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */ /*! VelocityJS.org jQuery Shim (1.0.1). (C) 2014 The jQuery Foundation. MIT @license: en.wikipedia.org/wiki/MIT_License. */ !function(e){function t(e){var t=e.length,r=$.type(e);return"function"===r||$.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===r||0===t||"number"==typeof t&&t>0&&t-1 in e}if(!e.jQuery){var $=function(e,t){return new $.fn.init(e,t)};$.isWindow=function(e){return null!=e&&e==e.window},$.type=function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?a[o.call(e)]||"object":typeof e},$.isArray=Array.isArray||function(e){return"array"===$.type(e)},$.isPlainObject=function(e){var t;if(!e||"object"!==$.type(e)||e.nodeType||$.isWindow(e))return!1;try{if(e.constructor&&!n.call(e,"constructor")&&!n.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}for(t in e);return void 0===t||n.call(e,t)},$.each=function(e,r,a){var n,o=0,i=e.length,s=t(e);if(a){if(s)for(;i>o&&(n=r.apply(e[o],a),n!==!1);o++);else for(o in e)if(n=r.apply(e[o],a),n===!1)break}else if(s)for(;i>o&&(n=r.call(e[o],o,e[o]),n!==!1);o++);else for(o in e)if(n=r.call(e[o],o,e[o]),n===!1)break;return e},$.data=function(e,t,a){if(void 0===a){var n=e[$.expando],o=n&&r[n];if(void 0===t)return o;if(o&&t in o)return o[t]}else if(void 0!==t){var n=e[$.expando]||(e[$.expando]=++$.uuid);return r[n]=r[n]||{},r[n][t]=a,a}},$.removeData=function(e,t){var a=e[$.expando],n=a&&r[a];n&&$.each(t,function(e,t){delete n[t]})},$.extend=function(){var e,t,r,a,n,o,i=arguments[0]||{},s=1,l=arguments.length,u=!1;for("boolean"==typeof i&&(u=i,i=arguments[s]||{},s++),"object"!=typeof i&&"function"!==$.type(i)&&(i={}),s===l&&(i=this,s--);l>s;s++)if(null!=(n=arguments[s]))for(a in n)e=i[a],r=n[a],i!==r&&(u&&r&&($.isPlainObject(r)||(t=$.isArray(r)))?(t?(t=!1,o=e&&$.isArray(e)?e:[]):o=e&&$.isPlainObject(e)?e:{},i[a]=$.extend(u,o,r)):void 0!==r&&(i[a]=r));return i},$.queue=function(e,r,a){function n(e,r){var a=r||[];return null!=e&&(t(Object(e))?!function(e,t){for(var r=+t.length,a=0,n=e.length;r>a;)e[n++]=t[a++];if(r!==r)for(;void 0!==t[a];)e[n++]=t[a++];return e.length=n,e}(a,"string"==typeof e?[e]:e):[].push.call(a,e)),a}if(e){r=(r||"fx")+"queue";var o=$.data(e,r);return a?(!o||$.isArray(a)?o=$.data(e,r,n(a)):o.push(a),o):o||[]}},$.dequeue=function(e,t){$.each(e.nodeType?[e]:e,function(e,r){t=t||"fx";var a=$.queue(r,t),n=a.shift();"inprogress"===n&&(n=a.shift()),n&&("fx"===t&&a.unshift("inprogress"),n.call(r,function(){$.dequeue(r,t)}))})},$.fn=$.prototype={init:function(e){if(e.nodeType)return this[0]=e,this;throw new Error("Not a DOM node.")},offset:function(){var t=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:t.top+(e.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:t.left+(e.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function e(){for(var e=this.offsetParent||document;e&&"html"===!e.nodeType.toLowerCase&&"static"===e.style.position;)e=e.offsetParent;return e||document}var t=this[0],e=e.apply(t),r=this.offset(),a=/^(?:body|html)$/i.test(e.nodeName)?{top:0,left:0}:$(e).offset();return r.top-=parseFloat(t.style.marginTop)||0,r.left-=parseFloat(t.style.marginLeft)||0,e.style&&(a.top+=parseFloat(e.style.borderTopWidth)||0,a.left+=parseFloat(e.style.borderLeftWidth)||0),{top:r.top-a.top,left:r.left-a.left}}};var r={};$.expando="velocity"+(new Date).getTime(),$.uuid=0;for(var a={},n=a.hasOwnProperty,o=a.toString,i="Boolean Number String Function Array Date RegExp Object Error".split(" "),s=0;sn;++n){var o=u(r,e,a);if(0===o)return r;var i=l(r,e,a)-t;r-=i/o}return r}function p(){for(var t=0;b>t;++t)w[t]=l(t*x,e,a)}function f(t,r,n){var o,i,s=0;do i=r+(n-r)/2,o=l(i,e,a)-t,o>0?n=i:r=i;while(Math.abs(o)>h&&++s=y?c(t,s):0==l?s:f(t,r,r+x)}function g(){V=!0,(e!=r||a!=n)&&p()}var m=4,y=.001,h=1e-7,v=10,b=11,x=1/(b-1),S="Float32Array"in t;if(4!==arguments.length)return!1;for(var P=0;4>P;++P)if("number"!=typeof arguments[P]||isNaN(arguments[P])||!isFinite(arguments[P]))return!1;e=Math.min(e,1),a=Math.min(a,1),e=Math.max(e,0),a=Math.max(a,0);var w=S?new Float32Array(b):new Array(b),V=!1,C=function(t){return V||g(),e===r&&a===n?t:0===t?0:1===t?1:l(d(t),r,n)};C.getControlPoints=function(){return[{x:e,y:r},{x:a,y:n}]};var T="generateBezier("+[e,r,a,n]+")";return C.toString=function(){return T},C}function u(e,t){var r=e;return g.isString(e)?v.Easings[e]||(r=!1):r=g.isArray(e)&&1===e.length?s.apply(null,e):g.isArray(e)&&2===e.length?b.apply(null,e.concat([t])):g.isArray(e)&&4===e.length?l.apply(null,e):!1,r===!1&&(r=v.Easings[v.defaults.easing]?v.defaults.easing:h),r}function c(e){if(e){var t=(new Date).getTime(),r=v.State.calls.length;r>1e4&&(v.State.calls=n(v.State.calls));for(var o=0;r>o;o++)if(v.State.calls[o]){var s=v.State.calls[o],l=s[0],u=s[2],f=s[3],d=!!f,m=null;f||(f=v.State.calls[o][3]=t-16);for(var y=Math.min((t-f)/u.duration,1),h=0,b=l.length;b>h;h++){var S=l[h],w=S.element;if(i(w)){var V=!1;if(u.display!==a&&null!==u.display&&"none"!==u.display){if("flex"===u.display){var C=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];$.each(C,function(e,t){x.setPropertyValue(w,"display",t)})}x.setPropertyValue(w,"display",u.display)}u.visibility!==a&&"hidden"!==u.visibility&&x.setPropertyValue(w,"visibility",u.visibility);for(var T in S)if("element"!==T){var k=S[T],A,F=g.isString(k.easing)?v.Easings[k.easing]:k.easing;if(1===y)A=k.endValue;else{var E=k.endValue-k.startValue;if(A=k.startValue+E*F(y,u,E),!d&&A===k.currentValue)continue}if(k.currentValue=A,"tween"===T)m=A;else{if(x.Hooks.registered[T]){var j=x.Hooks.getRoot(T),H=i(w).rootPropertyValueCache[j];H&&(k.rootPropertyValue=H)}var N=x.setPropertyValue(w,T,k.currentValue+(0===parseFloat(A)?"":k.unitType),k.rootPropertyValue,k.scrollData);x.Hooks.registered[T]&&(i(w).rootPropertyValueCache[j]=x.Normalizations.registered[j]?x.Normalizations.registered[j]("extract",null,N[1]):N[1]),"transform"===N[0]&&(V=!0)}}u.mobileHA&&i(w).transformCache.translate3d===a&&(i(w).transformCache.translate3d="(0px, 0px, 0px)",V=!0),V&&x.flushTransformCache(w)}}u.display!==a&&"none"!==u.display&&(v.State.calls[o][2].display=!1),u.visibility!==a&&"hidden"!==u.visibility&&(v.State.calls[o][2].visibility=!1),u.progress&&u.progress.call(s[1],s[1],y,Math.max(0,f+u.duration-t),f,m),1===y&&p(o)}}v.State.isTicking&&P(c)}function p(e,t){if(!v.State.calls[e])return!1;for(var r=v.State.calls[e][0],n=v.State.calls[e][1],o=v.State.calls[e][2],s=v.State.calls[e][4],l=!1,u=0,c=r.length;c>u;u++){var p=r[u].element;if(t||o.loop||("none"===o.display&&x.setPropertyValue(p,"display",o.display),"hidden"===o.visibility&&x.setPropertyValue(p,"visibility",o.visibility)),o.loop!==!0&&($.queue(p)[1]===a||!/\.velocityQueueEntryFlag/i.test($.queue(p)[1]))&&i(p)){i(p).isAnimating=!1,i(p).rootPropertyValueCache={};var f=!1;$.each(x.Lists.transforms3D,function(e,t){var r=/^scale/.test(t)?1:0,n=i(p).transformCache[t];i(p).transformCache[t]!==a&&new RegExp("^\\("+r+"[^.]").test(n)&&(f=!0,delete i(p).transformCache[t])}),o.mobileHA&&(f=!0,delete i(p).transformCache.translate3d),f&&x.flushTransformCache(p),x.Values.removeClass(p,"velocity-animating")}if(!t&&o.complete&&!o.loop&&u===c-1)try{o.complete.call(n,n)}catch(d){setTimeout(function(){throw d},1)}s&&o.loop!==!0&&s(n),i(p)&&o.loop===!0&&!t&&($.each(i(p).tweensContainer,function(e,t){/^rotate/.test(e)&&360===parseFloat(t.endValue)&&(t.endValue=0,t.startValue=360),/^backgroundPosition/.test(e)&&100===parseFloat(t.endValue)&&"%"===t.unitType&&(t.endValue=0,t.startValue=100)}),v(p,"reverse",{loop:!0,delay:o.delay})),o.queue!==!1&&$.dequeue(p,o.queue)}v.State.calls[e]=!1;for(var g=0,m=v.State.calls.length;m>g;g++)if(v.State.calls[g]!==!1){l=!0;break}l===!1&&(v.State.isTicking=!1,delete v.State.calls,v.State.calls=[])}var f=function(){if(r.documentMode)return r.documentMode;for(var e=7;e>4;e--){var t=r.createElement("div");if(t.innerHTML="",t.getElementsByTagName("span").length)return t=null,e}return a}(),d=function(){var e=0;return t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||function(t){var r=(new Date).getTime(),a;return a=Math.max(0,16-(r-e)),e=r+a,setTimeout(function(){t(r+a)},a)}}(),g={isString:function(e){return"string"==typeof e},isArray:Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},isFunction:function(e){return"[object Function]"===Object.prototype.toString.call(e)},isNode:function(e){return e&&e.nodeType},isNodeList:function(e){return"object"==typeof e&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(e))&&e.length!==a&&(0===e.length||"object"==typeof e[0]&&e[0].nodeType>0)},isWrapped:function(e){return e&&(e.jquery||t.Zepto&&t.Zepto.zepto.isZ(e))},isSVG:function(e){return t.SVGElement&&e instanceof t.SVGElement},isEmptyObject:function(e){for(var t in e)return!1;return!0}},$,m=!1;if(e.fn&&e.fn.jquery?($=e,m=!0):$=t.Velocity.Utilities,8>=f&&!m)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if(7>=f)return void(jQuery.fn.velocity=jQuery.fn.animate);var y=400,h="swing",v={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(navigator.userAgent),isChrome:t.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:r.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:$,Redirects:{},Easings:{},Promise:t.Promise,defaults:{queue:"",duration:y,easing:h,begin:a,complete:a,progress:a,display:a,visibility:a,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(e){$.data(e,"velocity",{isSVG:g.isSVG(e),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};t.pageYOffset!==a?(v.State.scrollAnchor=t,v.State.scrollPropertyLeft="pageXOffset",v.State.scrollPropertyTop="pageYOffset"):(v.State.scrollAnchor=r.documentElement||r.body.parentNode||r.body,v.State.scrollPropertyLeft="scrollLeft",v.State.scrollPropertyTop="scrollTop");var b=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,r,a){var n={x:t.x+a.dx*r,v:t.v+a.dv*r,tension:t.tension,friction:t.friction};return{dx:n.v,dv:e(n)}}function r(r,a){var n={dx:r.v,dv:e(r)},o=t(r,.5*a,n),i=t(r,.5*a,o),s=t(r,a,i),l=1/6*(n.dx+2*(o.dx+i.dx)+s.dx),u=1/6*(n.dv+2*(o.dv+i.dv)+s.dv);return r.x=r.x+l*a,r.v=r.v+u*a,r}return function a(e,t,n){var o={x:-1,v:0,tension:null,friction:null},i=[0],s=0,l=1e-4,u=.016,c,p,f;for(e=parseFloat(e)||500,t=parseFloat(t)||20,n=n||null,o.tension=e,o.friction=t,c=null!==n,c?(s=a(e,t),p=s/n*u):p=u;;)if(f=r(f||o,p),i.push(1+f.x),s+=16,!(Math.abs(f.x)>l&&Math.abs(f.v)>l))break;return c?function(e){return i[e*(i.length-1)|0]}:s}}();v.Easings={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},spring:function(e){return 1-Math.cos(4.5*e*Math.PI)*Math.exp(6*-e)}},$.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(e,t){v.Easings[t[0]]=l.apply(null,t[1])});var x=v.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"]},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(var e=0;e=f)switch(e){case"name":return"filter";case"extract":var a=r.toString().match(/alpha\(opacity=(.*)\)/i);return r=a?a[1]/100:1;case"inject":return t.style.zoom=1,parseFloat(r)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(r),10)+")"}else switch(e){case"name":return"opacity";case"extract":return r;case"inject":return r}}},register:function(){9>=f||v.State.isGingerbread||(x.Lists.transformsBase=x.Lists.transformsBase.concat(x.Lists.transforms3D));for(var e=0;en&&(n=1),o=!/(\d)$/i.test(n);break;case"skew":o=!/(deg|\d)$/i.test(n);break;case"rotate":o=!/(deg|\d)$/i.test(n)}return o||(i(r).transformCache[t]="("+n+")"),i(r).transformCache[t]}}}();for(var e=0;e=f||3!==o.split(" ").length||(o+=" 1"),o;case"inject":return 8>=f?4===n.split(" ").length&&(n=n.split(/\s+/).slice(0,3).join(" ")):3===n.split(" ").length&&(n+=" 1"),(8>=f?"rgb":"rgba")+"("+n.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")"}}}()}},Names:{camelCase:function(e){return e.replace(/-(\w)/g,function(e,t){return t.toUpperCase()})},SVGAttribute:function(e){var t="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(f||v.State.isAndroid&&!v.State.isChrome)&&(t+="|transform"),new RegExp("^("+t+")$","i").test(e)},prefixCheck:function(e){if(v.State.prefixMatches[e])return[v.State.prefixMatches[e],!0];for(var t=["","Webkit","Moz","ms","O"],r=0,a=t.length;a>r;r++){var n;if(n=0===r?e:t[r]+e.replace(/^\w/,function(e){return e.toUpperCase()}),g.isString(v.State.prefixElement.style[n]))return v.State.prefixMatches[e]=n,[n,!0]}return[e,!1]}},Values:{hexToRgb:function(e){var t=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,a;return e=e.replace(t,function(e,t,r,a){return t+t+r+r+a+a}),a=r.exec(e),a?[parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16)]:[0,0,0]},isCSSNullValue:function(e){return 0==e||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(e)},getUnitType:function(e){return/^(rotate|skew)/i.test(e)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(e)?"":"px"},getDisplayType:function(e){var t=e&&e.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(t)?"inline":/^(li)$/i.test(t)?"list-item":/^(tr)$/i.test(t)?"table-row":/^(table)$/i.test(t)?"table":/^(tbody)$/i.test(t)?"table-row-group":"block"},addClass:function(e,t){e.classList?e.classList.add(t):e.className+=(e.className.length?" ":"")+t},removeClass:function(e,t){e.classList?e.classList.remove(t):e.className=e.className.toString().replace(new RegExp("(^|\\s)"+t.split(" ").join("|")+"(\\s|$)","gi")," ")}},getPropertyValue:function(e,r,n,o){function s(e,r){function n(){u&&x.setPropertyValue(e,"display","none")}var l=0;if(8>=f)l=$.css(e,r);else{var u=!1;if(/^(width|height)$/.test(r)&&0===x.getPropertyValue(e,"display")&&(u=!0,x.setPropertyValue(e,"display",x.Values.getDisplayType(e))),!o){if("height"===r&&"border-box"!==x.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var c=e.offsetHeight-(parseFloat(x.getPropertyValue(e,"borderTopWidth"))||0)-(parseFloat(x.getPropertyValue(e,"borderBottomWidth"))||0)-(parseFloat(x.getPropertyValue(e,"paddingTop"))||0)-(parseFloat(x.getPropertyValue(e,"paddingBottom"))||0);return n(),c}if("width"===r&&"border-box"!==x.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var p=e.offsetWidth-(parseFloat(x.getPropertyValue(e,"borderLeftWidth"))||0)-(parseFloat(x.getPropertyValue(e,"borderRightWidth"))||0)-(parseFloat(x.getPropertyValue(e,"paddingLeft"))||0)-(parseFloat(x.getPropertyValue(e,"paddingRight"))||0);return n(),p}}var d;d=i(e)===a?t.getComputedStyle(e,null):i(e).computedStyle?i(e).computedStyle:i(e).computedStyle=t.getComputedStyle(e,null),"borderColor"===r&&(r="borderTopColor"),l=9===f&&"filter"===r?d.getPropertyValue(r):d[r],(""===l||null===l)&&(l=e.style[r]),n()}if("auto"===l&&/^(top|right|bottom|left)$/i.test(r)){var g=s(e,"position");("fixed"===g||"absolute"===g&&/top|left/i.test(r))&&(l=$(e).position()[r]+"px")}return l}var l;if(x.Hooks.registered[r]){var u=r,c=x.Hooks.getRoot(u);n===a&&(n=x.getPropertyValue(e,x.Names.prefixCheck(c)[0])),x.Normalizations.registered[c]&&(n=x.Normalizations.registered[c]("extract",e,n)),l=x.Hooks.extractValue(u,n)}else if(x.Normalizations.registered[r]){var p,d;p=x.Normalizations.registered[r]("name",e),"transform"!==p&&(d=s(e,x.Names.prefixCheck(p)[0]),x.Values.isCSSNullValue(d)&&x.Hooks.templates[r]&&(d=x.Hooks.templates[r][1])),l=x.Normalizations.registered[r]("extract",e,d)}if(!/^[\d-]/.test(l))if(i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r))if(/^(height|width)$/i.test(r))try{l=e.getBBox()[r]}catch(g){l=0}else l=e.getAttribute(r);else l=s(e,x.Names.prefixCheck(r)[0]);return x.Values.isCSSNullValue(l)&&(l=0),v.debug>=2&&console.log("Get "+r+": "+l),l},setPropertyValue:function(e,r,a,n,o){var s=r;if("scroll"===r)o.container?o.container["scroll"+o.direction]=a:"Left"===o.direction?t.scrollTo(a,o.alternateValue):t.scrollTo(o.alternateValue,a);else if(x.Normalizations.registered[r]&&"transform"===x.Normalizations.registered[r]("name",e))x.Normalizations.registered[r]("inject",e,a),s="transform",a=i(e).transformCache[r];else{if(x.Hooks.registered[r]){var l=r,u=x.Hooks.getRoot(r);n=n||x.getPropertyValue(e,u),a=x.Hooks.injectValue(l,a,n),r=u}if(x.Normalizations.registered[r]&&(a=x.Normalizations.registered[r]("inject",e,a),r=x.Normalizations.registered[r]("name",e)),s=x.Names.prefixCheck(r)[0],8>=f)try{e.style[s]=a}catch(c){v.debug&&console.log("Browser does not support ["+a+"] for ["+s+"]")}else i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r)?e.setAttribute(r,a):e.style[s]=a;v.debug>=2&&console.log("Set "+r+" ("+s+"): "+a)}return[s,a]},flushTransformCache:function(e){function t(t){return parseFloat(x.getPropertyValue(e,t))}var r="";if((f||v.State.isAndroid&&!v.State.isChrome)&&i(e).isSVG){var a={translate:[t("translateX"),t("translateY")],skewX:[t("skewX")],skewY:[t("skewY")],scale:1!==t("scale")?[t("scale"),t("scale")]:[t("scaleX"),t("scaleY")],rotate:[t("rotateZ"),0,0]};$.each(i(e).transformCache,function(e){/^translate/i.test(e)?e="translate":/^scale/i.test(e)?e="scale":/^rotate/i.test(e)&&(e="rotate"),a[e]&&(r+=e+"("+a[e].join(" ")+") ",delete a[e])})}else{var n,o;$.each(i(e).transformCache,function(t){return n=i(e).transformCache[t],"transformPerspective"===t?(o=n,!0):(9===f&&"rotateZ"===t&&(t="rotate"),void(r+=t+n+" "))}),o&&(r="perspective"+o+" "+r)}x.setPropertyValue(e,"transform",r)}};x.Hooks.register(),x.Normalizations.register(),v.hook=function(e,t,r){var n=a;return e=o(e),$.each(e,function(e,o){if(i(o)===a&&v.init(o),r===a)n===a&&(n=v.CSS.getPropertyValue(o,t));else{var s=v.CSS.setPropertyValue(o,t,r);"transform"===s[0]&&v.CSS.flushTransformCache(o),n=s}}),n};var S=function(){function e(){return l?T.promise||null:f}function n(){function e(e){function p(e,t){var r=a,i=a,s=a;return g.isArray(e)?(r=e[0],!g.isArray(e[1])&&/^[\d-]/.test(e[1])||g.isFunction(e[1])||x.RegEx.isHex.test(e[1])?s=e[1]:(g.isString(e[1])&&!x.RegEx.isHex.test(e[1])||g.isArray(e[1]))&&(i=t?e[1]:u(e[1],o.duration),e[2]!==a&&(s=e[2]))):r=e,t||(i=i||o.easing),g.isFunction(r)&&(r=r.call(n,w,P)),g.isFunction(s)&&(s=s.call(n,w,P)),[r||0,i,s]}function f(e,t){var r,a;return a=(t||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(e){return r=e,""}),r||(r=x.Values.getUnitType(e)),[a,r]}function d(){var e={myParent:n.parentNode||r.body,position:x.getPropertyValue(n,"position"),fontSize:x.getPropertyValue(n,"fontSize")},a=e.position===N.lastPosition&&e.myParent===N.lastParent,o=e.fontSize===N.lastFontSize;N.lastParent=e.myParent,N.lastPosition=e.position,N.lastFontSize=e.fontSize;var s=100,l={};if(o&&a)l.emToPx=N.lastEmToPx,l.percentToPxWidth=N.lastPercentToPxWidth,l.percentToPxHeight=N.lastPercentToPxHeight;else{var u=i(n).isSVG?r.createElementNS("http://www.w3.org/2000/svg","rect"):r.createElement("div");v.init(u),e.myParent.appendChild(u),$.each(["overflow","overflowX","overflowY"],function(e,t){v.CSS.setPropertyValue(u,t,"hidden")}),v.CSS.setPropertyValue(u,"position",e.position),v.CSS.setPropertyValue(u,"fontSize",e.fontSize),v.CSS.setPropertyValue(u,"boxSizing","content-box"),$.each(["minWidth","maxWidth","width","minHeight","maxHeight","height"],function(e,t){v.CSS.setPropertyValue(u,t,s+"%")}),v.CSS.setPropertyValue(u,"paddingLeft",s+"em"),l.percentToPxWidth=N.lastPercentToPxWidth=(parseFloat(x.getPropertyValue(u,"width",null,!0))||1)/s,l.percentToPxHeight=N.lastPercentToPxHeight=(parseFloat(x.getPropertyValue(u,"height",null,!0))||1)/s,l.emToPx=N.lastEmToPx=(parseFloat(x.getPropertyValue(u,"paddingLeft"))||1)/s,e.myParent.removeChild(u)}return null===N.remToPx&&(N.remToPx=parseFloat(x.getPropertyValue(r.body,"fontSize"))||16),null===N.vwToPx&&(N.vwToPx=parseFloat(t.innerWidth)/100,N.vhToPx=parseFloat(t.innerHeight)/100),l.remToPx=N.remToPx,l.vwToPx=N.vwToPx,l.vhToPx=N.vhToPx,v.debug>=1&&console.log("Unit ratios: "+JSON.stringify(l),n),l}if(o.begin&&0===w)try{o.begin.call(m,m)}catch(y){setTimeout(function(){throw y},1)}if("scroll"===k){var S=/^x$/i.test(o.axis)?"Left":"Top",V=parseFloat(o.offset)||0,C,A,F;o.container?g.isWrapped(o.container)||g.isNode(o.container)?(o.container=o.container[0]||o.container,C=o.container["scroll"+S],F=C+$(n).position()[S.toLowerCase()]+V):o.container=null:(C=v.State.scrollAnchor[v.State["scrollProperty"+S]],A=v.State.scrollAnchor[v.State["scrollProperty"+("Left"===S?"Top":"Left")]],F=$(n).offset()[S.toLowerCase()]+V),s={scroll:{rootPropertyValue:!1,startValue:C,currentValue:C,endValue:F,unitType:"",easing:o.easing,scrollData:{container:o.container,direction:S,alternateValue:A}},element:n},v.debug&&console.log("tweensContainer (scroll): ",s.scroll,n)}else if("reverse"===k){if(!i(n).tweensContainer)return void $.dequeue(n,o.queue);"none"===i(n).opts.display&&(i(n).opts.display="auto"),"hidden"===i(n).opts.visibility&&(i(n).opts.visibility="visible"),i(n).opts.loop=!1,i(n).opts.begin=null,i(n).opts.complete=null,b.easing||delete o.easing,b.duration||delete o.duration,o=$.extend({},i(n).opts,o);var E=$.extend(!0,{},i(n).tweensContainer);for(var j in E)if("element"!==j){var H=E[j].startValue;E[j].startValue=E[j].currentValue=E[j].endValue,E[j].endValue=H,g.isEmptyObject(b)||(E[j].easing=o.easing),v.debug&&console.log("reverse tweensContainer ("+j+"): "+JSON.stringify(E[j]),n)}s=E}else if("start"===k){var E;i(n).tweensContainer&&i(n).isAnimating===!0&&(E=i(n).tweensContainer),$.each(h,function(e,t){if(RegExp("^"+x.Lists.colors.join("$|^")+"$").test(e)){var r=p(t,!0),n=r[0],o=r[1],i=r[2];if(x.RegEx.isHex.test(n)){for(var s=["Red","Green","Blue"],l=x.Values.hexToRgb(n),u=i?x.Values.hexToRgb(i):a,c=0;cO;O++){var z={delay:F.delay,progress:F.progress};O===R-1&&(z.display=F.display,z.visibility=F.visibility,z.complete=F.complete),S(m,"reverse",z)}return e()}};v=$.extend(S,v),v.animate=S;var P=t.requestAnimationFrame||d;return v.State.isMobile||r.hidden===a||r.addEventListener("visibilitychange",function(){r.hidden?(P=function(e){return setTimeout(function(){e(!0)},16)},c()):P=t.requestAnimationFrame||d}),e.Velocity=v,e!==t&&(e.fn.velocity=S,e.fn.velocity.defaults=v.defaults),$.each(["Down","Up"],function(e,t){v.Redirects["slide"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u=l.begin,c=l.complete,p={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},f={};l.display===a&&(l.display="Down"===t?"inline"===v.CSS.Values.getDisplayType(e)?"inline-block":"block":"none"),l.begin=function(){u&&u.call(i,i);for(var r in p){f[r]=e.style[r];var a=v.CSS.getPropertyValue(e,r);p[r]="Down"===t?[a,0]:[0,a]}f.overflow=e.style.overflow,e.style.overflow="hidden"},l.complete=function(){for(var t in f)e.style[t]=f[t];c&&c.call(i,i),s&&s.resolver(i)},v(e,p,l)}}),$.each(["In","Out"],function(e,t){v.Redirects["fade"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u={opacity:"In"===t?1:0},c=l.complete;l.complete=n!==o-1?l.begin=null:function(){c&&c.call(i,i),s&&s.resolver(i)},l.display===a&&(l.display="In"===t?"auto":"none"),v(this,u,l)}}),v}(window.jQuery||window.Zepto||window,window,document)});;!function(a,b,c,d){"use strict";function k(a,b,c){return setTimeout(q(a,c),b)}function l(a,b,c){return Array.isArray(a)?(m(a,c[b],c),!0):!1}function m(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e-1}function x(a){return a.trim().split(/\s+/g)}function y(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;dc[b]}):d.sort()),d}function B(a,b){for(var c,f,g=b[0].toUpperCase()+b.slice(1),h=0;h1&&!c.firstMultiple?c.firstMultiple=gb(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=hb(d);b.timeStamp=j(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=lb(h,i),b.distance=kb(h,i),eb(c,b),b.offsetDirection=jb(b.deltaX,b.deltaY),b.scale=g?nb(g.pointers,d):1,b.rotation=g?mb(g.pointers,d):0,fb(c,b);var k=a.element;v(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function eb(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===O||f.eventType===Q)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function fb(a,b){var f,g,h,j,c=a.lastInterval||b,e=b.timeStamp-c.timeStamp;if(b.eventType!=R&&(e>N||c.velocity===d)){var k=c.deltaX-b.deltaX,l=c.deltaY-b.deltaY,m=ib(e,k,l);g=m.x,h=m.y,f=i(m.x)>i(m.y)?m.x:m.y,j=jb(k,l),a.lastInterval=b}else f=c.velocity,g=c.velocityX,h=c.velocityY,j=c.direction;b.velocity=f,b.velocityX=g,b.velocityY=h,b.direction=j}function gb(a){for(var b=[],c=0;ce;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:h(c/b),y:h(d/b)}}function ib(a,b,c){return{x:b/a||0,y:c/a||0}}function jb(a,b){return a===b?S:i(a)>=i(b)?a>0?T:U:b>0?V:W}function kb(a,b,c){c||(c=$);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function lb(a,b,c){c||(c=$);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function mb(a,b){return lb(b[1],b[0],_)-lb(a[1],a[0],_)}function nb(a,b){return kb(b[0],b[1],_)/kb(a[0],a[1],_)}function rb(){this.evEl=pb,this.evWin=qb,this.allow=!0,this.pressed=!1,ab.apply(this,arguments)}function wb(){this.evEl=ub,this.evWin=vb,ab.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Ab(){this.evTarget=yb,this.evWin=zb,this.started=!1,ab.apply(this,arguments)}function Bb(a,b){var c=z(a.touches),d=z(a.changedTouches);return b&(Q|R)&&(c=A(c.concat(d),"identifier",!0)),[c,d]}function Eb(){this.evTarget=Db,this.targetIds={},ab.apply(this,arguments)}function Fb(a,b){var c=z(a.touches),d=this.targetIds;if(b&(O|P)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=z(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return v(a.target,i)}),b===O)for(e=0;eh&&(b.push(a),h=b.length-1):e&(Q|R)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var xb={touchstart:O,touchmove:P,touchend:Q,touchcancel:R},yb="touchstart",zb="touchstart touchmove touchend touchcancel";p(Ab,ab,{handler:function(a){var b=xb[a.type];if(b===O&&(this.started=!0),this.started){var c=Bb.call(this,a,b);b&(Q|R)&&0===c[0].length-c[1].length&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:J,srcEvent:a})}}});var Cb={touchstart:O,touchmove:P,touchend:Q,touchcancel:R},Db="touchstart touchmove touchend touchcancel";p(Eb,ab,{handler:function(a){var b=Cb[a.type],c=Fb.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:J,srcEvent:a})}}),p(Gb,ab,{handler:function(a,b,c){var d=c.pointerType==J,e=c.pointerType==L;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Q|R)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Hb=B(f.style,"touchAction"),Ib=Hb!==d,Jb="compute",Kb="auto",Lb="manipulation",Mb="none",Nb="pan-x",Ob="pan-y";Pb.prototype={set:function(a){a==Jb&&(a=this.compute()),Ib&&(this.manager.element.style[Hb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return m(this.manager.recognizers,function(b){r(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),Qb(a.join(" "))},preventDefaults:function(a){if(!Ib){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return b.preventDefault(),void 0;var d=this.actions,e=w(d,Mb),f=w(d,Ob),g=w(d,Nb);return e||f&&c&X||g&&c&Y?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var Rb=1,Sb=2,Tb=4,Ub=8,Vb=Ub,Wb=16,Xb=32;Yb.prototype={defaults:{},set:function(a){return n(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(l(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=_b(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return l(a,"dropRecognizeWith",this)?this:(a=_b(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(l(a,"requireFailure",this))return this;var b=this.requireFail;return a=_b(a,this),-1===y(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(l(a,"dropRequireFailure",this))return this;a=_b(a,this);var b=y(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function d(d){b.manager.emit(b.options.event+(d?Zb(c):""),a)}var b=this,c=this.state;Ub>c&&d(!0),d(),c>=Ub&&d(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):(this.state=Xb,void 0)},canEmit:function(){for(var a=0;af?T:U,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?S:0>g?V:W,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return ac.prototype.attrTest.call(this,a)&&(this.state&Sb||!(this.state&Sb)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=$b(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),p(cc,ac,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[Mb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&Sb)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),p(dc,Yb,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[Kb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distanceb.time;if(this._input=a,!d||!c||a.eventType&(Q|R)&&!e)this.reset();else if(a.eventType&O)this.reset(),this._timer=k(function(){this.state=Vb,this.tryEmit()},b.time,this);else if(a.eventType&Q)return Vb;return Xb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===Vb&&(a&&a.eventType&Q?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=j(),this.manager.emit(this.options.event,this._input)))}}),p(ec,ac,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[Mb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&Sb)}}),p(fc,ac,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:X|Y,pointers:1},getTouchAction:function(){return bc.prototype.getTouchAction.call(this)},attrTest:function(a){var c,b=this.options.direction;return b&(X|Y)?c=a.velocity:b&X?c=a.velocityX:b&Y&&(c=a.velocityY),this._super.attrTest.call(this,a)&&b&a.direction&&a.distance>this.options.threshold&&i(c)>this.options.velocity&&a.eventType&Q},emit:function(a){var b=$b(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),p(gc,Yb,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[Lb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distanceO;O++){var z={delay:F.delay,progress:F.progress};O===R-1&&(z.display=F.display,z.visibility=F.visibility,z.complete=F.complete),S(m,"reverse",z)}return e()}};v=$.extend(S,v),v.animate=S;var P=t.requestAnimationFrame||d;return v.State.isMobile||r.hidden===a||r.addEventListener("visibilitychange",function(){r.hidden?(P=function(e){return setTimeout(function(){e(!0)},16)},c()):P=t.requestAnimationFrame||d}),e.Velocity=v,e!==t&&(e.fn.velocity=S,e.fn.velocity.defaults=v.defaults),$.each(["Down","Up"],function(e,t){v.Redirects["slide"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u=l.begin,c=l.complete,p={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},f={};l.display===a&&(l.display="Down"===t?"inline"===v.CSS.Values.getDisplayType(e)?"inline-block":"block":"none"),l.begin=function(){u&&u.call(i,i);for(var r in p){f[r]=e.style[r];var a=v.CSS.getPropertyValue(e,r);p[r]="Down"===t?[a,0]:[0,a]}f.overflow=e.style.overflow,e.style.overflow="hidden"},l.complete=function(){for(var t in f)e.style[t]=f[t];c&&c.call(i,i),s&&s.resolver(i)},v(e,p,l)}}),$.each(["In","Out"],function(e,t){v.Redirects["fade"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u={opacity:"In"===t?1:0},c=l.complete;l.complete=n!==o-1?l.begin=null:function(){c&&c.call(i,i),s&&s.resolver(i)},l.display===a&&(l.display="In"===t?"auto":"none"),v(this,u,l)}}),v}(window.jQuery||window.Zepto||window,window,document)});;!function(a,b,c,d){"use strict";function k(a,b,c){return setTimeout(q(a,c),b)}function l(a,b,c){return Array.isArray(a)?(m(a,c[b],c),!0):!1}function m(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e-1}function x(a){return a.trim().split(/\s+/g)}function y(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;dc[b]}):d.sort()),d}function B(a,b){for(var c,f,g=b[0].toUpperCase()+b.slice(1),h=0;h1&&!c.firstMultiple?c.firstMultiple=gb(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=hb(d);b.timeStamp=j(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=lb(h,i),b.distance=kb(h,i),eb(c,b),b.offsetDirection=jb(b.deltaX,b.deltaY),b.scale=g?nb(g.pointers,d):1,b.rotation=g?mb(g.pointers,d):0,fb(c,b);var k=a.element;v(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function eb(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===O||f.eventType===Q)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function fb(a,b){var f,g,h,j,c=a.lastInterval||b,e=b.timeStamp-c.timeStamp;if(b.eventType!=R&&(e>N||c.velocity===d)){var k=c.deltaX-b.deltaX,l=c.deltaY-b.deltaY,m=ib(e,k,l);g=m.x,h=m.y,f=i(m.x)>i(m.y)?m.x:m.y,j=jb(k,l),a.lastInterval=b}else f=c.velocity,g=c.velocityX,h=c.velocityY,j=c.direction;b.velocity=f,b.velocityX=g,b.velocityY=h,b.direction=j}function gb(a){for(var b=[],c=0;ce;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:h(c/b),y:h(d/b)}}function ib(a,b,c){return{x:b/a||0,y:c/a||0}}function jb(a,b){return a===b?S:i(a)>=i(b)?a>0?T:U:b>0?V:W}function kb(a,b,c){c||(c=$);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function lb(a,b,c){c||(c=$);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function mb(a,b){return lb(b[1],b[0],_)-lb(a[1],a[0],_)}function nb(a,b){return kb(b[0],b[1],_)/kb(a[0],a[1],_)}function rb(){this.evEl=pb,this.evWin=qb,this.allow=!0,this.pressed=!1,ab.apply(this,arguments)}function wb(){this.evEl=ub,this.evWin=vb,ab.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Ab(){this.evTarget=yb,this.evWin=zb,this.started=!1,ab.apply(this,arguments)}function Bb(a,b){var c=z(a.touches),d=z(a.changedTouches);return b&(Q|R)&&(c=A(c.concat(d),"identifier",!0)),[c,d]}function Eb(){this.evTarget=Db,this.targetIds={},ab.apply(this,arguments)}function Fb(a,b){var c=z(a.touches),d=this.targetIds;if(b&(O|P)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=z(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return v(a.target,i)}),b===O)for(e=0;eh&&(b.push(a),h=b.length-1):e&(Q|R)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var xb={touchstart:O,touchmove:P,touchend:Q,touchcancel:R},yb="touchstart",zb="touchstart touchmove touchend touchcancel";p(Ab,ab,{handler:function(a){var b=xb[a.type];if(b===O&&(this.started=!0),this.started){var c=Bb.call(this,a,b);b&(Q|R)&&0===c[0].length-c[1].length&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:J,srcEvent:a})}}});var Cb={touchstart:O,touchmove:P,touchend:Q,touchcancel:R},Db="touchstart touchmove touchend touchcancel";p(Eb,ab,{handler:function(a){var b=Cb[a.type],c=Fb.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:J,srcEvent:a})}}),p(Gb,ab,{handler:function(a,b,c){var d=c.pointerType==J,e=c.pointerType==L;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Q|R)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Hb=B(f.style,"touchAction"),Ib=Hb!==d,Jb="compute",Kb="auto",Lb="manipulation",Mb="none",Nb="pan-x",Ob="pan-y";Pb.prototype={set:function(a){a==Jb&&(a=this.compute()),Ib&&(this.manager.element.style[Hb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return m(this.manager.recognizers,function(b){r(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),Qb(a.join(" "))},preventDefaults:function(a){if(!Ib){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return b.preventDefault(),void 0;var d=this.actions,e=w(d,Mb),f=w(d,Ob),g=w(d,Nb);return e||f&&c&X||g&&c&Y?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var Rb=1,Sb=2,Tb=4,Ub=8,Vb=Ub,Wb=16,Xb=32;Yb.prototype={defaults:{},set:function(a){return n(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(l(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=_b(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return l(a,"dropRecognizeWith",this)?this:(a=_b(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(l(a,"requireFailure",this))return this;var b=this.requireFail;return a=_b(a,this),-1===y(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(l(a,"dropRequireFailure",this))return this;a=_b(a,this);var b=y(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function d(d){b.manager.emit(b.options.event+(d?Zb(c):""),a)}var b=this,c=this.state;Ub>c&&d(!0),d(),c>=Ub&&d(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):(this.state=Xb,void 0)},canEmit:function(){for(var a=0;af?T:U,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?S:0>g?V:W,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return ac.prototype.attrTest.call(this,a)&&(this.state&Sb||!(this.state&Sb)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=$b(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),p(cc,ac,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[Mb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&Sb)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),p(dc,Yb,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[Kb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distanceb.time;if(this._input=a,!d||!c||a.eventType&(Q|R)&&!e)this.reset();else if(a.eventType&O)this.reset(),this._timer=k(function(){this.state=Vb,this.tryEmit()},b.time,this);else if(a.eventType&Q)return Vb;return Xb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===Vb&&(a&&a.eventType&Q?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=j(),this.manager.emit(this.options.event,this._input)))}}),p(ec,ac,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[Mb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&Sb)}}),p(fc,ac,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:X|Y,pointers:1},getTouchAction:function(){return bc.prototype.getTouchAction.call(this)},attrTest:function(a){var c,b=this.options.direction;return b&(X|Y)?c=a.velocity:b&X?c=a.velocityX:b&Y&&(c=a.velocityY),this._super.attrTest.call(this,a)&&b&a.direction&&a.distance>this.options.threshold&&i(c)>this.options.velocity&&a.eventType&Q},emit:function(a){var b=$b(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),p(gc,Yb,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[Lb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/PTMagic/_defaults/_default settings PT 1.x/_default settings BTC or ETH/settings.analyzer.json b/PTMagic/_defaults/_default settings PT 1.x/_default settings BTC or ETH/settings.analyzer.json deleted file mode 100644 index 15d0b47..0000000 --- a/PTMagic/_defaults/_default settings PT 1.x/_default settings BTC or ETH/settings.analyzer.json +++ /dev/null @@ -1,241 +0,0 @@ -{ - "AnalyzerSettings": { - "MarketAnalyzer": { - "StoreDataMaxHours": 24, // Number of hours to store market data - "IntervalMinutes": 5, // Interval in minutes for PTMagic to check market trends and triggers - "ExcludeMainCurrency": true, // Excludes the main currency (for example BTC) from market trend analysis - "MarketTrends": [ - { - "Name": "CMC24h", // UNIQUE market trend name (to be referenced by your triggers below) - "Platform": "CoinMarketCap", // Platform to grab prices from (Allowed values are: CoinMarketCap, Exchange) - "MaxMarkets": 50, // Number of markets/pairs to analyze sorted by 24h volume - "TrendMinutes": 1440 // Number of minutes to build a trend (1440 = 24h, 720 = 12h, 60 = 1h) - }, - { - "Name": "Exchange1h", - "Platform": "Exchange", - "MaxMarkets": 50, - "TrendMinutes": 60, - "TrendCurrency": "Market" // Trend Currency to build the trend against. If set to "Fiat", the trend will take the USD value of your main currency into account to build the trend. (Allowed values are: Fiat, Market) - }, - { - "Name": "Exchange12h", - "Platform": "Exchange", - "MaxMarkets": 50, - "TrendMinutes": 720, - "TrendCurrency": "Market" - }, - { - "Name": "Exchange24h", - "Platform": "Exchange", - "MaxMarkets": 50, - "TrendMinutes": 1440, - "TrendCurrency": "Market" - } - ] - }, - "GlobalSettings": [ // Global settings for Profit Trailer properties - { - "SettingName": "EndOfTheWorld", // UNIQUE name of your setting - "TriggerConnection": "AND", // Define if triggers will be connected by AND or OR - "Triggers": [ // Your triggers for this setting - { - "MarketTrendName": "Exchange1h", // Reference to the market trend specified above - "MaxChange": 0 // Maximum trend change % for this setting to get triggered - }, - { - "MarketTrendName": "Exchange12h", - "MaxChange": -1 - }, - { - "MarketTrendName": "Exchange24h", - "MaxChange": -5 - } - ], - "PairsProperties": { // Properties for PAIRS.PROPERTIES - "ALL_sell_only_mode": true, - "ALL_trailing_profit": 0.1 - }, - "DCAProperties": { // Properties for DCA.PROPERTIES - "trailing_profit": 0.1 - } - }, - { - "SettingName": "TankingDown", - "TriggerConnection": "AND", - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MaxChange": 0 - }, - { - "MarketTrendName": "Exchange12h", - "MaxChange": 0 - }, - { - "MarketTrendName": "Exchange24h", - "MaxChange": -3, - "MinChange": -5 - } - ], - "PairsProperties": { - "ALL_buy_value": -1.1, - "ALL_trailing_buy": 0.39, - "ALL_trailing_profit": 0.1 - }, - "DCAProperties": { - "trailing_buy": 0.1 - } - }, - { - "SettingName": "BearSighted", - "TriggerConnection": "AND", - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MaxChange": 1 - }, - { - "MarketTrendName": "Exchange12h", - "MaxChange": 0 - }, - { - "MarketTrendName": "Exchange24h", - "MaxChange": -1, - "MinChange": -3 - } - ], - "PairsProperties": { - "ALL_buy_value": -0.9, - "ALL_trailing_profit": 0.15 - }, - "DCAProperties": { - "trailing_profit": 0.15 - } - }, - { - "SettingName": "ReadyForLiftOff", - "TriggerConnection": "AND", - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MinChange": -1 - }, - { - "MarketTrendName": "Exchange12h", - "MinChange": 0 - }, - { - "MarketTrendName": "Exchange24h", - "MinChange": 1, - "MaxChange": 3 - } - ], - "PairsProperties": { - "ALL_trailing_buy": 0.2, - "ALL_sell_value": 1.1 - }, - "DCAProperties": { - "sell_value": 1.1 - } - }, - { - "SettingName": "ToTheMoon", - "TriggerConnection": "AND", - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MinChange": 0 - }, - { - "MarketTrendName": "Exchange12h", - "MinChange": 1 - }, - { - "MarketTrendName": "Exchange24h", - "MinChange": 3 - } - ], - "PairsProperties": { - "ALL_trailing_buy": 0.15, - "ALL_sell_value": 1.3 - }, - "DCAProperties": { - "sell_value": 1.3 - } - }, - { - "SettingName": "Default", - "PairsProperties": { - "File": "PAIRS.properties" - }, - "DCAProperties": { - "File": "DCA.properties" - }, - "IndicatorsProperties": { - "File": "INDICATORS.properties" - } - } - ], - "SingleMarketSettings": [ // Single market/pair settings for Profit Trailer properties - { - "SettingName": "BlacklistNewCoins", - "StopProcessWhenTriggered": true, - "Triggers": [ - { - "AgeDaysLowerThan": 14 - } - ], - "PairsProperties": { - "ALL_trading_enabled": false, - "ALL_sell_only_mode": true, - "ALL_DCA_enabled": false - } - }, - { - "SettingName": "PumpNDumpProtection", - "TriggerConnection": "OR", - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "Relative", // The relation of the single market trend. Relative = Single market trend compared relative to the market trend / Absolute = Single market trend viewn on its own - "MinChange": 10 - }, - { - "MarketTrendName": "Exchange12h", - "MarketTrendRelation": "Relative", - "MinChange": 10 - }, - { - "MarketTrendName": "Exchange24h", - "MarketTrendRelation": "Relative", - "MinChange": 10 - } - ], - "PairsProperties": { - "ALL_trailing_profit_OFFSETPERCENT": -10, - "ALL_sell_value_OFFSETPERCENT": -30, - "ALL_sell_only_mode": true, - "ALL_DCA_enabled": false - } - }, - { - "SettingName": "FreefallBlock", - "TriggerConnection": "OR", - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "Absolute", - "MaxChange": -5 - } - ], - "PairsProperties": { - "ALL_trailing_profit_OFFSETPERCENT": -10, - "ALL_sell_value_OFFSETPERCENT": -30, - "ALL_sell_only_mode": true, - "ALL_DCA_enabled": false - } - } - ] - } -} \ No newline at end of file diff --git a/PTMagic/_defaults/_default settings PT 1.x/_default settings BTC or ETH/settings.general.json b/PTMagic/_defaults/_default settings PT 1.x/_default settings BTC or ETH/settings.general.json deleted file mode 100644 index c543b7a..0000000 --- a/PTMagic/_defaults/_default settings PT 1.x/_default settings BTC or ETH/settings.general.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "GeneralSettings": { - "Application": { - "IsEnabled": true, // Enables the PTMagic bot (needs restart to take effect) - "TestMode": false, // If TestMode is active, no properties files will be changed - "ProfitTrailerPath": "YOUR PROFIT TRAILER PATH", // Path to your Profit Trailer main directory (use double backslashes for windows like C:\\ProfitTrailer\\) - "Exchange": "Bittrex", // The exchange your are running Profit Trailer on - "StartBalance": 0, // The balance you had in your wallet when you started working with Profit Trailer - "TimezoneOffset": "+0:00", // Your timezone offset from UTC time - "MainFiatCurrency": "USD", // Your main fiat currency that will be used in the monitor - "AlwaysLoadDefaultBeforeSwitch": true, // If this is enabled, PTMagic will always load default settings before switching to another setting - "FloodProtectionMinutes": 15, // If a price trend is just zig-zagging around its trigger, you may want to protect your settings from getting switched back and forth every minute - "InstanceName": "PT Magic", // The name of the instance of this bot. This will be used in your monitor and your Telegram messages. In case you are running more than one bot, you may set different names to separate them - "CoinMarketCapAPIKey": "" //CoinMarketCap Api - }, - "Monitor": { - "IsPasswordProtected": true, // Defines if your monitor will be asking to setup a password on its first start - "OpenBrowserOnStart": false, // If active, a browser window will open as soon as you start the monitor - "Port": 5000, // The port you want to run your monitor on - "RootUrl": "/", // The root Url of your monitor - "GraphIntervalMinutes": 60, // The interval for the monitor market trend graph to draw points - "GraphMaxTimeframeHours": 24, // This will enable you to define the timeframe that your graph for market trends covers - "RefreshSeconds": 30, // The refresh interval of your monitor main page - "LinkPlatform": "TradingView", // The platform to which the pair name will link if you click on it - "MaxTopMarkets": 20, // The amount of top markets being shown in your Sales Analyzer - "MaxDailySummaries": 10, // The amount of "Last Days" being shown in your Sales Analyzer - "MaxMonthlySummaries": 10 // The amount of "Last Months" being shown in your Sales Analyzer - }, - "Backup": { - "IsEnabled": true, // Enables a backup procedure for your properties files. Before every switch PTMagic will backup the current properties - "MaxHours": 12 // Max number of hours to keep backup files - }, - "Telegram": { - "IsEnabled": false, // Enables PT Magic to send Telegram messages - "BotToken": "", // Your Telegram bot token - "ChatId": 0, // Your Telegram Chat ID - "SilentMode": false // If SilentMode is active, no notification sound or vibration will happen when the bot sends a Telegram message - } - } -} \ No newline at end of file diff --git a/PTMagic/_defaults/_default settings PT 1.x/_default settings USDT/Monitor/appsettings.json b/PTMagic/_defaults/_default settings PT 1.x/_default settings USDT/Monitor/appsettings.json deleted file mode 100644 index 0c38f1b..0000000 --- a/PTMagic/_defaults/_default settings PT 1.x/_default settings USDT/Monitor/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "PTMagicBasePath": "YOUR PT MAGIC PATH", // Path to your Profit Trailer Magic main directory (use double backslashes for windows like C:\\PTMagic\\) - "Logging": { - "IncludeScopes": false, - "LogLevel": { - "Default": "Warning" - } - } -} diff --git a/PTMagic/_defaults/_default settings PT 1.x/_default settings USDT/nlog.config b/PTMagic/_defaults/_default settings PT 1.x/_default settings USDT/nlog.config deleted file mode 100644 index adb7382..0000000 --- a/PTMagic/_defaults/_default settings PT 1.x/_default settings USDT/nlog.config +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/PTMagic/_defaults/_default settings PT 1.x/_default settings USDT/settings.analyzer.json b/PTMagic/_defaults/_default settings PT 1.x/_default settings USDT/settings.analyzer.json deleted file mode 100644 index 8039751..0000000 --- a/PTMagic/_defaults/_default settings PT 1.x/_default settings USDT/settings.analyzer.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "AnalyzerSettings": { - "MarketAnalyzer": { - "StoreDataMaxHours": 24, // Number of hours to store market data - "IntervalMinutes": 1, // Interval in minutes for PTMagic to check market trends and triggers - "ExcludeMainCurrency": true, // Excludes the main currency (for example BTC) from market trend analysis - "MarketTrends": [ - { - "Name": "CMC24h", // UNIQUE market trend name (to be referenced by your triggers below) - "Platform": "CoinMarketCap", // Platform to grab prices from (Allowed values are: CoinMarketCap, Exchange) - "MaxMarkets": 50, // Number of markets/pairs to analyze sorted by 24h volume - "TrendMinutes": 1440 // Number of minutes to build a trend (1440 = 24h, 720 = 12h, 60 = 1h) - }, - { - "Name": "Exchange1h", - "Platform": "Exchange", - "MaxMarkets": 50, - "TrendMinutes": 60, - "TrendCurrency": "Market", // Trend Currency to build the trend against. If set to "Fiat", the trend will take the USD value of your main currency into account to build the trend. (Allowed values are: Fiat, Market) - "IgnoredMarkets": "BNBBTC" // Comma separated list of markets you want to be ignored in this market trend. - }, - { - "Name": "Exchange12h", - "Platform": "Exchange", - "MaxMarkets": 50, - "TrendMinutes": 720, - "TrendCurrency": "Market", - "IgnoredMarkets": "BNBBTC" - }, - { - "Name": "Exchange24h", - "Platform": "Exchange", - "MaxMarkets": 50, - "TrendMinutes": 1440, - "TrendCurrency": "Market", - "IgnoredMarkets": "BNBBTC" - } - ] - }, - "GlobalSettings": [ // Global settings for Profit Trailer properties - { - "SettingName": "EndOfTheWorld", // UNIQUE name of your setting - "TriggerConnection": "AND", // Define if triggers will be connected by AND or OR - "Triggers": [ // Your triggers for this setting - { - "MarketTrendName": "Exchange12h", // Reference to the market trend specified above - "MaxChange": -1 // Maximum trend change % for this setting to get triggered - }, - { - "MarketTrendName": "Exchange24h", - "MaxChange": -5 - } - ], - "PairsProperties": { // Properties for PAIRS.PROPERTIES - "ALL_sell_only_mode": true, - "ALL_trailing_profit_OFFSETPERCENT": -50 - }, - "DCAProperties": { // Properties for DCA.PROPERTIES - "trailing_profit_OFFSETPERCENT": -50 - } - }, - { - "SettingName": "TankingDown", - "TriggerConnection": "AND", - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MaxChange": 1 - }, - { - "MarketTrendName": "Exchange12h", - "MaxChange": 0 - }, - { - "MarketTrendName": "Exchange24h", - "MaxChange": -3, - "MinChange": -5 - } - ], - "PairsProperties": { - "ALL_buy_value_OFFSETPERCENT": -10, - "ALL_trailing_buy_OFFSETPERCENT": 10, - "ALL_trailing_profit_OFFSETPERCENT": -25 - }, - "DCAProperties": { - "trailing_buy_OFFSETPERCENT": -25 - } - }, - { - "SettingName": "BearSighted", - "TriggerConnection": "AND", - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MaxChange": 1 - }, - { - "MarketTrendName": "Exchange12h", - "MaxChange": 0 - }, - { - "MarketTrendName": "Exchange24h", - "MaxChange": -1, - "MinChange": -3 - } - ], - "PairsProperties": { - "ALL_buy_value_OFFSETPERCENT": -5, - "ALL_trailing_profit_OFFSETPERCENT": -10 - }, - "DCAProperties": { - "trailing_profit_OFFSETPERCENT": -10 - } - }, - { - "SettingName": "ReadyForLiftOff", - "TriggerConnection": "AND", - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MinChange": -1 - }, - { - "MarketTrendName": "Exchange12h", - "MinChange": 0 - }, - { - "MarketTrendName": "Exchange24h", - "MinChange": 1, - "MaxChange": 3 - } - ], - "PairsProperties": { - "ALL_trailing_buy_OFFSETPERCENT": -25, - "ALL_sell_value_OFFSETPERCENT": 10 - }, - "DCAProperties": { - "sell_value_OFFSETPERCENT": 10 - } - }, - { - "SettingName": "ToTheMoon", - "TriggerConnection": "AND", - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MinChange": -1 - }, - { - "MarketTrendName": "Exchange12h", - "MinChange": 1 - }, - { - "MarketTrendName": "Exchange24h", - "MinChange": 3 - } - ], - "PairsProperties": { - "ALL_trailing_buy_OFFSETPERCENT": -50, - "ALL_sell_value_OFFSETPERCENT": 25 - }, - "DCAProperties": { - "sell_value_OFFSETPERCENT": 25 - } - }, - { - "SettingName": "Default", - "PairsProperties": { - "File": "PAIRS.PROPERTIES" - }, - "DCAProperties": { - "File": "DCA.PROPERTIES" - }, - "IndicatorsProperties": { - "File": "INDICATORS.PROPERTIES" - } - } - ], - "SingleMarketSettings": [ // Single market/pair settings for Profit Trailer properties - { - "SettingName": "BlacklistNewCoins", - "StopProcessWhenTriggered": true, - "Triggers": [ - { - "AgeDaysLowerThan": 14 - } - ], - "PairsProperties": { - "ALL_trading_enabled": false, - "ALL_sell_only_mode": true, - "ALL_DCA_enabled": false - } - }, - { - "SettingName": "PumpNDumpProtection", - "TriggerConnection": "OR", - "StopProcessWhenTriggered": true, - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "Relative", // The relation of the single market trend. Relative = Single market trend compared relative to the market trend / Absolute = Single market trend viewn on its own - "MinChange": 5 - }, - { - "MarketTrendName": "Exchange12h", - "MarketTrendRelation": "Relative", - "MinChange": 5 - }, - { - "MarketTrendName": "Exchange24h", - "MarketTrendRelation": "Relative", - "MinChange": 5 - } - ], - "PairsProperties": { - "ALL_trailing_profit_OFFSETPERCENT": -10, - "ALL_sell_value_OFFSETPERCENT": -30, - "ALL_sell_only_mode": true, - "ALL_DCA_enabled": false - } - }, - { - "SettingName": "FreefallBlock", - "TriggerConnection": "OR", - "StopProcessWhenTriggered": true, - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "Absolute", - "MaxChange": -5 - } - ], - "PairsProperties": { - "ALL_trailing_profit_OFFSETPERCENT": -10, - "ALL_sell_value_OFFSETPERCENT": -30, - "ALL_sell_only_mode": true, - "ALL_DCA_enabled": false - } - } - ] - } -} \ No newline at end of file diff --git a/PTMagic/_defaults/_default settings PT 1.x/_default settings USDT/settings.general.json b/PTMagic/_defaults/_default settings PT 1.x/_default settings USDT/settings.general.json deleted file mode 100644 index c543b7a..0000000 --- a/PTMagic/_defaults/_default settings PT 1.x/_default settings USDT/settings.general.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "GeneralSettings": { - "Application": { - "IsEnabled": true, // Enables the PTMagic bot (needs restart to take effect) - "TestMode": false, // If TestMode is active, no properties files will be changed - "ProfitTrailerPath": "YOUR PROFIT TRAILER PATH", // Path to your Profit Trailer main directory (use double backslashes for windows like C:\\ProfitTrailer\\) - "Exchange": "Bittrex", // The exchange your are running Profit Trailer on - "StartBalance": 0, // The balance you had in your wallet when you started working with Profit Trailer - "TimezoneOffset": "+0:00", // Your timezone offset from UTC time - "MainFiatCurrency": "USD", // Your main fiat currency that will be used in the monitor - "AlwaysLoadDefaultBeforeSwitch": true, // If this is enabled, PTMagic will always load default settings before switching to another setting - "FloodProtectionMinutes": 15, // If a price trend is just zig-zagging around its trigger, you may want to protect your settings from getting switched back and forth every minute - "InstanceName": "PT Magic", // The name of the instance of this bot. This will be used in your monitor and your Telegram messages. In case you are running more than one bot, you may set different names to separate them - "CoinMarketCapAPIKey": "" //CoinMarketCap Api - }, - "Monitor": { - "IsPasswordProtected": true, // Defines if your monitor will be asking to setup a password on its first start - "OpenBrowserOnStart": false, // If active, a browser window will open as soon as you start the monitor - "Port": 5000, // The port you want to run your monitor on - "RootUrl": "/", // The root Url of your monitor - "GraphIntervalMinutes": 60, // The interval for the monitor market trend graph to draw points - "GraphMaxTimeframeHours": 24, // This will enable you to define the timeframe that your graph for market trends covers - "RefreshSeconds": 30, // The refresh interval of your monitor main page - "LinkPlatform": "TradingView", // The platform to which the pair name will link if you click on it - "MaxTopMarkets": 20, // The amount of top markets being shown in your Sales Analyzer - "MaxDailySummaries": 10, // The amount of "Last Days" being shown in your Sales Analyzer - "MaxMonthlySummaries": 10 // The amount of "Last Months" being shown in your Sales Analyzer - }, - "Backup": { - "IsEnabled": true, // Enables a backup procedure for your properties files. Before every switch PTMagic will backup the current properties - "MaxHours": 12 // Max number of hours to keep backup files - }, - "Telegram": { - "IsEnabled": false, // Enables PT Magic to send Telegram messages - "BotToken": "", // Your Telegram bot token - "ChatId": 0, // Your Telegram Chat ID - "SilentMode": false // If SilentMode is active, no notification sound or vibration will happen when the bot sends a Telegram message - } - } -} \ No newline at end of file diff --git a/PTMagic/_defaults/_default settings PT 2.x/_default settings BTC or ETH/settings.analyzer.json b/PTMagic/_defaults/_default settings PT 2.x/_default settings BTC or ETH/settings.analyzer.json index 3377939..1178c54 100644 --- a/PTMagic/_defaults/_default settings PT 2.x/_default settings BTC or ETH/settings.analyzer.json +++ b/PTMagic/_defaults/_default settings PT 2.x/_default settings BTC or ETH/settings.analyzer.json @@ -1,171 +1,238 @@ -{ +// +// The settings below offer a basic example of some of the options available when using PTMagic. +// You should take your time and adjust these settings according to your own personal preferences. +// Always test your PTMagic settings by running a Profit Trailer bot in TESTMODE, to make sure +// it is performing as you expect. +// +// For more information on these settings, see the wiki at: https://github.com/PTMagicians/PTMagic/wiki/settings.analyzer + + +{ "AnalyzerSettings": { "MarketAnalyzer": { - "StoreDataMaxHours": 24, // Number of hours to store market data - "IntervalMinutes": 5, // Interval in minutes for PTMagic to check market trends and triggers + "StoreDataMaxHours": 48, // Number of hours to store market data + "IntervalMinutes": 2, // Interval in minutes for PTMagic to check market trends and triggers "ExcludeMainCurrency": true, // Excludes the main currency (for example BTC) from market trend analysis "MarketTrends": [ { - "Name": "CMC24h", // UNIQUE market trend name (to be referenced by your triggers below) - "Platform": "CoinMarketCap", // Platform to grab prices from (Allowed values are: CoinMarketCap, Exchange) - "MaxMarkets": 50, // Number of markets/pairs to analyze sorted by 24h volume - "TrendMinutes": 1440 // Number of minutes to build a trend (1440 = 24h, 720 = 12h, 60 = 1h) + "Name": "15m", // UNIQUE market trend name (to be referenced by your triggers below) + "Platform": "Exchange", // Platform to grab prices from (Allowed values are: CoinMarketCap, Exchange) + "MaxMarkets": 50, // Number of markets/pairs to analyze sorted by 24h volume + "TrendMinutes": 15, // Number of minutes to build a trend (1440 = 24h, 720 = 12h, 60 = 1h) + "TrendCurrency": "Market", // Trend Currency to build the trend against. If set to "Fiat", the trend will + // take the USD value of your main currency into account to build the trend. + // (Allowed values are: Fiat, Market) + "DisplayGraph": false, // Use this trend in the graph on the PTM Monitor dashboard and market analyzer + "DisplayOnMarketAnalyzerList": false // Disply this trend for all coins on the PTM Monitor market analyzer }, { - "Name": "Exchange1h", + "Name": "1h", "Platform": "Exchange", "MaxMarkets": 50, "TrendMinutes": 60, - "TrendCurrency": "Market" // Trend Currency to build the trend against. If set to "Fiat", the trend will take the USD value of your main currency into account to build the trend. (Allowed values are: Fiat, Market) + "TrendCurrency": "Market", + "DisplayGraph": true, + "DisplayOnMarketAnalyzerList": true }, { - "Name": "Exchange12h", + "Name": "6h", + "Platform": "Exchange", + "MaxMarkets": 50, + "TrendMinutes": 360, + "TrendCurrency": "Market", + "DisplayGraph": true, + "DisplayOnMarketAnalyzerList": true + }, + { + "Name": "12h", "Platform": "Exchange", "MaxMarkets": 50, "TrendMinutes": 720, - "TrendCurrency": "Market" + "TrendCurrency": "Market", + "DisplayGraph": true, + "DisplayOnMarketAnalyzerList": true }, { - "Name": "Exchange24h", + "Name": "24h", "Platform": "Exchange", "MaxMarkets": 50, "TrendMinutes": 1440, - "TrendCurrency": "Market" + "TrendCurrency": "Market", + "DisplayGraph": true, + "DisplayOnMarketAnalyzerList": true } ] }, + // ================================ GLOBAL SETTINGS ================================ + // "GlobalSettings": [ // Global settings for Profit Trailer properties + // + // ----------------------------- { - "SettingName": "EndOfTheWorld", // UNIQUE name of your setting + "SettingName": "EndOfTheWorld", // ANY UNIQUE name of your setting "TriggerConnection": "AND", // Define if triggers will be connected by AND or OR - "Triggers": [ // Your triggers for this setting + "Triggers": [ // Your triggers for this setting. You can use any of your defined trends from above { - "MarketTrendName": "Exchange1h", // Reference to the market trend specified above - "MaxChange": 0 // Maximum trend change % for this setting to get triggered + "MarketTrendName": "1h", // Reference to the market trend specified above + "MaxChange": 0 // The maximum value for this trigger to be true. (Any value below "0" will trigger this) }, { - "MarketTrendName": "Exchange12h", - "MaxChange": -1 + "MarketTrendName": "12h", + "MaxChange": -2 }, { - "MarketTrendName": "Exchange24h", + "MarketTrendName": "24h", "MaxChange": -5 } ], "PairsProperties": { // Properties for PAIRS.PROPERTIES + // Any valid setting from https://wiki.profittrailer.com/doku.php?id=pairs.properties can be used here. + // You can use a specific value, or apply a discrete OFFSET or OFFSETPERCENT to the value in your default PAIRS setting. "DEFAULT_sell_only_mode_enabled": true, "DEFAULT_trailing_profit_OFFSETPERCENT": -50 }, "DCAProperties": { // Properties for DCA.PROPERTIES - "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": -50 + "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": -75 } }, + // ----------------------------- { "SettingName": "TankingDown", "TriggerConnection": "AND", "Triggers": [ { - "MarketTrendName": "Exchange1h", + "MarketTrendName": "15m", + "MaxChange": 1 + }, + { + "MarketTrendName": "1h", "MaxChange": 0 }, { - "MarketTrendName": "Exchange12h", + "MarketTrendName": "12h", "MaxChange": 0 }, { - "MarketTrendName": "Exchange24h", + "MarketTrendName": "24h", // Any value between -5 and -3 will make this trigger true. "MaxChange": -3, - "MinChange": -5 + "MinChange": -5 // The minimum value for this trigger to be true. (Any value above "-5" will trigger this) } ], "PairsProperties": { - "DEFAULT_A_buy_value_OFFSETPERCENT": -10, - "DEFAULT_B_buy_value_OFFSETPERCENT": -10, - "DEFAULT_trailing_buy_OFFSETPERCENT": 10, + "max_trading_pairs_OFFSET": -2, + "DEFAULT_min_buy_volume_OFFSETPERCENT": 100, + //"DEFAULT_initial_cost_OFFSETPERCENT": -50, + //"DEFAULT_initial_cost_percentage_OFFSETPERCENT": -50, + "DEFAULT_trailing_buy_OFFSETPERCENT": 25, "DEFAULT_trailing_profit_OFFSETPERCENT": -25 }, "DCAProperties": { - "DEFAULT_DCA_trailing_buy_OFFSETPERCENT": -25 + //"DEFAULT_DCA_rebuy_timeout_OFFSETPERCENT": 100, + "DEFAULT_DCA_trailing_buy_OFFSETPERCENT": 25, + "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": -50 + }, + "IndicatorsProperties": { } }, + // ----------------------------- { "SettingName": "BearSighted", "TriggerConnection": "AND", "Triggers": [ { - "MarketTrendName": "Exchange1h", + "MarketTrendName": "1h", "MaxChange": 1 }, { - "MarketTrendName": "Exchange12h", + "MarketTrendName": "12h", "MaxChange": 0 }, { - "MarketTrendName": "Exchange24h", + "MarketTrendName": "24h", "MaxChange": -1, "MinChange": -3 } ], "PairsProperties": { - "DEFAULT_A_buy_value_OFFSETPERCENT": -5, - "DEFAULT_B_buy_value_OFFSETPERCENT": -5, + "max_trading_pairs_OFFSET": -1, + //"DEFAULT_initial_cost_OFFSETPERCENT": -25, + //"DEFAULT_initial_cost_percentage_OFFSETPERCENT": -25, + "DEFAULT_trailing_buy_OFFSETPERCENT": 10, "DEFAULT_trailing_profit_OFFSETPERCENT": -10 }, "DCAProperties": { - "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": -10 + "DEFAULT_DCA_trailing_buy_OFFSETPERCENT": 10, + "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": -10, + }, + "IndicatorsProperties": { } }, + // ----------------------------- { "SettingName": "ReadyForLiftOff", "TriggerConnection": "AND", "Triggers": [ { - "MarketTrendName": "Exchange1h", + "MarketTrendName": "1h", "MinChange": -1 }, { - "MarketTrendName": "Exchange12h", + "MarketTrendName": "12h", "MinChange": 0 }, { - "MarketTrendName": "Exchange24h", + "MarketTrendName": "24h", "MinChange": 1, "MaxChange": 3 } ], "PairsProperties": { - "DEFAULT_trailing_buy_OFFSETPERCENT": -25, + "max_trading_pairs_OFFSET": 1, + //"DEFAULT_initial_cost_OFFSETPERCENT": 10, + //"DEFAULT_initial_cost_percentage_OFFSETPERCENT": 10, + "DEFAULT_trailing_buy_OFFSETPERCENT": -10, "DEFAULT_A_sell_value_OFFSETPERCENT": 10 }, "DCAProperties": { - "DEFAULT_DCA_A_sell_value_OFFSETPERCENT": 10 + "DEFAULT_DCA_trailing_buy_OFFSETPERCENT": -10, + "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": 10, + }, + "IndicatorsProperties": { } }, + // ----------------------------- { "SettingName": "ToTheMoon", "TriggerConnection": "AND", "Triggers": [ { - "MarketTrendName": "Exchange1h", + "MarketTrendName": "1h", "MinChange": 0 }, { - "MarketTrendName": "Exchange12h", + "MarketTrendName": "12h", "MinChange": 1 }, { - "MarketTrendName": "Exchange24h", + "MarketTrendName": "24h", "MinChange": 3 } ], "PairsProperties": { - "DEFAULT_trailing_buy_OFFSETPERCENT": -50, - "DEFAULT_A_sell_value_OFFSETPERCENT": 25 + "max_trading_pairs_OFFSET": 2, + //"DEFAULT_initial_cost_OFFSETPERCENT": 20, + //"DEFAULT_initial_cost_percentage_OFFSETPERCENT": 20, + "DEFAULT_trailing_buy_OFFSETPERCENT": -10, + "DEFAULT_A_sell_value_OFFSETPERCENT": 20 }, "DCAProperties": { - "DEFAULT_DCA_A_sell_value_OFFSETPERCENT": 25 + "DEFAULT_DCA_trailing_buy_OFFSETPERCENT": -20, + "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": 20, + }, + "IndicatorsProperties": { } }, + // ----------------------------- { "SettingName": "Default", "PairsProperties": { @@ -179,13 +246,18 @@ } } ], + // ================================ COIN-SPECIFIC SETTINGS ================================ + // "SingleMarketSettings": [ // Single market/pair settings for Profit Trailer properties + // Any setting from https://wiki.profittrailer.com/doku.php?id=pairs.properties + // marked as CS (coin-specific) can be used here. + // Only coins that meet the triggered conditions will have the settings applied. { - "SettingName": "BlacklistNewCoins", + "SettingName": "BlacklistCoins", "StopProcessWhenTriggered": true, "Triggers": [ { - "AgeDaysLowerThan": 14 + "AgeDaysLowerThan": 21 } ], "PairsProperties": { @@ -194,24 +266,33 @@ "DEFAULT_DCA_enabled": false } }, + // ----------------------------- { "SettingName": "PumpNDumpProtection", "TriggerConnection": "OR", "Triggers": [ { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "Relative", // The relation of the single market trend. Relative = Single market trend compared relative to the market trend / Absolute = Single market trend viewn on its own - "MinChange": 10 + "MarketTrendName": "1h", + "MarketTrendRelation": "Relative", // The relation of the single market trend. Relative = Single market + // trend compared relative to the market trend + // Absolute = Single market trend viewed on its own + "MinChange": 8 }, { - "MarketTrendName": "Exchange12h", + "MarketTrendName": "12h", "MarketTrendRelation": "Relative", "MinChange": 10 }, { - "MarketTrendName": "Exchange24h", + "MarketTrendName": "24h", "MarketTrendRelation": "Relative", - "MinChange": 10 + "MinChange": 12 + } + ], + "OffTriggers": [ + { + "HoursSinceTriggered": 3 // Any coin that triggers this setting, will remain under this setting + // for 3 hours, since the last time it triggered. } ], "PairsProperties": { @@ -219,17 +300,23 @@ "DEFAULT_DCA_enabled": false } }, + // ----------------------------- { "SettingName": "FreefallBlock", "TriggerConnection": "OR", "Triggers": [ { - "MarketTrendName": "Exchange1h", + "MarketTrendName": "1h", "MarketTrendRelation": "Absolute", "MaxChange": -5 } ], - "PairsProperties": { + "OffTriggers": [ + { + "HoursSinceTriggered": 1 + } + ], + "PairsProperties": { "DEFAULT_sell_only_mode_enabled": true, "DEFAULT_DCA_enabled": false } diff --git a/PTMagic/_defaults/_default settings PT 2.x/_default settings USDT/settings.analyzer.json b/PTMagic/_defaults/_default settings PT 2.x/_default settings USDT/settings.analyzer.json index ccf10f6..1178c54 100644 --- a/PTMagic/_defaults/_default settings PT 2.x/_default settings USDT/settings.analyzer.json +++ b/PTMagic/_defaults/_default settings PT 2.x/_default settings USDT/settings.analyzer.json @@ -1,190 +1,263 @@ -{ +// +// The settings below offer a basic example of some of the options available when using PTMagic. +// You should take your time and adjust these settings according to your own personal preferences. +// Always test your PTMagic settings by running a Profit Trailer bot in TESTMODE, to make sure +// it is performing as you expect. +// +// For more information on these settings, see the wiki at: https://github.com/PTMagicians/PTMagic/wiki/settings.analyzer + + +{ "AnalyzerSettings": { "MarketAnalyzer": { - "StoreDataMaxHours": 24, // Number of hours to store market data - "IntervalMinutes": 1, // Interval in minutes for PTMagic to check market trends and triggers + "StoreDataMaxHours": 48, // Number of hours to store market data + "IntervalMinutes": 2, // Interval in minutes for PTMagic to check market trends and triggers "ExcludeMainCurrency": true, // Excludes the main currency (for example BTC) from market trend analysis "MarketTrends": [ { - "Name": "CMC24h", // UNIQUE market trend name (to be referenced by your triggers below) - "Platform": "CoinMarketCap", // Platform to grab prices from (Allowed values are: CoinMarketCap, Exchange) - "MaxMarkets": 50, // Number of markets/pairs to analyze sorted by 24h volume - "TrendMinutes": 1440 // Number of minutes to build a trend (1440 = 24h, 720 = 12h, 60 = 1h) + "Name": "15m", // UNIQUE market trend name (to be referenced by your triggers below) + "Platform": "Exchange", // Platform to grab prices from (Allowed values are: CoinMarketCap, Exchange) + "MaxMarkets": 50, // Number of markets/pairs to analyze sorted by 24h volume + "TrendMinutes": 15, // Number of minutes to build a trend (1440 = 24h, 720 = 12h, 60 = 1h) + "TrendCurrency": "Market", // Trend Currency to build the trend against. If set to "Fiat", the trend will + // take the USD value of your main currency into account to build the trend. + // (Allowed values are: Fiat, Market) + "DisplayGraph": false, // Use this trend in the graph on the PTM Monitor dashboard and market analyzer + "DisplayOnMarketAnalyzerList": false // Disply this trend for all coins on the PTM Monitor market analyzer }, { - "Name": "Exchange1h", + "Name": "1h", "Platform": "Exchange", "MaxMarkets": 50, "TrendMinutes": 60, - "TrendCurrency": "Market", // Trend Currency to build the trend against. If set to "Fiat", the trend will take the USD value of your main currency into account to build the trend. (Allowed values are: Fiat, Market) - "IgnoredMarkets": "BNBBTC" // Comma separated list of markets you want to be ignored in this market trend. + "TrendCurrency": "Market", + "DisplayGraph": true, + "DisplayOnMarketAnalyzerList": true }, { - "Name": "Exchange12h", + "Name": "6h", + "Platform": "Exchange", + "MaxMarkets": 50, + "TrendMinutes": 360, + "TrendCurrency": "Market", + "DisplayGraph": true, + "DisplayOnMarketAnalyzerList": true + }, + { + "Name": "12h", "Platform": "Exchange", "MaxMarkets": 50, "TrendMinutes": 720, "TrendCurrency": "Market", - "IgnoredMarkets": "BNBBTC" + "DisplayGraph": true, + "DisplayOnMarketAnalyzerList": true }, { - "Name": "Exchange24h", + "Name": "24h", "Platform": "Exchange", "MaxMarkets": 50, "TrendMinutes": 1440, "TrendCurrency": "Market", - "IgnoredMarkets": "BNBBTC" + "DisplayGraph": true, + "DisplayOnMarketAnalyzerList": true } ] }, + // ================================ GLOBAL SETTINGS ================================ + // "GlobalSettings": [ // Global settings for Profit Trailer properties + // + // ----------------------------- { - "SettingName": "EndOfTheWorld", // UNIQUE name of your setting + "SettingName": "EndOfTheWorld", // ANY UNIQUE name of your setting "TriggerConnection": "AND", // Define if triggers will be connected by AND or OR - "Triggers": [ // Your triggers for this setting + "Triggers": [ // Your triggers for this setting. You can use any of your defined trends from above { - "MarketTrendName": "Exchange12h", // Reference to the market trend specified above - "MaxChange": -1 // Maximum trend change % for this setting to get triggered + "MarketTrendName": "1h", // Reference to the market trend specified above + "MaxChange": 0 // The maximum value for this trigger to be true. (Any value below "0" will trigger this) }, { - "MarketTrendName": "Exchange24h", + "MarketTrendName": "12h", + "MaxChange": -2 + }, + { + "MarketTrendName": "24h", "MaxChange": -5 } ], "PairsProperties": { // Properties for PAIRS.PROPERTIES + // Any valid setting from https://wiki.profittrailer.com/doku.php?id=pairs.properties can be used here. + // You can use a specific value, or apply a discrete OFFSET or OFFSETPERCENT to the value in your default PAIRS setting. "DEFAULT_sell_only_mode_enabled": true, "DEFAULT_trailing_profit_OFFSETPERCENT": -50 }, "DCAProperties": { // Properties for DCA.PROPERTIES - "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": -50 + "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": -75 } }, + // ----------------------------- { "SettingName": "TankingDown", "TriggerConnection": "AND", "Triggers": [ { - "MarketTrendName": "Exchange1h", + "MarketTrendName": "15m", "MaxChange": 1 }, - { - "MarketTrendName": "Exchange12h", + { + "MarketTrendName": "1h", "MaxChange": 0 }, { - "MarketTrendName": "Exchange24h", + "MarketTrendName": "12h", + "MaxChange": 0 + }, + { + "MarketTrendName": "24h", // Any value between -5 and -3 will make this trigger true. "MaxChange": -3, - "MinChange": -5 + "MinChange": -5 // The minimum value for this trigger to be true. (Any value above "-5" will trigger this) } ], "PairsProperties": { - "DEFAULT_A_buy_value_OFFSETPERCENT": -10, - "DEFAULT_B_buy_value_OFFSETPERCENT": -10, - "DEFAULT_trailing_buy_OFFSETPERCENT": 10, + "max_trading_pairs_OFFSET": -2, + "DEFAULT_min_buy_volume_OFFSETPERCENT": 100, + //"DEFAULT_initial_cost_OFFSETPERCENT": -50, + //"DEFAULT_initial_cost_percentage_OFFSETPERCENT": -50, + "DEFAULT_trailing_buy_OFFSETPERCENT": 25, "DEFAULT_trailing_profit_OFFSETPERCENT": -25 }, "DCAProperties": { - "DEFAULT_DCA_trailing_buy_OFFSETPERCENT": -25 + //"DEFAULT_DCA_rebuy_timeout_OFFSETPERCENT": 100, + "DEFAULT_DCA_trailing_buy_OFFSETPERCENT": 25, + "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": -50 + }, + "IndicatorsProperties": { } }, + // ----------------------------- { "SettingName": "BearSighted", "TriggerConnection": "AND", "Triggers": [ { - "MarketTrendName": "Exchange1h", + "MarketTrendName": "1h", "MaxChange": 1 }, { - "MarketTrendName": "Exchange12h", + "MarketTrendName": "12h", "MaxChange": 0 }, { - "MarketTrendName": "Exchange24h", + "MarketTrendName": "24h", "MaxChange": -1, "MinChange": -3 } ], "PairsProperties": { - "DEFAULT_A_buy_value_OFFSETPERCENT": -5, - "DEFAULT_B_buy_value_OFFSETPERCENT": -5, + "max_trading_pairs_OFFSET": -1, + //"DEFAULT_initial_cost_OFFSETPERCENT": -25, + //"DEFAULT_initial_cost_percentage_OFFSETPERCENT": -25, + "DEFAULT_trailing_buy_OFFSETPERCENT": 10, "DEFAULT_trailing_profit_OFFSETPERCENT": -10 }, "DCAProperties": { - "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": -10 + "DEFAULT_DCA_trailing_buy_OFFSETPERCENT": 10, + "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": -10, + }, + "IndicatorsProperties": { } }, + // ----------------------------- { "SettingName": "ReadyForLiftOff", "TriggerConnection": "AND", "Triggers": [ { - "MarketTrendName": "Exchange1h", + "MarketTrendName": "1h", "MinChange": -1 }, { - "MarketTrendName": "Exchange12h", + "MarketTrendName": "12h", "MinChange": 0 }, { - "MarketTrendName": "Exchange24h", + "MarketTrendName": "24h", "MinChange": 1, "MaxChange": 3 } ], "PairsProperties": { - "DEFAULT_trailing_buy_OFFSETPERCENT": -25, + "max_trading_pairs_OFFSET": 1, + //"DEFAULT_initial_cost_OFFSETPERCENT": 10, + //"DEFAULT_initial_cost_percentage_OFFSETPERCENT": 10, + "DEFAULT_trailing_buy_OFFSETPERCENT": -10, "DEFAULT_A_sell_value_OFFSETPERCENT": 10 }, "DCAProperties": { - "DEFAULT_DCA_A_sell_value_OFFSETPERCENT": 10 + "DEFAULT_DCA_trailing_buy_OFFSETPERCENT": -10, + "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": 10, + }, + "IndicatorsProperties": { } }, + // ----------------------------- { "SettingName": "ToTheMoon", "TriggerConnection": "AND", "Triggers": [ { - "MarketTrendName": "Exchange1h", - "MinChange": -1 + "MarketTrendName": "1h", + "MinChange": 0 }, { - "MarketTrendName": "Exchange12h", + "MarketTrendName": "12h", "MinChange": 1 }, { - "MarketTrendName": "Exchange24h", + "MarketTrendName": "24h", "MinChange": 3 } ], "PairsProperties": { - "DEFAULT_trailing_buy_OFFSETPERCENT": -50, - "DEFAULT_A_sell_value_OFFSETPERCENT": 25 + "max_trading_pairs_OFFSET": 2, + //"DEFAULT_initial_cost_OFFSETPERCENT": 20, + //"DEFAULT_initial_cost_percentage_OFFSETPERCENT": 20, + "DEFAULT_trailing_buy_OFFSETPERCENT": -10, + "DEFAULT_A_sell_value_OFFSETPERCENT": 20 }, "DCAProperties": { - "DEFAULT_DCA_A_sell_value_OFFSETPERCENT": 25 + "DEFAULT_DCA_trailing_buy_OFFSETPERCENT": -20, + "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": 20, + }, + "IndicatorsProperties": { } }, + // ----------------------------- { "SettingName": "Default", "PairsProperties": { - "File": "PAIRS.PROPERTIES" + "File": "PAIRS.properties" }, "DCAProperties": { - "File": "DCA.PROPERTIES" + "File": "DCA.properties" }, "IndicatorsProperties": { - "File": "INDICATORS.PROPERTIES" + "File": "INDICATORS.properties" } } ], + // ================================ COIN-SPECIFIC SETTINGS ================================ + // "SingleMarketSettings": [ // Single market/pair settings for Profit Trailer properties + // Any setting from https://wiki.profittrailer.com/doku.php?id=pairs.properties + // marked as CS (coin-specific) can be used here. + // Only coins that meet the triggered conditions will have the settings applied. { - "SettingName": "BlacklistNewCoins", + "SettingName": "BlacklistCoins", "StopProcessWhenTriggered": true, "Triggers": [ { - "AgeDaysLowerThan": 14 + "AgeDaysLowerThan": 21 } ], "PairsProperties": { @@ -193,25 +266,33 @@ "DEFAULT_DCA_enabled": false } }, + // ----------------------------- { "SettingName": "PumpNDumpProtection", "TriggerConnection": "OR", - "StopProcessWhenTriggered": true, "Triggers": [ { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "Relative", // The relation of the single market trend. Relative = Single market trend compared relative to the market trend / Absolute = Single market trend viewn on its own - "MinChange": 5 + "MarketTrendName": "1h", + "MarketTrendRelation": "Relative", // The relation of the single market trend. Relative = Single market + // trend compared relative to the market trend + // Absolute = Single market trend viewed on its own + "MinChange": 8 }, { - "MarketTrendName": "Exchange12h", + "MarketTrendName": "12h", "MarketTrendRelation": "Relative", - "MinChange": 5 + "MinChange": 10 }, { - "MarketTrendName": "Exchange24h", + "MarketTrendName": "24h", "MarketTrendRelation": "Relative", - "MinChange": 5 + "MinChange": 12 + } + ], + "OffTriggers": [ + { + "HoursSinceTriggered": 3 // Any coin that triggers this setting, will remain under this setting + // for 3 hours, since the last time it triggered. } ], "PairsProperties": { @@ -219,20 +300,23 @@ "DEFAULT_DCA_enabled": false } }, + // ----------------------------- { "SettingName": "FreefallBlock", "TriggerConnection": "OR", - "StopProcessWhenTriggered": true, "Triggers": [ { - "MarketTrendName": "Exchange1h", + "MarketTrendName": "1h", "MarketTrendRelation": "Absolute", "MaxChange": -5 } ], - "PairsProperties": { - "DEFAULT_trailing_profit_OFFSETPERCENT": -10, - "DEFAULT_A_sell_value_OFFSETPERCENT": -30, + "OffTriggers": [ + { + "HoursSinceTriggered": 1 + } + ], + "PairsProperties": { "DEFAULT_sell_only_mode_enabled": true, "DEFAULT_DCA_enabled": false } diff --git a/_Development/DevSettings/settings.analyzer.json b/_Development/DevSettings/settings.analyzer.json index d23f823..1178c54 100644 --- a/_Development/DevSettings/settings.analyzer.json +++ b/_Development/DevSettings/settings.analyzer.json @@ -1,79 +1,263 @@ +// +// The settings below offer a basic example of some of the options available when using PTMagic. +// You should take your time and adjust these settings according to your own personal preferences. +// Always test your PTMagic settings by running a Profit Trailer bot in TESTMODE, to make sure +// it is performing as you expect. +// +// For more information on these settings, see the wiki at: https://github.com/PTMagicians/PTMagic/wiki/settings.analyzer + + { "AnalyzerSettings": { "MarketAnalyzer": { - "StoreDataMaxHours": 24, // Number of hours to store market data - "IntervalMinutes": 1, // Interval in minutes for PTMagic to check market trends and triggers + "StoreDataMaxHours": 48, // Number of hours to store market data + "IntervalMinutes": 2, // Interval in minutes for PTMagic to check market trends and triggers "ExcludeMainCurrency": true, // Excludes the main currency (for example BTC) from market trend analysis "MarketTrends": [ { - "Name": "CMC24h", // UNIQUE market trend name (to be referenced by your triggers below) - "Platform": "CoinMarketCap", // Platform to grab prices from (Allowed values are: CoinMarketCap, Exchange) - "MaxMarkets": 50, // Number of markets/pairs to analyze sorted by 24h volume - "TrendMinutes": 1440 // Number of minutes to build a trend (1440 = 24h, 720 = 12h, 60 = 1h) + "Name": "15m", // UNIQUE market trend name (to be referenced by your triggers below) + "Platform": "Exchange", // Platform to grab prices from (Allowed values are: CoinMarketCap, Exchange) + "MaxMarkets": 50, // Number of markets/pairs to analyze sorted by 24h volume + "TrendMinutes": 15, // Number of minutes to build a trend (1440 = 24h, 720 = 12h, 60 = 1h) + "TrendCurrency": "Market", // Trend Currency to build the trend against. If set to "Fiat", the trend will + // take the USD value of your main currency into account to build the trend. + // (Allowed values are: Fiat, Market) + "DisplayGraph": false, // Use this trend in the graph on the PTM Monitor dashboard and market analyzer + "DisplayOnMarketAnalyzerList": false // Disply this trend for all coins on the PTM Monitor market analyzer }, { - "Name": "Exchange1h", + "Name": "1h", "Platform": "Exchange", "MaxMarkets": 50, "TrendMinutes": 60, - "TrendCurrency": "Market" // Trend Currency to build the trend against. If set to "Fiat", the trend will take the USD value of your main currency into account to build the trend. (Allowed values are: Fiat, Market) + "TrendCurrency": "Market", + "DisplayGraph": true, + "DisplayOnMarketAnalyzerList": true }, { - "Name": "Exchange12h", + "Name": "6h", + "Platform": "Exchange", + "MaxMarkets": 50, + "TrendMinutes": 360, + "TrendCurrency": "Market", + "DisplayGraph": true, + "DisplayOnMarketAnalyzerList": true + }, + { + "Name": "12h", "Platform": "Exchange", "MaxMarkets": 50, "TrendMinutes": 720, - "TrendCurrency": "Market" + "TrendCurrency": "Market", + "DisplayGraph": true, + "DisplayOnMarketAnalyzerList": true }, { - "Name": "Exchange24h", + "Name": "24h", "Platform": "Exchange", "MaxMarkets": 50, "TrendMinutes": 1440, - "TrendCurrency": "Market" + "TrendCurrency": "Market", + "DisplayGraph": true, + "DisplayOnMarketAnalyzerList": true } ] }, + // ================================ GLOBAL SETTINGS ================================ + // "GlobalSettings": [ // Global settings for Profit Trailer properties + // + // ----------------------------- { - "SettingName": "EndOfTheWorld", // UNIQUE name of your setting + "SettingName": "EndOfTheWorld", // ANY UNIQUE name of your setting "TriggerConnection": "AND", // Define if triggers will be connected by AND or OR - "Triggers": [ // Your triggers for this setting + "Triggers": [ // Your triggers for this setting. You can use any of your defined trends from above { - "MarketTrendName": "Exchange12h", // Reference to the market trend specified above - "MaxChange": -1 // Maximum trend change % for this setting to get triggered + "MarketTrendName": "1h", // Reference to the market trend specified above + "MaxChange": 0 // The maximum value for this trigger to be true. (Any value below "0" will trigger this) }, { - "MarketTrendName": "Exchange24h", + "MarketTrendName": "12h", + "MaxChange": -2 + }, + { + "MarketTrendName": "24h", "MaxChange": -5 } ], "PairsProperties": { // Properties for PAIRS.PROPERTIES - "DEFAULT_sell_only_mode_enabled": true + // Any valid setting from https://wiki.profittrailer.com/doku.php?id=pairs.properties can be used here. + // You can use a specific value, or apply a discrete OFFSET or OFFSETPERCENT to the value in your default PAIRS setting. + "DEFAULT_sell_only_mode_enabled": true, + "DEFAULT_trailing_profit_OFFSETPERCENT": -50 }, "DCAProperties": { // Properties for DCA.PROPERTIES + "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": -75 } }, + // ----------------------------- + { + "SettingName": "TankingDown", + "TriggerConnection": "AND", + "Triggers": [ + { + "MarketTrendName": "15m", + "MaxChange": 1 + }, + { + "MarketTrendName": "1h", + "MaxChange": 0 + }, + { + "MarketTrendName": "12h", + "MaxChange": 0 + }, + { + "MarketTrendName": "24h", // Any value between -5 and -3 will make this trigger true. + "MaxChange": -3, + "MinChange": -5 // The minimum value for this trigger to be true. (Any value above "-5" will trigger this) + } + ], + "PairsProperties": { + "max_trading_pairs_OFFSET": -2, + "DEFAULT_min_buy_volume_OFFSETPERCENT": 100, + //"DEFAULT_initial_cost_OFFSETPERCENT": -50, + //"DEFAULT_initial_cost_percentage_OFFSETPERCENT": -50, + "DEFAULT_trailing_buy_OFFSETPERCENT": 25, + "DEFAULT_trailing_profit_OFFSETPERCENT": -25 + }, + "DCAProperties": { + //"DEFAULT_DCA_rebuy_timeout_OFFSETPERCENT": 100, + "DEFAULT_DCA_trailing_buy_OFFSETPERCENT": 25, + "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": -50 + }, + "IndicatorsProperties": { + } + }, + // ----------------------------- + { + "SettingName": "BearSighted", + "TriggerConnection": "AND", + "Triggers": [ + { + "MarketTrendName": "1h", + "MaxChange": 1 + }, + { + "MarketTrendName": "12h", + "MaxChange": 0 + }, + { + "MarketTrendName": "24h", + "MaxChange": -1, + "MinChange": -3 + } + ], + "PairsProperties": { + "max_trading_pairs_OFFSET": -1, + //"DEFAULT_initial_cost_OFFSETPERCENT": -25, + //"DEFAULT_initial_cost_percentage_OFFSETPERCENT": -25, + "DEFAULT_trailing_buy_OFFSETPERCENT": 10, + "DEFAULT_trailing_profit_OFFSETPERCENT": -10 + }, + "DCAProperties": { + "DEFAULT_DCA_trailing_buy_OFFSETPERCENT": 10, + "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": -10, + }, + "IndicatorsProperties": { + } + }, + // ----------------------------- + { + "SettingName": "ReadyForLiftOff", + "TriggerConnection": "AND", + "Triggers": [ + { + "MarketTrendName": "1h", + "MinChange": -1 + }, + { + "MarketTrendName": "12h", + "MinChange": 0 + }, + { + "MarketTrendName": "24h", + "MinChange": 1, + "MaxChange": 3 + } + ], + "PairsProperties": { + "max_trading_pairs_OFFSET": 1, + //"DEFAULT_initial_cost_OFFSETPERCENT": 10, + //"DEFAULT_initial_cost_percentage_OFFSETPERCENT": 10, + "DEFAULT_trailing_buy_OFFSETPERCENT": -10, + "DEFAULT_A_sell_value_OFFSETPERCENT": 10 + }, + "DCAProperties": { + "DEFAULT_DCA_trailing_buy_OFFSETPERCENT": -10, + "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": 10, + }, + "IndicatorsProperties": { + } + }, + // ----------------------------- + { + "SettingName": "ToTheMoon", + "TriggerConnection": "AND", + "Triggers": [ + { + "MarketTrendName": "1h", + "MinChange": 0 + }, + { + "MarketTrendName": "12h", + "MinChange": 1 + }, + { + "MarketTrendName": "24h", + "MinChange": 3 + } + ], + "PairsProperties": { + "max_trading_pairs_OFFSET": 2, + //"DEFAULT_initial_cost_OFFSETPERCENT": 20, + //"DEFAULT_initial_cost_percentage_OFFSETPERCENT": 20, + "DEFAULT_trailing_buy_OFFSETPERCENT": -10, + "DEFAULT_A_sell_value_OFFSETPERCENT": 20 + }, + "DCAProperties": { + "DEFAULT_DCA_trailing_buy_OFFSETPERCENT": -20, + "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": 20, + }, + "IndicatorsProperties": { + } + }, + // ----------------------------- { "SettingName": "Default", "PairsProperties": { - "File": "PAIRS.PROPERTIES" + "File": "PAIRS.properties" }, "DCAProperties": { - "File": "DCA.PROPERTIES" + "File": "DCA.properties" }, "IndicatorsProperties": { - "File": "INDICATORS.PROPERTIES" + "File": "INDICATORS.properties" } } ], + // ================================ COIN-SPECIFIC SETTINGS ================================ + // "SingleMarketSettings": [ // Single market/pair settings for Profit Trailer properties + // Any setting from https://wiki.profittrailer.com/doku.php?id=pairs.properties + // marked as CS (coin-specific) can be used here. + // Only coins that meet the triggered conditions will have the settings applied. { - "SettingName": "BlacklistNewCoins", + "SettingName": "BlacklistCoins", "StopProcessWhenTriggered": true, "Triggers": [ { - "AgeDaysLowerThan": 14 + "AgeDaysLowerThan": 21 } ], "PairsProperties": { @@ -82,46 +266,33 @@ "DEFAULT_DCA_enabled": false } }, + // ----------------------------- { "SettingName": "PumpNDumpProtection", "TriggerConnection": "OR", - "OffTriggerConnection": "OR", - "StopProcessWhenTriggered": true, "Triggers": [ { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "Relative", // The relation of the single market trend. Relative = Single market trend compared relative to the market trend / Absolute = Single market trend viewn on its own - "MinChange": 5 + "MarketTrendName": "1h", + "MarketTrendRelation": "Relative", // The relation of the single market trend. Relative = Single market + // trend compared relative to the market trend + // Absolute = Single market trend viewed on its own + "MinChange": 8 }, { - "MarketTrendName": "Exchange12h", + "MarketTrendName": "12h", "MarketTrendRelation": "Relative", - "MinChange": 7 + "MinChange": 10 }, { - "MarketTrendName": "Exchange24h", + "MarketTrendName": "24h", "MarketTrendRelation": "Relative", - "MinChange": 7 + "MinChange": 12 } ], - "OffTriggers": [ - { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "RelativeTrigger", - "MaxChange": -4 - }, - { - "MarketTrendName": "Exchange12h", - "MarketTrendRelation": "RelativeTrigger", - "MaxChange": -5 - }, - { - "MarketTrendName": "Exchange24h", - "MarketTrendRelation": "RelativeTrigger", - "MaxChange": -5 - }, - { - "HoursSinceTriggered": 48 + "OffTriggers": [ + { + "HoursSinceTriggered": 3 // Any coin that triggers this setting, will remain under this setting + // for 3 hours, since the last time it triggered. } ], "PairsProperties": { @@ -129,225 +300,25 @@ "DEFAULT_DCA_enabled": false } }, + // ----------------------------- { "SettingName": "FreefallBlock", "TriggerConnection": "OR", - "OffTriggerConnection": "OR", - "StopProcessWhenTriggered": true, "Triggers": [ { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "Absolute", - "MaxChange": -8 - } - ], - "OffTriggers": [ - { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "RelativeTrigger", - "MinChange": 6 - }, - { - "HoursSinceTriggered": 24 - } - ], - "PairsProperties": { - "DEFAULT_trailing_profit_OFFSETPERCENT": -10, - "DEFAULT_A_sell_value_OFFSETPERCENT": -50, - "DEFAULT_sell_only_mode_enabled": true, - "DEFAULT_DCA_enabled": false - } - }, - { - "SettingName": "StraightToHell", - "TriggerConnection": "AND", - "StopProcessWhenTriggered": true, - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "Absolute", - "MaxChange": -1 - }, - { - "MarketTrendName": "Exchange12h", - "MarketTrendRelation": "Absolute", - "MaxChange": -3 - }, - { - "MarketTrendName": "Exchange24h", + "MarketTrendName": "1h", "MarketTrendRelation": "Absolute", "MaxChange": -5 } ], - "PairsProperties": { + "OffTriggers": [ + { + "HoursSinceTriggered": 1 + } + ], + "PairsProperties": { "DEFAULT_sell_only_mode_enabled": true, - "DEFAULT_trailing_profit_OFFSETPERCENT": -75, - "DEFAULT_A_sell_value_OFFSETPERCENT": -50 - }, - "DCAProperties": { - "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": -75, - "DEFAULT_DCA_A_sell_value_OFFSETPERCENT": -50 - } - }, - { - "SettingName": "StrongDownTrend", - "TriggerConnection": "AND", - "StopProcessWhenTriggered": true, - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "Absolute", - "MaxChange": 1 - }, - { - "MarketTrendName": "Exchange12h", - "MarketTrendRelation": "Absolute", - "MaxChange": 0 - }, - { - "MarketTrendName": "Exchange24h", - "MarketTrendRelation": "Absolute", - "MaxChange": -3, - "MinChange": -5 - } - ], - "PairsProperties": { - "DEFAULT_A_buy_value_OFFSETPERCENT": -100, - "DEFAULT_B_buy_value_OFFSETPERCENT": -15, - "DEFAULT_trailing_buy_OFFSETPERCENT": 20, - "DEFAULT_trailing_profit_OFFSETPERCENT": -75, - "DEFAULT_A_sell_value_OFFSETPERCENT": -30 - }, - "DCAProperties": { - "DEFAULT_DCA_trailing_buy_OFFSETPERCENT": -75, - "DEFAULT_DCA_A_sell_value_OFFSETPERCENT": -30 - } - }, - { - "SettingName": "WeakDownTrend", - "TriggerConnection": "AND", - "StopProcessWhenTriggered": true, - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "Absolute", - "MaxChange": 1 - }, - { - "MarketTrendName": "Exchange12h", - "MarketTrendRelation": "Absolute", - "MaxChange": 0 - }, - { - "MarketTrendName": "Exchange24h", - "MarketTrendRelation": "Absolute", - "MaxChange": -1, - "MinChange": -3 - } - ], - "PairsProperties": { - "DEFAULT_A_buy_value_OFFSETPERCENT": -50, - "DEFAULT_B_buy_value_OFFSETPERCENT": -7, - "DEFAULT_trailing_profit_OFFSETPERCENT": -50, - "DEFAULT_A_sell_value_OFFSETPERCENT": -20 - }, - "DCAProperties": { - "DEFAULT_DCA_trailing_profit_OFFSETPERCENT": -50, - "DEFAULT_DCA_A_sell_value_OFFSETPERCENT": -20 - } - }, - { - "SettingName": "WeakUpTrend", - "TriggerConnection": "AND", - "StopProcessWhenTriggered": true, - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "Absolute", - "MinChange": -1 - }, - { - "MarketTrendName": "Exchange12h", - "MarketTrendRelation": "Absolute", - "MinChange": 0 - }, - { - "MarketTrendName": "Exchange24h", - "MarketTrendRelation": "Absolute", - "MinChange": 1, - "MaxChange": 3 - } - ], - "PairsProperties": { - "DEFAULT_A_buy_value_OFFSETPERCENT": 10, - "DEFAULT_B_buy_value_OFFSETPERCENT": 10, - "DEFAULT_A_sell_value_OFFSETPERCENT": 20 - }, - "DCAProperties": { - "DEFAULT_DCA_A_sell_value_OFFSETPERCENT": 20 - } - }, - { - "SettingName": "StrongUpTrend", - "TriggerConnection": "AND", - "StopProcessWhenTriggered": true, - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "Absolute", - "MinChange": -1 - }, - { - "MarketTrendName": "Exchange12h", - "MarketTrendRelation": "Absolute", - "MinChange": 1 - }, - { - "MarketTrendName": "Exchange24h", - "MarketTrendRelation": "Absolute", - "MinChange": 3, - "MaxChange": 5 - } - ], - "PairsProperties": { - "DEFAULT_A_buy_value_OFFSETPERCENT": 30, - "DEFAULT_B_buy_value_OFFSETPERCENT": 30, - "DEFAULT_trailing_buy_OFFSETPERCENT": -50, - "DEFAULT_A_sell_value_OFFSETPERCENT": 30 - }, - "DCAProperties": { - "DEFAULT_DCA_A_sell_value_OFFSETPERCENT": 30 - } - }, - { - "SettingName": "ToTheMoon", - "TriggerConnection": "AND", - "StopProcessWhenTriggered": true, - "Triggers": [ - { - "MarketTrendName": "Exchange1h", - "MarketTrendRelation": "Absolute", - "MinChange": 0 - }, - { - "MarketTrendName": "Exchange12h", - "MarketTrendRelation": "Absolute", - "MinChange": 1 - }, - { - "MarketTrendName": "Exchange24h", - "MarketTrendRelation": "Absolute", - "MinChange": 5 - } - ], - "PairsProperties": { - "DEFAULT_A_buy_value_OFFSETPERCENT": 30, - "DEFAULT_B_buy_value_OFFSETPERCENT": 30, - "DEFAULT_trailing_buy_OFFSETPERCENT": -50, - "DEFAULT_A_sell_value_OFFSETPERCENT": 40 - }, - "DCAProperties": { - "DEFAULT_DCA_A_sell_value_OFFSETPERCENT": 40 + "DEFAULT_DCA_enabled": false } } ] diff --git a/_Development/DevSettings/settings.general.json b/_Development/DevSettings/settings.general.json index e5691a5..af1820b 100644 --- a/_Development/DevSettings/settings.general.json +++ b/_Development/DevSettings/settings.general.json @@ -2,7 +2,7 @@ "GeneralSettings": { "Application": { "IsEnabled": true, // Enables the PTMagic bot (needs restart to take effect) - "TestMode": true, // If TestMode is active, no properties files will be changed + "TestMode": false, // If TestMode is active, no properties files will be changed "ProfitTrailerMajorVersion": 2, // Major version of your Profit Trailer (If you are using 1.2.x the major version is "1", if you are using 2.x the major version is "2" and so on) "ProfitTrailerPath": "YOUR PROFIT TRAILER PATH", // Path to your Profit Trailer main directory (use double backslashes for windows like C:\\ProfitTrailer\\) "ProfitTrailerLicense": "YOUR PROFIT TRAILER LICENSE KEY", // Your Profit Trailer license key (needed to change your settings for PT 2.0 and above) @@ -14,12 +14,12 @@ "MainFiatCurrency": "USD", // Your main fiat currency that will be used in the monitor "AlwaysLoadDefaultBeforeSwitch": true, // If this is enabled, PTMagic will always load default settings before switching to another setting "FloodProtectionMinutes": 15, // If a price trend is just zig-zagging around its trigger, you may want to protect your settings from getting switched back and forth every minute - "InstanceName": "PT Magic Development", // The name of the instance of this bot. This will be used in your monitor and your Telegram messages. In case you are running more than one bot, you may set different names to separate them - "CoinMarketCapAPIKey": "" //CoinMarketCap ApiKey + "InstanceName": "PT Magic", // The name of the instance of this bot. This will be used in your monitor and your Telegram messages. In case you are running more than one bot, you may set different names to separate them + "CoinMarketCapAPIKey": "" //CoinMarketCap Api }, "Monitor": { "IsPasswordProtected": true, // Defines if your monitor will be asking to setup a password on its first start - "OpenBrowserOnStart": true, // If active, a browser window will open as soon as you start the monitor + "OpenBrowserOnStart": false, // If active, a browser window will open as soon as you start the monitor "Port": 5000, // The port you want to run your monitor on "RootUrl": "/", // The root Url of your monitor "GraphIntervalMinutes": 60, // The interval for the monitor market trend graph to draw points