From 7df98bde28c738bcbc15b9bca5932122ea8618f8 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 25 Sep 2021 11:55:40 +0200 Subject: [PATCH 01/82] Mine Functions moved to Data Mining Project --- .../UI/Function-Libraries/MineFunctions.js | 2 +- .../UI/Function-Libraries/ActionSwitch.js | 6 +++--- Projects/ProjectsSchema.json | 19 ++++++++++++++----- 3 files changed, 18 insertions(+), 9 deletions(-) rename Projects/{Foundations => Data-Mining}/UI/Function-Libraries/MineFunctions.js (98%) diff --git a/Projects/Foundations/UI/Function-Libraries/MineFunctions.js b/Projects/Data-Mining/UI/Function-Libraries/MineFunctions.js similarity index 98% rename from Projects/Foundations/UI/Function-Libraries/MineFunctions.js rename to Projects/Data-Mining/UI/Function-Libraries/MineFunctions.js index 322cd5b39..3082c0f08 100644 --- a/Projects/Foundations/UI/Function-Libraries/MineFunctions.js +++ b/Projects/Data-Mining/UI/Function-Libraries/MineFunctions.js @@ -1,4 +1,4 @@ -function newFoundationsFunctionLibraryMineFunctions() { +function newDataMiningFunctionLibraryMineFunctions() { let thisObject = { addAllOutputDatasets: addAllOutputDatasets, addAllDataDependencies: addAllDataDependencies, diff --git a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js index 2f8e41550..657d4fe19 100644 --- a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js @@ -425,7 +425,7 @@ function newFoundationsActionSwitch() { break case 'Add All Output Datasets': { - UI.projects.foundations.functionLibraries.mineFunctions.addAllOutputDatasets(action.node) + UI.projects.dataMining.functionLibraries.mineFunctions.addAllOutputDatasets(action.node) } break case 'Add All Data Products': @@ -505,12 +505,12 @@ function newFoundationsActionSwitch() { break case 'Add All Data Dependencies': { - UI.projects.foundations.functionLibraries.mineFunctions.addAllDataDependencies(action.node) + UI.projects.dataMining.functionLibraries.mineFunctions.addAllDataDependencies(action.node) } break case 'Add All Data Mine Dependencies': { - UI.projects.foundations.functionLibraries.mineFunctions.addAllDataMineDataDependencies(action.node, action.rootNodes) + UI.projects.dataMining.functionLibraries.mineFunctions.addAllDataMineDataDependencies(action.node, action.rootNodes) } break case 'Add All Layer Panels': diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index 4b7784507..f641ff6b2 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -86,11 +86,6 @@ "propertyName": "cryptoEcosystemFunctions", "functionName": "newFoundationsFunctionLibraryCryptoEcosystemFunctions" }, - { - "name": "Mine Functions", - "propertyName": "mineFunctions", - "functionName": "newFoundationsFunctionLibraryMineFunctions" - }, { "name": "Data Storage Functions", "propertyName": "dataStorageFunctions", @@ -930,6 +925,20 @@ "API Maps" ] }, + { + "name": "Data-Mining", + "propertyName": "dataMining", + "UI": { + "functionLibraries": [ + { + "name": "Mine Functions", + "propertyName": "mineFunctions", + "functionName": "newDataMiningFunctionLibraryMineFunctions" + } + ] + }, + "TS": {} + }, { "name": "Ethereum", "propertyName": "ethereum", From cb010fb5c65391c11ba0956ba2d433e5b7a57a4b Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 25 Sep 2021 14:23:30 +0200 Subject: [PATCH 02/82] Data Mines related modules moved to Data-Mining Project --- Environment.js | 4 +- EnvironmentForDebug.js | 4 +- Projects/Data-Mining/Icons/data-mining.png | Bin 0 -> 9241 bytes .../App-Schema/data-mining-project.json | 42 ++++ .../API-Data-Fetcher-Bot/FetchingProcess.js | 2 +- .../SingleMarketAPIDataFetcherBot.js | 5 +- .../BollingerBandsMultiTimeFrameDaily.js | 2 +- .../BollingerBandsMultiTimeFrameMarket.js | 2 +- .../CandlesVolumesMultiTimeFrameDaily.js | 2 +- .../CandlesVolumesMultiTimeFrameMarket.js | 2 +- .../FromOneMinToMultiTimeFrameDaily.js | 2 +- .../FromOneMinToMultiTimeFrameMarket.js | 2 +- .../Indicator-Bot/IndicatorOutput.js | 2 +- .../Indicator-Bot/MultiTimeFrameDaily.js | 4 +- .../Indicator-Bot/MultiTimeFrameMarket.js | 4 +- .../Indicator-Bot/SingleMarketIndicatorBot.js | 13 +- .../Exchange-Raw-Data/HistoricOHLCVs.js | 2 +- .../Sensor-Bot/SingleMarketSensorBot.js | 5 +- .../Sensor-Bot/Webhooks/CheckWebhook.js | 2 +- ...-005-data-mining-indicator-frameworks.json | 2 +- Projects/ProjectsSchema.json | 221 +++++++++--------- TaskServer/ProcessInstance.js | 10 +- TaskServerRoot.js | 6 + 23 files changed, 197 insertions(+), 143 deletions(-) create mode 100644 Projects/Data-Mining/Icons/data-mining.png create mode 100644 Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json rename Projects/{Foundations => Data-Mining}/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js (99%) rename Projects/{Foundations => Data-Mining}/TS/Bot-Modules/API-Data-Fetcher-Bot/SingleMarketAPIDataFetcherBot.js (99%) rename Projects/{Foundations => Data-Mining}/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameDaily.js (99%) rename Projects/{Foundations => Data-Mining}/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameMarket.js (99%) rename Projects/{Foundations => Data-Mining}/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js (99%) rename Projects/{Foundations => Data-Mining}/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js (99%) rename Projects/{Foundations => Data-Mining}/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameDaily.js (99%) rename Projects/{Foundations => Data-Mining}/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameMarket.js (99%) rename Projects/{Foundations => Data-Mining}/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js (99%) rename Projects/{Foundations => Data-Mining}/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js (99%) rename Projects/{Foundations => Data-Mining}/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js (98%) rename Projects/{Foundations => Data-Mining}/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js (99%) rename Projects/{Foundations => Data-Mining}/TS/Bot-Modules/Sensor-Bot/Exchange-Raw-Data/HistoricOHLCVs.js (99%) rename Projects/{Foundations => Data-Mining}/TS/Bot-Modules/Sensor-Bot/SingleMarketSensorBot.js (99%) rename Projects/{Foundations => Data-Mining}/TS/Bot-Modules/Sensor-Bot/Webhooks/CheckWebhook.js (99%) diff --git a/Environment.js b/Environment.js index 38ae6186b..62c9cb43b 100644 --- a/Environment.js +++ b/Environment.js @@ -4,9 +4,9 @@ exports.newEnvironment = function () { WEB_SERVER_URL: 'localhost', CLIENT_WEB_SOCKETS_INTERFACE_PORT: 18041, CLIENT_HTTP_INTERFACE_PORT: 34248, - PATH_TO_DATA_STORAGE: './Data-Storage', + PATH_TO_DATA_STORAGE: './Platform/Data-Storage', + PATH_TO_LOG_FILES: './Platform/Log-Files', PATH_TO_PROJECTS: './Projects', - PATH_TO_LOG_FILES: './Log-Files', PATH_TO_PROJECTS_REQUIRED: './Projects', PATH_TO_PROJECT_SCHEMA: './Projects/ProjectsSchema.json', PATH_TO_CLIENT: './Platform', diff --git a/EnvironmentForDebug.js b/EnvironmentForDebug.js index efb5fec7b..621af7b3c 100644 --- a/EnvironmentForDebug.js +++ b/EnvironmentForDebug.js @@ -8,9 +8,9 @@ exports.newEnvironment = function () { DESKTOP_WEB_SOCKETS_INTERFACE_HOST: 'localhost', CLIENT_HTTP_INTERFACE_PORT: 34248, DESKTOP_HTTP_INTERFACE_PORT: 34249, - PATH_TO_DATA_STORAGE: './Data-Storage', + PATH_TO_DATA_STORAGE: './Platform/Data-Storage', + PATH_TO_LOG_FILES: './Platform/Log-Files', PATH_TO_PROJECTS: './Projects', - PATH_TO_LOG_FILES: './Log-Files', PATH_TO_PROJECTS_REQUIRED: './Projects', PATH_TO_PROJECT_SCHEMA: './Projects/ProjectsSchema.json', PATH_TO_CLIENT: './Platform', diff --git a/Projects/Data-Mining/Icons/data-mining.png b/Projects/Data-Mining/Icons/data-mining.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b8fa7917eae2a6cb866efea415202f98afaed2 GIT binary patch literal 9241 zcmd6MXIN9u_vfTg6e)^QLB+W`Rl7Yxsv z0f2-bk${&Q9@g&k(BMHlK+h_`+}AZA*y*+lICI0-*+u$-x09QTnTykn5Wnv(CjmHA zcj5e*t9OPLMzFCtlMzzO!5u!O$C`H3aG!S;Gv|4ERiNBh>6UNGwc9&Sh$=j*t$NNE zzrT{GPw z-7`y>rKg9qD71F8Q8()$U8z}j29Ik;NC&09b2DUgI>aOi0dxHS%}-I&vifjO*zZ5o zLe;~X4eC!jL|=sjU69AfXuQ%23Ra}mbfYi<%hZILErqEB`btaqpUk_@!>7!vrxI+{ z&^^*ZzZ0BTH7|6zUAXU?Au*$~%D;6@CKKp^8`1zoKfK3By?#m%^+lf>S3i+p!ak63 znimkxJ6kv^3L@v@c!6FEqyZ`1pW6;VaVhX~E|9|ylB*^e15A(Fbh0JF<4%<+UE zGRg*xb9N$Mr%v48Y3D>)0gZKu2M6_P3rRe1v)KqGona0aHG=RiS08ZjiOg zgR{|AH{lhN2Qv&r*2aOcU#Z-<@mo?Ex}b+dJ&E2|tLpofb5d#h*fH+C)=j|h#9WnG_RJ9+bhxPTzMEh4%dXwC3|G`=EisS!n5)0l6in1QUfZazkvSBkma5A~1Dl33703a@Ru_M_njfgBQVaIbM1m;j7wsFz-r8p>u7wuYkn3>Tq ztM$j*B(fEPkP0tobp;pi-w=#j2_*QS0LEVd>rEmL{P#7nFU%^Y@o|(8ZD=>}pseMy z$MO*bO*9hIz%MYgp?L)iX#3wzIUx*-c8n(F#!XNFpr?P%iNwm?2C7g<472Gh^It!9 z&NCFoPZopKL179%#Fj1kritTjU4dubO;z~b3#{f+B)m>A4MSlR6)w}1H)OYhKX3uu zTyquvG5z-iByI#|b*zhh{x4&uA0toGGT$pN8E;Wi;cXsXCOWiCS+I3a8svW+`iI1F z-36YgA{4mMxZCg%{^eVG4M$ibe4{)-uJ^}>$gU=Y<9yrqGgFrUkTde4&s**XZAgGo zHDLdmc>$}jQ4@P|{?uJpYOiMGGv-_;wo8a8#NH|;(b$utor11Zo#|XA7llb8N6NBG zXBO{H&5Ue7{2gdhws9E;2D z_ho&e6cy)gjhOS`4ketHbVIH+7y}jC;>h1$C$0C<5#TA0*1N8LhFE|#%UHivh?N3=BDdb9Yq(22z0OEj1NzNy&myob)H!RTA{Y92NwZG-%2>QW-aa zTnD;DObC3{Y|~-)ma(jqKT!fC0QeeQ+or3r3U2-G%Hv5@MF7WrQ9UHqj}(Lo9{>~9 zN_0Uu>LVyJAhyqKDw`c=fd+0!KrnRv!??Hys!3iBuHy%Q$5wuVm}!P0JTu5#a_c|? z9P@k&-lkWIBEw>GrUmkg#LS~eoH8#GCrJ9H!;bv-vh+=$wKDUw^u6Cq1UF95s))92 z?c$b%D*}u~9;Rqmv1k$Y*1w$K_%{wqPGpBg6CXVW?<&}Xk z*!lw}*77tWoQj+9y_=&b;*~G;tGbqXhp)NC`Ge+4uX9lYqKc` zjw^VJFo!)dG98QG;7OJepdx$?JO9b&+TYM3TKLU$dW>Y=kU?a@{tRo4sNZUQ=Xt|+ zc9k^%L$U(Qn@v8|M^U&%91vp$E5Z(adu|w>&&+-PkRd3_7_DR(#LE()2hqxnl^d;N$%n+tQUOJ62J-7T%Xu`?U zne02Kp*Hy=h7{GzT6Jjn%>hSk`OEw2=yv9r;gWsehOL{)*9PGj1j7A^Q=$%g2#x#9 zwT{M^>$8m^MCCRBuL~T9r8b44!q>>6oUn9UQwEpb6&Hd0QaJ9Vc!6qF;M8vwe^`_2 zJvFPWbTyRFFgM7G?_23&n*u{kKBBUj2-EPI*2vQ^hA^aRUX zXFyN0zC;yM{or4meg;DrE-jWt+IkbJ9_a)7QvOh=ExddLSn+U7-Os@%oDjfVvlyya zEWV%$e!ZcgvXF(OjsE<?39*A1g zf$7U_C9n4*GOg9K-TUFXYffUv+pH~X-zhKHxfjoMs}Uz6&#-lU5FSRIZ@ z&Lr&N{uK42Knn)wY_?AaNZ|sG7Vv8~o_~!wH2DZGoUc$XCQD@banc5c7dYrZh|!%mnd7)~F0h~c(<2!KOUqaC0PP$-q6fsOwD9qj_ZbM!R$D#`S` z_mGE^t)e-YAT|;TTg(07ROes1`&!eoP9X@|0O*%?uX{s<+W{Qnj_5AS4;~ML-~(Z! z-+JmoV%dlRj%WxCFS;jX2c|>>#({X2`k6WuCkxo!bR=P0Iq3waDUNH+=tD1NB6vmX zGr(>OZ~D9mcoYaMLXbiccMm~z|H%S`YG$Apw{#6ZAbP_Q9z1ioA4%v-O^j-TQ=q-; zFRXzZ$I$|ky&*|K5aBD2ISk`M>)&LP(F4boMA~bTD){6La7zPfG*Pett29fe&xtTZncKi2e+iH!X|a!X z2*iHz0k|nr$>L=o76WVA=2Hk8iL(Z{cnHgf|%*$NQl zO2^4nx(LTPYuq|Vc4G-!iE@b0?T1*Z|xL zTvar}^yXk_!|gI)r(r-o7wldyWUH9`YEc{_gc&JBmRX}Tue9H^FDVn4>cAigN8H<; z{Z^b)hibF7f#+6L9OA1A1Zfy-2p_x$V2R-vni-qH3iASE=^SKR2LaY+)=pSYyX6U9 zFZ2JtYKZKsFUF{)RN$WEm3?b1J7}SuN}x89LT%$ z`LiwpE}<|j96A+evBDs>nIrEi>?Kw^cvZ%;jz}?m-MJB2iX07`^WMwk1K#OeGo0M1 z)t2TBAu$rL_Dk>s8^I>9DGD!Dr2$8*2}2kR-GmDstDfUMyMWX#5{s60=0D~n9_>Sb za8oje(mYHFEH{d(-Gwh=yl{>CKMkhJjWbAq$chT@ROj3`rQ!9zL&cZGGyvcmoDlp5 zkrl`NpP9B}{x%T#eKwyz@TzdE8_a|g-w_GzGO<3&K=xwUT)wU z)VRDc+|hX$`?Dx^s$-!rLx7dEkg@QS3N=P9HDs_AwOIve^f4$xsZJwIRpWD=X zl}Bt=!{WTU0utAhu6XmIVDOfa=8eG!O|R*ME*)A_B=!;cUl)=TFLzY`!5wWbqEPNg z2>uIucvxa^dfGv!CR=J^^TAd|a`gQM>E(ohd zqZD^#Fs0g=H{6~;L$l1QPSR&DoNP?C&t&#)6lT=uEjN|cDI#|R?HqG1DM_}a4|#Db z{a_zIBcXE}(tB>}`rDD+nXRMWShts?$|&uDhk2!8zfmmHd=r0#9ez%Jaz%RiFhuFY zBsM*woj;ux-+_OpB#4}@_Ni`vYU3wFM8mnvi>Zj4(aJns)u6hPsXG+kznV=R?C2OR zicFWzrLz4ggZjZNOYXbHn~_hMent+RF5K_0ftfcJB9Q?b>_yG0VEuNN!Z~GgbQ(M4 z1Fbn`L3fT_{&6~Z|25@hqXS4|bb5p0LusI9KJSBCh@)LM!lvs@OC2D1VcPY-`}^KV zn9Tky#;mpuVC_WO9G7t9!2#k0<%-$nrUq73JWVi-|55)*UztmjZ&YK$CIjt8GH+{) zDTl>D?a5b*fg^X;>o==(nmuXIk}|yXJH1A8{#O!4eIu8_&X3sqYOu=_HM|Q0+*9Dx z$m2c3xQ-rvyBKk#>4QPVmk5E|@(rsAJ8zNl7=pr{l5ZsU?nQDRwT7dUNbDeg+kB!D z5K|@hWi;Z}A@b%I(+Y#c4s8sWsnyTLX0Ta}togGT@eC;T4yon`WYg-etZ@{5(r>{> z6(BKg>OP3r4lHl}xoL7vbEKjGA_z8)D+pjM?m+aR+bjZTtqr1qtV0iRg5msrr>Fw3 z57)s4**B&8&^V+~oBgNhuHlepPzDqwT6=B0bNW?rSlBiI=Ng=TtUIMUHO_PTY7;rY zgrLBf{|NO^FAJryK5T|(xLtBsR@w&aH*bt&Iu3U((Jb&6nngaPY;(N*XT8Rv`m(IZ zMOMguWE+eiJwHP;GVNk%c-l?L0X1hu-1Vr#!r3e_rs_v6h5YyyZW4kRE~}Zho4jKH zzS0|hjtLBpOc=TL<;X(+YRq7rFP^=6TT^L)#rW5Db&lcg{p$8UiIaD{eWpDhh_{dK z4q9Y{Z++7C!Z4dJJSGn|9tcya>*K(`t5VM~(3D>(vdP4vFn#cuc720BTTvx%TW&whub4)UM}GNcT=2i~We!6Fi;UuZF2+ZdzE+ddT{NMp zvaZ1)BkK)HrYEaq>Tk{bR%b!Fs-!uYe$@d|Zoidf6GfxXFWQ#le@Lk>6NFoq96E)- zz&1o@&rOl6vhu}=d-QShiMWcddql}POCt?pmbVVDL_6DDl1Fy~ftB@9!S~`!1Lmn@ zK@;+jmp7C7z0cQGx4r0H?R}p%6fO$4cj=LA%9ZD|C}@x7bR=G&Q^tbX(oau1s?DG< z`$sz18BIJXUJZ3RpXq;sSGS)|bJ1kjyi;B;mufBJQ`XecAqRX}*Gbsz+{=#em)YdM zBADD*YAalx=J)<4bL7OP#RiN?*Q`%Vz%}vId-A=z1+porHkYEC@8PXVEZ)1ZWm{j- zhUhT`KX!@I8t}}}kb<|@T_;(W<+chQKY((ItjGm-DH}$GcLkY?)j#-7mda<1nUEJWh&RVV#D5ua~1)HISbT;XC?uxca%yK+VI8g z2*FV=k*w!kP<@LZ9v{ChTE0`J7pqqeELePCUshT3v7BMLa%of{-9NSxG#*=yz}tTH z!_QGrQ?!z4j0V0|xu}U$SSCnZb#{=Z}r--L#w6S_~!XY5n>9Ve7dJStKQa zRo;}%wz^gOC(c#<;;?|B9kjFlBBKfu!$t%B60<3(7y&tIHPbsh+d6~&O6-`dgIwRb z;@vKUp23TroQHkbHsn7a@Mc4imI|zSH(sz$n@^?fV*Q?{^{6L_y+1}LbmxVh28d*l zsu9nFF;}2s_S@9B@@gIF*J0&mNW#U3fM6w+VitrRhRi<;$mKd<@4O$RoDbOF_4uD% z^UAg164Ez$cCT+{pIMz({$~R45j);|6oFQWPGIjVk&4Yf@_tDXj~2d(||pu-Cb@0Daw_<+u)9^YzEiNlsE3J zWap@*VRa5`R|m2wiEy5~as4uIyq#yxTFL3jW@|iFNp#=c*SiXK1)Xfqq~Xol&dR*U zpU*@3bBWL6PLkAUc)K@OtX_U9S?*fu4GveeFQa+3&ahXkapyDN zX$i@F(#E;aSzI7j5aA~;{atP7RKHAUcQKaY2re|%=ivM%;k4@k1tkaxDdn* zK7Ln`8cDm}l)AuT8!0jy6U3}#hs>%5O2N}Lv7st%Vt&K z_*{aU>hRt>2Jf>W;h^W0PxJjhPS^S%b(^6%mOtwoiwY5j8YtohE$oCbNI4@N(*fV;Y2-E`V7Lo8elAEM{nH}u#!t34 z9vlvhu(w4$U06=7>c_qrtUQ9U9$wYWT@?j}QpktRmk5rv0*8MI;Ho@V730fXf!Pvp zFCXB4I;L(S_ARK2_HkMnnELPzv`Otm%AQsv?!Yj$Q7%+4i9M@&y9GlfL!=dn7R^W5?(T)@Vv7AC)u=t7p(IkpSAIX2wBOUB`~Si zZ{i_V{O*DdvIxkM84rakqr{F?1K{2lOYr#f?MdogDx>rcRkwQi*}{ju_sMld?X=5{ zNe#qj$ptKrDXeR;BBWdw>G+~kZc6Qpzc-dPRV|oyAjMDtFnsXLxXsQL*E;_r&Az8k z2X~6{NWQ}l`kuQ2%_VeOp}+A&1UN{***T!25(y5aGYwZQefCu3UEe8)1m;>pcU8T8 z?F`q`qqiF_UfWYKy+nNz245v5pUEx;JMB)&&;G7VK;mcxx48it7hm%mxu9<0{v}M+ zY3q_IN;>=?NI|5S)z1D2HQc0eOBUe!d&p>?iyJgFK!ZaiLk?MUzot4h2@ih0DqzW>0LnN_umZnQytXX+6W^Jx_6bn zCC$}zmC__+>66upRl#e;EFqA;9(_9ZJE=xS-n&FRpoG<3KNXPu+e2oDh6y+iW?mgm zWc1B2e0>J>v=%-0il`o+^A&M^FT2%S=Z>suE-qw6VlF(59?b7UZO+y>VJC)0jZ5?_Xg~&?mj_3~#_q3Mi zLk=_P@302R297t~5JRR=uuLJo{p6!UH)#-HR@>!fSHYq_cC9w~P;a91+>SECWUsA@ z9-8KTZ7ecx(p{9-MLh%pu03P@48+VTJI=lkc2o+gNB<1M91ARB^++MX9{c+f2m6}7 zSdWL~F`rDd7bOs$3?@W=A-AZB;9t;09?n8&P*!QCf84lMN}^Mf`K@&RCp%2(pJIGi zV^2NJ2>RfMojm{o>`EmZpROe|?I2KIdVJN>TB0VG-wQWhXWrH%m@@7As0F%cV57R- z^9Q^po?L#*&lIg3RG5!9(_yc_Z8>%b5c98C>B>*YpV?IU9B3yjBuXAw=}!{4%v{7m z@Z8j4+84gZWArk*NA+ry3d*ma7wgQckD(9-=lArJ8?Z&4mOKVxkEgR)?q=@&=*9Ag z+4Rn7-5+(w8@H||G3D?g4fG&&Wv#P@RKDE_b)Wz**)^M|>ppj}WjNA#&M#5cJ?AHN zf|SFoteM^~`iYa`9ghA<+nrr>+rkEW(|#J7Q6OB;>BEMHjrm92o>z7~@Mc08&!TBV zZQvGBP60_Un}xOt+t)%#^x!d_R0r#H`FnFl}# zg-h$9Oy}LR-4c54H-$y%NdvqvV+4%~TN=tt?SzcQ~-WyNmv=8T)EDpZj2h&*zj#nD=i{^7W&hziBa9 z0aYu9cd3h3_A_WP51^K7B1n+!aK9k+iR9#)dh(mX+7AmX6~5xH#rPC1tE-T?>Uw9J zHF_YjRJx?r7D2x`y189po^f~uM@zS6&N5PuOoIwLzpgtNqf0I$5&iGxC>2R57x7v* zwxPk-Mqa_=d40wn=Xf*%na$O`+e{Pt$z`t6-`&iG16nq6e7}w^nA>@KXgfJ}@Z?IfrB1sBZmFUG4yB&o zs_(Ydy3xBeuj>VQ3EK7SRcf5O3@dc(;KKO)c)?%4mi#DWn=(0W>%#kprt@08%!zde z18*_ic(7$>5q-$Ep!}Kjt!pmKX1`v+0^Rj!fKeCyCEV=p)p%XGA#?Fn+0?kLH#6f$ z5Wf12=X!No|EmZVFSr`H)8QKwE>hQx zEH=uh$SF0Rqg2rf@>%;;=I;Ych8xORt?EY4WxaC5w5=7S&*TMaQ)k29i^VCbF>;!$ z*W~r>=ZX*hvENrPCx`%|<11@1@z9LDm)BzRXTpHYvT0wv-aXFJnXL22e%J*6@^%r@ z>Uv6pcNxQ?5x>U#F=I`9`rr`F+Z;K^H@LK!m+s*m%*>FRqnvM_^HuzuM>_|yjIzt< z^0i_udci`Hc=MhftloNXDQ|{89ftA98$sBry5z7UpEAWnBw2}ne(EL5egK|!gBk2(>*zznN4inhD4sr13`^@xJLjYO`6csVQSNm@+HsX=-SZ?b@R zukU+Z8!1r5p70H~RRx&peeFYmL~fvR?-ktM{!i=We{^8}Zw52~7`SWm|1$jT_WU2w zN_mhy!Q#^;)hf~d^u_5U$bQraJ4~-Uq}#cqy;2t3AUitLC`%{Xt`3s%!7(<@vXyHS zn?7x$KZ9(KlCAAf0gtbUm3qzZu?Qw-Um)jarBi?LI8L}C}`S`6?H@5Q; zwjcb}T%FM{(kA7JwWalYM2$dqfv_ z1n4ElR&8wBpzt~_(RulEle6_neGOl7`n#)FTF$mQ*z}k|-w%a1G4h+i@sVdX#LOps$%5hRgZU9$sT{W!lu{vn0LPoZk()K zv+`p~DuWw!n+(#@`Dft5yjQF44X1a!?Qi)L^U5}idmWBAkdIJ;R&1VB9B?rt8%%KI7{+LeAXCUH6_V$QQzaa_fbuu@buRC)E447|9Xu3fKY0<26W z+6 zTHlMT>x}L6Y+ozh(A{6f?U;k&FSofbxvScr#}(06oK%)tSRY516q6K;>Ax^!vp2vo ztL`HfJ1X(oFUfXTMS|*Sw{c8vGD<}6PHlT-&q}|greKAZsgFppV5J&gUd%jYKo$7? za`2vgp!m7nuM+FQYvnr|t*FhOphtW&G&A}#zN+Iz`i9S!QN1uJU=r`Ln0{?YL7N@n z>(?1aOK%L{P!?I0a)Z52B%EMzsrcIA;v6cYh59CGs&|)pU-uX4#3x26aXBV%con>*GTKj+j^J%c$ys9=<9%vyx6wd?(|2)hLFa|3$h!!{esK6WdJyEH~L) bVnCPM^=!+bP54_X02lO3&KI3^y!YP#zGV61 literal 0 HcmV?d00001 diff --git a/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json b/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json new file mode 100644 index 000000000..d31a511cb --- /dev/null +++ b/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json @@ -0,0 +1,42 @@ +{ + "type": "Data-Mining Project", + "menuItems": [ + { + "action": "Add Missing Children", + "label": "Add Missing Children", + "relatedUiObject": "Foundations Project", + "actionFunction": "payload.executeAction" + }, + { + "action": "Delete UI Object", + "askConfirmation": true, + "confirmationLabel": "Confirm to Delete", + "actionFunction": "payload.executeAction", + "label": "Delete", + "iconPathOn": "delete-entity", + "iconPathOff": "delete-entity" + } + ], + "isProjectHead": true, + "isTitleAllwaysVisible": false, + "addLeftIcons": true, + "isPinned": true, + "positionLocked": true, + "icon": "data-mining", + "childrenNodesProperties": [ + { + "name": "projectDefinition", + "type": "node", + "childType": "Project Definition", + "project": "Foundations", + "autoAdd": true + }, + { + "name": "mines", + "type": "node", + "childType": "Mines", + "project": "Foundations", + "autoAdd": true + } + ] +} \ No newline at end of file diff --git a/Projects/Foundations/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js b/Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js rename to Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js index 1c3a6ef54..a343e5684 100644 --- a/Projects/Foundations/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js +++ b/Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js @@ -1,5 +1,5 @@ -exports.newFoundationsBotModulesFetchingProcess = function (processIndex) { +exports.newDataMiningBotModulesFetchingProcess = function (processIndex) { const MODULE_NAME = "Fetching Process"; diff --git a/Projects/Foundations/TS/Bot-Modules/API-Data-Fetcher-Bot/SingleMarketAPIDataFetcherBot.js b/Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/SingleMarketAPIDataFetcherBot.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/API-Data-Fetcher-Bot/SingleMarketAPIDataFetcherBot.js rename to Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/SingleMarketAPIDataFetcherBot.js index b0b9dea23..b87eb3483 100644 --- a/Projects/Foundations/TS/Bot-Modules/API-Data-Fetcher-Bot/SingleMarketAPIDataFetcherBot.js +++ b/Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/SingleMarketAPIDataFetcherBot.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesSingleMarketAPIDataFetcherBot = function (processIndex) { +exports.newDataMiningBotModulesSingleMarketAPIDataFetcherBot = function (processIndex) { const MODULE_NAME = "Single Market API Data Fetcher Bot"; @@ -41,7 +41,8 @@ exports.newFoundationsBotModulesSingleMarketAPIDataFetcherBot = function (proces let botModuleDefinition = TS.projects.foundations.functionLibraries.taskFunctions.getBotModuleByName( TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.config.botModule ) - let project = TS.projects[TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName.toLowerCase()] + let projectCodeName = TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName + let project = TS.projects[PROJECTS_SCHEMA_MAP.get(projectCodeName).propertyName] let botModule = project.botModules[botModuleDefinition.propertyName] let moduleFunction = botModule[botModuleDefinition.functionName] botModuleObject = moduleFunction(processIndex) diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameDaily.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameDaily.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameDaily.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameDaily.js index e7a62f89e..8566dfd9b 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameDaily.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameDaily.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesBollingerBandsMultiTimeFrameDaily = function (processIndex) { +exports.newDataMiningBotModulesBollingerBandsMultiTimeFrameDaily = function (processIndex) { const MODULE_NAME = "Bollinger Bands Multi Time Frame Daily" const CANDLES_FOLDER_NAME = "Candles" diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameMarket.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameMarket.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameMarket.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameMarket.js index 77415d46e..70c615653 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameMarket.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameMarket.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesBollingerBandsMultiTimeFrameMarket = function (processIndex) { +exports.newDataMiningBotModulesBollingerBandsMultiTimeFrameMarket = function (processIndex) { const MODULE_NAME = "Bollinger Bands Multi Time Frame Market" const CANDLES_FOLDER_NAME = "Candles" diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js index 56962ad7f..e50e98bc7 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesCandlesVolumesMultiTimeFrameDaily = function (processIndex) { +exports.newDataMiningBotModulesCandlesVolumesMultiTimeFrameDaily = function (processIndex) { const MODULE_NAME = "Candles Volumes Multi Time Frame Daily"; const CANDLES_FOLDER_NAME = "Candles"; diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js index ea86ca2f6..51f986645 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesCandlesVolumesMultiTimeFrameMarket = function (processIndex) { +exports.newDataMiningBotModulesCandlesVolumesMultiTimeFrameMarket = function (processIndex) { const MODULE_NAME = "Candles Volumes Multi Time Frame Market" const CANDLES_FOLDER_NAME = "Candles" diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameDaily.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameDaily.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameDaily.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameDaily.js index 93c384207..8ca4f8a82 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameDaily.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameDaily.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesFromOneMinToMultiTimeFrameDaily = function (processIndex) { +exports.newDataMiningBotModulesFromOneMinToMultiTimeFrameDaily = function (processIndex) { /* This module is about converting a One-Min Daily typeo of data set into a Multi Time Frame Daily type. diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameMarket.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameMarket.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameMarket.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameMarket.js index 6d943ed83..6c07fa35f 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameMarket.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameMarket.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesFromOneMinToMultiTimeFrameMarket = function (processIndex) { +exports.newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket = function (processIndex) { /* This module is about converting a One-Min Daily typeo of data set into a Multi Time Frame Market type. diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js index f6f23ce0c..68129a3ff 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesIndicatorOutput = function (processIndex) { +exports.newDataMiningBotModulesIndicatorOutput = function (processIndex) { /* This module coordinates the actions to be taken to generate an indicator output. It is used from both Multi-Time-Frame-Market and Multi-Time-Frame-Daily frameworks. diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js index d4815fe6b..588914903 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesMultiTimeFrameDaily = function (processIndex) { +exports.newDataMiningBotModulesMultiTimeFrameDaily = function (processIndex) { const MODULE_NAME = "Multi Time Frame Daily" /* This module deals with Daily Files, that are data files for Time Frames below 1 hour. @@ -25,7 +25,7 @@ statusDependenciesModule = pStatusDependencies; dataDependenciesModule = pStatusDependenciesModule; - indicatorOutputModule = TS.projects.foundations.botModules.indicatorOutput.newFoundationsBotModulesIndicatorOutput(processIndex) + indicatorOutputModule = TS.projects.foundations.botModules.indicatorOutput.newDataMiningBotModulesIndicatorOutput(processIndex) indicatorOutputModule.initialize(callBackFunction) } diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js index 739a7dc5d..bc01d3b6a 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesMultiTimeFrameMarket = function (processIndex) { +exports.newDataMiningBotModulesMultiTimeFrameMarket = function (processIndex) { const MODULE_NAME = "Multi Time Frame Market" /* This module deals with Market Files, that are data files for Time Frames of 1 hour and above. @@ -24,7 +24,7 @@ statusDependenciesModule = pStatusDependencies dataDependenciesModule = pStatusDependenciesModule - indicatorOutputModule = TS.projects.foundations.botModules.indicatorOutput.newFoundationsBotModulesIndicatorOutput(processIndex) + indicatorOutputModule = TS.projects.foundations.botModules.indicatorOutput.newDataMiningBotModulesIndicatorOutput(processIndex) indicatorOutputModule.initialize(callBackFunction) } diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js index 85baf3204..d517c3c4e 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesSingleMarketIndicatorBot = function (processIndex) { +exports.newDataMiningBotModulesSingleMarketIndicatorBot = function (processIndex) { const MODULE_NAME = "Single Market Indicator Bot"; @@ -40,7 +40,8 @@ let botModuleDefinition = TS.projects.foundations.functionLibraries.taskFunctions.getBotModuleByName( TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.config.botModule ) - let project = TS.projects[TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName.toLowerCase()] + let projectCodeName = TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName + let project = TS.projects[PROJECTS_SCHEMA_MAP.get(projectCodeName).propertyName] let botModule = project.botModules[botModuleDefinition.propertyName] let moduleFunction = botModule[botModuleDefinition.functionName] botModuleObject = moduleFunction(processIndex) @@ -276,22 +277,22 @@ switch (TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.config.framework.name) { case 'Multi-Time-Frame-Market': { - processFramework = TS.projects.foundations.botModules.multiTimeFrameMarket.newFoundationsBotModulesMultiTimeFrameMarket(processIndex) + processFramework = TS.projects.foundations.botModules.multiTimeFrameMarket.newDataMiningBotModulesMultiTimeFrameMarket(processIndex) intitializeProcessFramework() break; } case 'Multi-Time-Frame-Daily': { - processFramework = TS.projects.foundations.botModules.multiTimeFrameDaily.newFoundationsBotModulesMultiTimeFrameDaily(processIndex) + processFramework = TS.projects.foundations.botModules.multiTimeFrameDaily.newDataMiningBotModulesMultiTimeFrameDaily(processIndex) intitializeProcessFramework() break; } case 'From-One-Min-To-Multi-Time-Frame-Market': { - processFramework = TS.projects.foundations.botModules.fromOneMinToMultiTimeFrameMarket.newFoundationsBotModulesFromOneMinToMultiTimeFrameMarket(processIndex) + processFramework = TS.projects.foundations.botModules.fromOneMinToMultiTimeFrameMarket.newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket(processIndex) intitializeProcessFramework() break; } case 'From-One-Min-To-Multi-Time-Frame-Daily': { - processFramework = TS.projects.foundations.botModules.fromOneMinToMultiTimeFrameDaily.newFoundationsBotModulesFromOneMinToMultiTimeFrameDaily(processIndex) + processFramework = TS.projects.foundations.botModules.fromOneMinToMultiTimeFrameDaily.newDataMiningBotModulesFromOneMinToMultiTimeFrameDaily(processIndex) intitializeProcessFramework() break; } diff --git a/Projects/Foundations/TS/Bot-Modules/Sensor-Bot/Exchange-Raw-Data/HistoricOHLCVs.js b/Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/Exchange-Raw-Data/HistoricOHLCVs.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Sensor-Bot/Exchange-Raw-Data/HistoricOHLCVs.js rename to Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/Exchange-Raw-Data/HistoricOHLCVs.js index 34cbb378e..ca299e350 100644 --- a/Projects/Foundations/TS/Bot-Modules/Sensor-Bot/Exchange-Raw-Data/HistoricOHLCVs.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/Exchange-Raw-Data/HistoricOHLCVs.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesHistoricOHLCVs = function (processIndex) { +exports.newDataMiningBotModulesHistoricOHLCVs = function (processIndex) { const MODULE_NAME = "Historic OHLCVs"; const CANDLES_FOLDER_NAME = "Candles/One-Min"; diff --git a/Projects/Foundations/TS/Bot-Modules/Sensor-Bot/SingleMarketSensorBot.js b/Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/SingleMarketSensorBot.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Sensor-Bot/SingleMarketSensorBot.js rename to Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/SingleMarketSensorBot.js index 479524f04..32b7e8c16 100644 --- a/Projects/Foundations/TS/Bot-Modules/Sensor-Bot/SingleMarketSensorBot.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/SingleMarketSensorBot.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesSingleMarketSensorBot = function (processIndex) { +exports.newDataMiningBotModulesSingleMarketSensorBot = function (processIndex) { const MODULE_NAME = "Single Market Sensor Bot"; @@ -41,7 +41,8 @@ let botModuleDefinition = TS.projects.foundations.functionLibraries.taskFunctions.getBotModuleByName( TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.config.botModule ) - let project = TS.projects[TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName.toLowerCase()] + let projectCodeName = TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName + let project = TS.projects[PROJECTS_SCHEMA_MAP.get(projectCodeName).propertyName] let botModule = project.botModules[botModuleDefinition.propertyName] let moduleFunction = botModule[botModuleDefinition.functionName] botModuleObject = moduleFunction(processIndex) diff --git a/Projects/Foundations/TS/Bot-Modules/Sensor-Bot/Webhooks/CheckWebhook.js b/Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/Webhooks/CheckWebhook.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Sensor-Bot/Webhooks/CheckWebhook.js rename to Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/Webhooks/CheckWebhook.js index 23d8753c4..ff45cd70d 100644 --- a/Projects/Foundations/TS/Bot-Modules/Sensor-Bot/Webhooks/CheckWebhook.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/Webhooks/CheckWebhook.js @@ -1,5 +1,5 @@  -exports.newFoundationsBotModulesCheckWebhook = function (processIndex) { +exports.newDataMiningBotModulesCheckWebhook = function (processIndex) { const MODULE_NAME = "Check Webhooks"; const FOLDER_NAME = "External-Signals"; diff --git a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-005-data-mining-indicator-frameworks.json b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-005-data-mining-indicator-frameworks.json index 53840f973..24323fa1a 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-005-data-mining-indicator-frameworks.json +++ b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-005-data-mining-indicator-frameworks.json @@ -90,7 +90,7 @@ }, { "style": "Json", - "text": "\"botModules\": [\n {\n \"name\": \"Candles Volumes Multi Time Frame Market\",\n \"propertyName\": \"candlesVolumesMultiTimeFrameMarket\",\n \"functionName\": \"newFoundationsBotModulesCandlesVolumesMultiTimeFrameMarket\",\n \"fileName\": \"CandlesVolumesMultiTimeFrameMarket.js\",\n \"folderName\": \"Indicator-Bot/Candles-Volumes\"\n },", + "text": "\"botModules\": [\n {\n \"name\": \"Candles Volumes Multi Time Frame Market\",\n \"propertyName\": \"candlesVolumesMultiTimeFrameMarket\",\n \"functionName\": \"newDataMiningBotModulesCandlesVolumesMultiTimeFrameMarket\",\n \"fileName\": \"CandlesVolumesMultiTimeFrameMarket.js\",\n \"folderName\": \"Indicator-Bot/Candles-Volumes\"\n },", "updated": 1621703869144 }, { diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index f641ff6b2..9982a1af8 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -519,114 +519,6 @@ } ], "botModules": [ - { - "name": "Single Market Sensor Bot", - "propertyName": "singleMarketSensorBot", - "functionName": "newFoundationsBotModulesSingleMarketSensorBot", - "fileName": "SingleMarketSensorBot.js", - "folderName": "Sensor-Bot", - "botType": "Sensor Bot" - }, - { - "name": "Exchange Raw Data Historic OHLCVs", - "propertyName": "historicOHLCVs", - "functionName": "newFoundationsBotModulesHistoricOHLCVs", - "fileName": "HistoricOHLCVs.js", - "folderName": "Sensor-Bot/Exchange-Raw-Data" - }, - { - "name": "Webhooks Check Webhook", - "propertyName": "checkWebhook", - "functionName": "newFoundationsBotModulesCheckWebhook", - "fileName": "CheckWebhook.js", - "folderName": "Sensor-Bot/Webhooks" - }, - { - "name": "Single Market API Data Fetcher Bot", - "propertyName": "singleMarketAPIDataFetcherBot", - "functionName": "newFoundationsBotModulesSingleMarketAPIDataFetcherBot", - "fileName": "SingleMarketAPIDataFetcherBot.js", - "folderName": "API-Data-Fetcher-Bot", - "botType": "API Data Fetcher Bot" - }, - { - "name": "API Data Fetcher Fetching Process", - "propertyName": "fetchingProcess", - "functionName": "newFoundationsBotModulesFetchingProcess", - "fileName": "FetchingProcess.js", - "folderName": "API-Data-Fetcher-Bot" - }, - { - "name": "Single Market Indicator Bot", - "propertyName": "singleMarketIndicatorBot", - "functionName": "newFoundationsBotModulesSingleMarketIndicatorBot", - "fileName": "SingleMarketIndicatorBot.js", - "folderName": "Indicator-Bot", - "botType": "Indicator Bot" - }, - { - "name": "Candles Volumes Multi Time Frame Daily", - "propertyName": "candlesVolumesMultiTimeFrameDaily", - "functionName": "newFoundationsBotModulesCandlesVolumesMultiTimeFrameDaily", - "fileName": "CandlesVolumesMultiTimeFrameDaily.js", - "folderName": "Indicator-Bot/Candles-Volumes" - }, - { - "name": "Candles Volumes Multi Time Frame Market", - "propertyName": "candlesVolumesMultiTimeFrameMarket", - "functionName": "newFoundationsBotModulesCandlesVolumesMultiTimeFrameMarket", - "fileName": "CandlesVolumesMultiTimeFrameMarket.js", - "folderName": "Indicator-Bot/Candles-Volumes" - }, - { - "name": "Bollinger Bands Multi Time Frame Daily", - "propertyName": "bollingerBandsMultiTimeFrameDaily", - "functionName": "newFoundationsBotModulesBollingerBandsMultiTimeFrameDaily", - "fileName": "BollingerBandsMultiTimeFrameDaily.js", - "folderName": "Indicator-Bot/Bollinger-Bands" - }, - { - "name": "Bollinger Bands Multi Time Frame Market", - "propertyName": "bollingerBandsMultiTimeFrameMarket", - "functionName": "newFoundationsBotModulesBollingerBandsMultiTimeFrameMarket", - "fileName": "BollingerBandsMultiTimeFrameMarket.js", - "folderName": "Indicator-Bot/Bollinger-Bands" - }, - { - "name": "Multi Time Frame Market", - "propertyName": "multiTimeFrameMarket", - "functionName": "newFoundationsBotModulesMultiTimeFrameMarket", - "fileName": "MultiTimeFrameMarket.js", - "folderName": "Indicator-Bot" - }, - { - "name": "Multi Time Frame Daily", - "propertyName": "multiTimeFrameDaily", - "functionName": "newFoundationsBotModulesMultiTimeFrameDaily", - "fileName": "MultiTimeFrameDaily.js", - "folderName": "Indicator-Bot" - }, - { - "name": "From One Min To Multi Time Frame Market", - "propertyName": "fromOneMinToMultiTimeFrameMarket", - "functionName": "newFoundationsBotModulesFromOneMinToMultiTimeFrameMarket", - "fileName": "FromOneMinToMultiTimeFrameMarket.js", - "folderName": "Indicator-Bot" - }, - { - "name": "From One Min To Multi Time Frame Daily", - "propertyName": "fromOneMinToMultiTimeFrameDaily", - "functionName": "newFoundationsBotModulesFromOneMinToMultiTimeFrameDaily", - "fileName": "FromOneMinToMultiTimeFrameDaily.js", - "folderName": "Indicator-Bot" - }, - { - "name": "Indicator Output", - "propertyName": "indicatorOutput", - "functionName": "newFoundationsBotModulesIndicatorOutput", - "fileName": "IndicatorOutput.js", - "folderName": "Indicator-Bot" - }, { "name": "Single Market Trading Bot", "propertyName": "singleMarketTradingBot", @@ -937,7 +829,118 @@ } ] }, - "TS": {} + "TS": { + "botModules":[ + { + "name": "Single Market Sensor Bot", + "propertyName": "singleMarketSensorBot", + "functionName": "newDataMiningBotModulesSingleMarketSensorBot", + "fileName": "SingleMarketSensorBot.js", + "folderName": "Sensor-Bot", + "botType": "Sensor Bot" + }, + { + "name": "Exchange Raw Data Historic OHLCVs", + "propertyName": "historicOHLCVs", + "functionName": "newDataMiningBotModulesHistoricOHLCVs", + "fileName": "HistoricOHLCVs.js", + "folderName": "Sensor-Bot/Exchange-Raw-Data" + }, + { + "name": "Single Market API Data Fetcher Bot", + "propertyName": "singleMarketAPIDataFetcherBot", + "functionName": "newDataMiningBotModulesSingleMarketAPIDataFetcherBot", + "fileName": "SingleMarketAPIDataFetcherBot.js", + "folderName": "API-Data-Fetcher-Bot", + "botType": "API Data Fetcher Bot" + }, + { + "name": "API Data Fetcher Fetching Process", + "propertyName": "fetchingProcess", + "functionName": "newDataMiningBotModulesFetchingProcess", + "fileName": "FetchingProcess.js", + "folderName": "API-Data-Fetcher-Bot" + }, + { + "name": "Single Market Indicator Bot", + "propertyName": "singleMarketIndicatorBot", + "functionName": "newDataMiningBotModulesSingleMarketIndicatorBot", + "fileName": "SingleMarketIndicatorBot.js", + "folderName": "Indicator-Bot", + "botType": "Indicator Bot" + }, + { + "name": "Candles Volumes Multi Time Frame Daily", + "propertyName": "candlesVolumesMultiTimeFrameDaily", + "functionName": "newDataMiningBotModulesCandlesVolumesMultiTimeFrameDaily", + "fileName": "CandlesVolumesMultiTimeFrameDaily.js", + "folderName": "Indicator-Bot/Candles-Volumes" + }, + { + "name": "Candles Volumes Multi Time Frame Market", + "propertyName": "candlesVolumesMultiTimeFrameMarket", + "functionName": "newDataMiningBotModulesCandlesVolumesMultiTimeFrameMarket", + "fileName": "CandlesVolumesMultiTimeFrameMarket.js", + "folderName": "Indicator-Bot/Candles-Volumes" + }, + { + "name": "Bollinger Bands Multi Time Frame Daily", + "propertyName": "bollingerBandsMultiTimeFrameDaily", + "functionName": "newDataMiningBotModulesBollingerBandsMultiTimeFrameDaily", + "fileName": "BollingerBandsMultiTimeFrameDaily.js", + "folderName": "Indicator-Bot/Bollinger-Bands" + }, + { + "name": "Bollinger Bands Multi Time Frame Market", + "propertyName": "bollingerBandsMultiTimeFrameMarket", + "functionName": "newDataMiningBotModulesBollingerBandsMultiTimeFrameMarket", + "fileName": "BollingerBandsMultiTimeFrameMarket.js", + "folderName": "Indicator-Bot/Bollinger-Bands" + }, + { + "name": "Multi Time Frame Market", + "propertyName": "multiTimeFrameMarket", + "functionName": "newDataMiningBotModulesMultiTimeFrameMarket", + "fileName": "MultiTimeFrameMarket.js", + "folderName": "Indicator-Bot" + }, + { + "name": "Multi Time Frame Daily", + "propertyName": "multiTimeFrameDaily", + "functionName": "newDataMiningBotModulesMultiTimeFrameDaily", + "fileName": "MultiTimeFrameDaily.js", + "folderName": "Indicator-Bot" + }, + { + "name": "From One Min To Multi Time Frame Market", + "propertyName": "fromOneMinToMultiTimeFrameMarket", + "functionName": "newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket", + "fileName": "FromOneMinToMultiTimeFrameMarket.js", + "folderName": "Indicator-Bot" + }, + { + "name": "From One Min To Multi Time Frame Daily", + "propertyName": "fromOneMinToMultiTimeFrameDaily", + "functionName": "newDataMiningBotModulesFromOneMinToMultiTimeFrameDaily", + "fileName": "FromOneMinToMultiTimeFrameDaily.js", + "folderName": "Indicator-Bot" + }, + { + "name": "Indicator Output", + "propertyName": "indicatorOutput", + "functionName": "newDataMiningBotModulesIndicatorOutput", + "fileName": "IndicatorOutput.js", + "folderName": "Indicator-Bot" + }, + { + "name": "Webhooks Check Webhook", + "propertyName": "checkWebhook", + "functionName": "newDataMiningBotModulesCheckWebhook", + "fileName": "CheckWebhook.js", + "folderName": "Sensor-Bot/Webhooks" + } + ] + } }, { "name": "Ethereum", diff --git a/TaskServer/ProcessInstance.js b/TaskServer/ProcessInstance.js index baed01931..769906ab5 100644 --- a/TaskServer/ProcessInstance.js +++ b/TaskServer/ProcessInstance.js @@ -53,14 +53,14 @@ defined with the same type at the property botType. */ for (let i = 0; i < PROJECTS_SCHEMA.length; i++) { - let project = PROJECTS_SCHEMA[i] - if (project.name !== TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName) { continue } - for (let j = 0; j < project.TS.botModules.length; j++) { - botModuleDefinition = project.TS.botModules[j] + let projectDefinition = PROJECTS_SCHEMA[i] + if (projectDefinition.name !== TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName) { continue } + for (let j = 0; j < projectDefinition.TS.botModules.length; j++) { + botModuleDefinition = projectDefinition.TS.botModules[j] if (botModuleDefinition.botType === TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.parentNode.type) { try { TS.projects.foundations.globals.processVariables.TOTAL_PROCESS_INSTANCES_CREATED++ - let project = TS.projects[TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName.toLowerCase()] + let project = TS.projects[projectDefinition.propertyName] let botModule = project.botModules[botModuleDefinition.propertyName] let moduleFunction = botModule[botModuleDefinition.functionName] botModuleObject = moduleFunction(processIndex) diff --git a/TaskServerRoot.js b/TaskServerRoot.js index 65f5a7d23..39811c671 100644 --- a/TaskServerRoot.js +++ b/TaskServerRoot.js @@ -23,6 +23,12 @@ global.env = ENVIRONMENT_MODULE First thing is to load the project schema file. */ global.PROJECTS_SCHEMA = require(global.env.PATH_TO_PROJECT_SCHEMA) +global.PROJECTS_SCHEMA_MAP = new Map() + +for (let i = 0; i < PROJECTS_SCHEMA.length; i++) { + let projectDefinition = PROJECTS_SCHEMA[i] + PROJECTS_SCHEMA_MAP.set(projectDefinition.name, projectDefinition) +} /* Setting up the modules that will be available, defined at the Project Schema file. */ From d5add5486ccd15ae88e43c70dfb2b08d905deae9 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 25 Sep 2021 16:27:24 +0200 Subject: [PATCH 03/82] Indicators From Getting Started Tutorials Workspace Running --- .gitignore | 2 ++ Environment.js | 4 ++-- EnvironmentForDebug.js | 4 ++-- .../Icons/Api/api-data-fetcher-bot.png | Bin .../Icons/Data/data-mine.png | Bin .../Icons/{ => Data}/data-mining.png | Bin .../Icons/indicator-bot.png | Bin .../Icons/sensor-bot.png | Bin .../App-Schema/Api/api-data-fetcher-bot.json | 18 ++++++++++----- .../Schemas/App-Schema/data-mine.json | 21 ++++++++++++------ .../App-Schema/data-mining-project.json | 20 +++++++++-------- .../Schemas/App-Schema/indicator-bot.json | 18 ++++++++++----- .../Schemas/App-Schema/sensor-bot.json | 18 ++++++++++----- .../Indicator-Bot/MultiTimeFrameDaily.js | 2 +- .../Indicator-Bot/MultiTimeFrameMarket.js | 2 +- .../Indicator-Bot/SingleMarketIndicatorBot.js | 8 +++---- .../TS/Process-Modules/StatusReport.js | 2 +- .../Function-Libraries/UiObjectsFromNodes.js | 10 +++++++++ .../App-Schema/tensorflow-project.json | 7 ++++++ 19 files changed, 91 insertions(+), 45 deletions(-) rename Projects/{Foundations => Data-Mining}/Icons/Api/api-data-fetcher-bot.png (100%) rename Projects/{Foundations => Data-Mining}/Icons/Data/data-mine.png (100%) rename Projects/Data-Mining/Icons/{ => Data}/data-mining.png (100%) rename Projects/{Foundations => Data-Mining}/Icons/indicator-bot.png (100%) rename Projects/{Foundations => Data-Mining}/Icons/sensor-bot.png (100%) rename Projects/{Foundations => Data-Mining}/Schemas/App-Schema/Api/api-data-fetcher-bot.json (74%) rename Projects/{Foundations => Data-Mining}/Schemas/App-Schema/data-mine.json (74%) rename Projects/{Foundations => Data-Mining}/Schemas/App-Schema/indicator-bot.json (73%) rename Projects/{Foundations => Data-Mining}/Schemas/App-Schema/sensor-bot.json (73%) diff --git a/.gitignore b/.gitignore index 9705d9e62..20c5ba571 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ My-Workspaces My-Social-Trading-Data My-Network-Nodes-Data My-Secrets +My-Data-Storage +My-Log-Files debug.log .DS_Store *.db diff --git a/Environment.js b/Environment.js index 62c9cb43b..46b8073f9 100644 --- a/Environment.js +++ b/Environment.js @@ -4,8 +4,8 @@ exports.newEnvironment = function () { WEB_SERVER_URL: 'localhost', CLIENT_WEB_SOCKETS_INTERFACE_PORT: 18041, CLIENT_HTTP_INTERFACE_PORT: 34248, - PATH_TO_DATA_STORAGE: './Platform/Data-Storage', - PATH_TO_LOG_FILES: './Platform/Log-Files', + PATH_TO_DATA_STORAGE: './Platform/My-Data-Storage', + PATH_TO_LOG_FILES: './Platform/My-Log-Files', PATH_TO_PROJECTS: './Projects', PATH_TO_PROJECTS_REQUIRED: './Projects', PATH_TO_PROJECT_SCHEMA: './Projects/ProjectsSchema.json', diff --git a/EnvironmentForDebug.js b/EnvironmentForDebug.js index 621af7b3c..4bc261afd 100644 --- a/EnvironmentForDebug.js +++ b/EnvironmentForDebug.js @@ -8,8 +8,8 @@ exports.newEnvironment = function () { DESKTOP_WEB_SOCKETS_INTERFACE_HOST: 'localhost', CLIENT_HTTP_INTERFACE_PORT: 34248, DESKTOP_HTTP_INTERFACE_PORT: 34249, - PATH_TO_DATA_STORAGE: './Platform/Data-Storage', - PATH_TO_LOG_FILES: './Platform/Log-Files', + PATH_TO_DATA_STORAGE: './Platform/My-Data-Storage', + PATH_TO_LOG_FILES: './Platform/My-Log-Files', PATH_TO_PROJECTS: './Projects', PATH_TO_PROJECTS_REQUIRED: './Projects', PATH_TO_PROJECT_SCHEMA: './Projects/ProjectsSchema.json', diff --git a/Projects/Foundations/Icons/Api/api-data-fetcher-bot.png b/Projects/Data-Mining/Icons/Api/api-data-fetcher-bot.png similarity index 100% rename from Projects/Foundations/Icons/Api/api-data-fetcher-bot.png rename to Projects/Data-Mining/Icons/Api/api-data-fetcher-bot.png diff --git a/Projects/Foundations/Icons/Data/data-mine.png b/Projects/Data-Mining/Icons/Data/data-mine.png similarity index 100% rename from Projects/Foundations/Icons/Data/data-mine.png rename to Projects/Data-Mining/Icons/Data/data-mine.png diff --git a/Projects/Data-Mining/Icons/data-mining.png b/Projects/Data-Mining/Icons/Data/data-mining.png similarity index 100% rename from Projects/Data-Mining/Icons/data-mining.png rename to Projects/Data-Mining/Icons/Data/data-mining.png diff --git a/Projects/Foundations/Icons/indicator-bot.png b/Projects/Data-Mining/Icons/indicator-bot.png similarity index 100% rename from Projects/Foundations/Icons/indicator-bot.png rename to Projects/Data-Mining/Icons/indicator-bot.png diff --git a/Projects/Foundations/Icons/sensor-bot.png b/Projects/Data-Mining/Icons/sensor-bot.png similarity index 100% rename from Projects/Foundations/Icons/sensor-bot.png rename to Projects/Data-Mining/Icons/sensor-bot.png diff --git a/Projects/Foundations/Schemas/App-Schema/Api/api-data-fetcher-bot.json b/Projects/Data-Mining/Schemas/App-Schema/Api/api-data-fetcher-bot.json similarity index 74% rename from Projects/Foundations/Schemas/App-Schema/Api/api-data-fetcher-bot.json rename to Projects/Data-Mining/Schemas/App-Schema/Api/api-data-fetcher-bot.json index a0837f199..9eeb5da39 100644 --- a/Projects/Foundations/Schemas/App-Schema/Api/api-data-fetcher-bot.json +++ b/Projects/Data-Mining/Schemas/App-Schema/Api/api-data-fetcher-bot.json @@ -7,19 +7,22 @@ "iconPathOn": "configuration", "iconPathOff": "configuration", "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Process Definition", "relatedUiObject": "Process Definition", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Product Definition", "relatedUiObject": "Product Definition", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -28,7 +31,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isTitleAllwaysVisible": true, @@ -48,13 +52,15 @@ "name": "processes", "type": "array", "childType": "Process Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "products", "type": "array", "childType": "Product Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" } ], "propertyNameAtParent": "apiDataFetcherBots", diff --git a/Projects/Foundations/Schemas/App-Schema/data-mine.json b/Projects/Data-Mining/Schemas/App-Schema/data-mine.json similarity index 74% rename from Projects/Foundations/Schemas/App-Schema/data-mine.json rename to Projects/Data-Mining/Schemas/App-Schema/data-mine.json index bd5e6de93..839b92d93 100644 --- a/Projects/Foundations/Schemas/App-Schema/data-mine.json +++ b/Projects/Data-Mining/Schemas/App-Schema/data-mine.json @@ -7,31 +7,36 @@ "iconPathOn": "configuration", "iconPathOff": "configuration", "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Sensor Bot", "relatedUiObject": "Sensor Bot", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add API Data Fetcher Bot", "relatedUiObject": "API Data Fetcher Bot", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Indicator Bot", "relatedUiObject": "Indicator Bot", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Plotter", "relatedUiObject": "Plotter", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -40,7 +45,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isTitleAllwaysVisible": true, @@ -72,7 +78,8 @@ { "name": "plotters", "type": "array", - "childType": "Plotter" + "childType": "Plotter", + "project": "Foundations" } ] } \ No newline at end of file diff --git a/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json b/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json index d31a511cb..103dbf7a2 100644 --- a/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json +++ b/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json @@ -5,7 +5,15 @@ "action": "Add Missing Children", "label": "Add Missing Children", "relatedUiObject": "Foundations Project", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Add UI Object", + "label": "Add Data Mien", + "relatedUiObject": "Data Mien", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -14,7 +22,8 @@ "actionFunction": "payload.executeAction", "label": "Delete", "iconPathOn": "delete-entity", - "iconPathOff": "delete-entity" + "iconPathOff": "delete-entity", + "actionProject": "Foundations" } ], "isProjectHead": true, @@ -30,13 +39,6 @@ "childType": "Project Definition", "project": "Foundations", "autoAdd": true - }, - { - "name": "mines", - "type": "node", - "childType": "Mines", - "project": "Foundations", - "autoAdd": true } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/App-Schema/indicator-bot.json b/Projects/Data-Mining/Schemas/App-Schema/indicator-bot.json similarity index 73% rename from Projects/Foundations/Schemas/App-Schema/indicator-bot.json rename to Projects/Data-Mining/Schemas/App-Schema/indicator-bot.json index 98b8b9534..7d0d586b4 100644 --- a/Projects/Foundations/Schemas/App-Schema/indicator-bot.json +++ b/Projects/Data-Mining/Schemas/App-Schema/indicator-bot.json @@ -7,19 +7,22 @@ "iconPathOn": "configuration", "iconPathOff": "configuration", "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Process Definition", "relatedUiObject": "Process Definition", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Product Definition", "relatedUiObject": "Product Definition", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -28,7 +31,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isTitleAllwaysVisible": true, @@ -48,13 +52,15 @@ "name": "processes", "type": "array", "childType": "Process Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "products", "type": "array", "childType": "Product Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" } ], "propertyNameAtParent": "indicatorBots" diff --git a/Projects/Foundations/Schemas/App-Schema/sensor-bot.json b/Projects/Data-Mining/Schemas/App-Schema/sensor-bot.json similarity index 73% rename from Projects/Foundations/Schemas/App-Schema/sensor-bot.json rename to Projects/Data-Mining/Schemas/App-Schema/sensor-bot.json index 2fe664109..105d23826 100644 --- a/Projects/Foundations/Schemas/App-Schema/sensor-bot.json +++ b/Projects/Data-Mining/Schemas/App-Schema/sensor-bot.json @@ -7,19 +7,22 @@ "iconPathOn": "configuration", "iconPathOff": "configuration", "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Process Definition", "relatedUiObject": "Process Definition", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Product Definition", "relatedUiObject": "Product Definition", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -28,7 +31,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isTitleAllwaysVisible": true, @@ -48,13 +52,15 @@ "name": "processes", "type": "array", "childType": "Process Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "products", "type": "array", "childType": "Product Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" } ], "propertyNameAtParent": "sensorBots" diff --git a/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js index 588914903..db2b8c77b 100644 --- a/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js @@ -25,7 +25,7 @@ statusDependenciesModule = pStatusDependencies; dataDependenciesModule = pStatusDependenciesModule; - indicatorOutputModule = TS.projects.foundations.botModules.indicatorOutput.newDataMiningBotModulesIndicatorOutput(processIndex) + indicatorOutputModule = TS.projects.dataMining.botModules.indicatorOutput.newDataMiningBotModulesIndicatorOutput(processIndex) indicatorOutputModule.initialize(callBackFunction) } diff --git a/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js index bc01d3b6a..764653a54 100644 --- a/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js @@ -24,7 +24,7 @@ statusDependenciesModule = pStatusDependencies dataDependenciesModule = pStatusDependenciesModule - indicatorOutputModule = TS.projects.foundations.botModules.indicatorOutput.newDataMiningBotModulesIndicatorOutput(processIndex) + indicatorOutputModule = TS.projects.dataMining.botModules.indicatorOutput.newDataMiningBotModulesIndicatorOutput(processIndex) indicatorOutputModule.initialize(callBackFunction) } diff --git a/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js index d517c3c4e..47de8ea6e 100644 --- a/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js @@ -277,22 +277,22 @@ switch (TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.config.framework.name) { case 'Multi-Time-Frame-Market': { - processFramework = TS.projects.foundations.botModules.multiTimeFrameMarket.newDataMiningBotModulesMultiTimeFrameMarket(processIndex) + processFramework = TS.projects.dataMining.botModules.multiTimeFrameMarket.newDataMiningBotModulesMultiTimeFrameMarket(processIndex) intitializeProcessFramework() break; } case 'Multi-Time-Frame-Daily': { - processFramework = TS.projects.foundations.botModules.multiTimeFrameDaily.newDataMiningBotModulesMultiTimeFrameDaily(processIndex) + processFramework = TS.projects.dataMining.botModules.multiTimeFrameDaily.newDataMiningBotModulesMultiTimeFrameDaily(processIndex) intitializeProcessFramework() break; } case 'From-One-Min-To-Multi-Time-Frame-Market': { - processFramework = TS.projects.foundations.botModules.fromOneMinToMultiTimeFrameMarket.newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket(processIndex) + processFramework = TS.projects.dataMining.botModules.fromOneMinToMultiTimeFrameMarket.newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket(processIndex) intitializeProcessFramework() break; } case 'From-One-Min-To-Multi-Time-Frame-Daily': { - processFramework = TS.projects.foundations.botModules.fromOneMinToMultiTimeFrameDaily.newDataMiningBotModulesFromOneMinToMultiTimeFrameDaily(processIndex) + processFramework = TS.projects.dataMining.botModules.fromOneMinToMultiTimeFrameDaily.newDataMiningBotModulesFromOneMinToMultiTimeFrameDaily(processIndex) intitializeProcessFramework() break; } diff --git a/Projects/Foundations/TS/Process-Modules/StatusReport.js b/Projects/Foundations/TS/Process-Modules/StatusReport.js index 94303354f..bc33ccf70 100644 --- a/Projects/Foundations/TS/Process-Modules/StatusReport.js +++ b/Projects/Foundations/TS/Process-Modules/StatusReport.js @@ -315,7 +315,7 @@ if (ownerId !== botId) { let filePathRoot = 'Project/' + - statusDependencyNode.project + "/" + + statusDependencyNode.referenceParent.parentNode.parentNode.parentNode.project + "/" + statusDependencyNode.mineType + "/" + statusDependencyNode.dataMine + "/" + statusDependencyNode.bot + '/' + diff --git a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js index ccac9e95c..b02a724fc 100644 --- a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js +++ b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js @@ -441,6 +441,16 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { ) { node.type = "LAN Network Node" } + + if ( + node.type === 'Data Mine' || + node.type === 'API Data Fetcher Bot' || + node.type === 'Indicator Bot' || + node.type === 'Sensor Bot' + ) { + node.project = "Data-Mining" + } + /* This function can be called with a positionOffset to change the node saved position and all of its descendants positions as well with an diff --git a/Projects/TensorFlow/Schemas/App-Schema/tensorflow-project.json b/Projects/TensorFlow/Schemas/App-Schema/tensorflow-project.json index 839b6e422..43de86680 100644 --- a/Projects/TensorFlow/Schemas/App-Schema/tensorflow-project.json +++ b/Projects/TensorFlow/Schemas/App-Schema/tensorflow-project.json @@ -1,6 +1,13 @@ { "type": "TensorFlow Project", "menuItems": [ + { + "action": "Add Missing Children", + "label": "Add Missing Children", + "relatedUiObject": "Foundations Project", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, { "action": "Add UI Object", "actionProject": "Foundations", From bf931fedf678deaa6213c55e0d8eb662aa6a61ec Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 25 Sep 2021 17:44:04 +0200 Subject: [PATCH 04/82] Docs nodes moved --- .../A/API/API-Data-Fetcher-Bot/api-data-fetcher-bot.json | 0 .../Schemas/Docs-Nodes/D/Data/Data-Mine/data-mine.json | 0 .../Docs-Nodes/I/Indicator/Indicator-Bot/indicator-bot.json | 0 .../Schemas/Docs-Nodes/S/Sensor/Sensor-Bot/sensor-bot.json | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename Projects/{Foundations => Data-Mining}/Schemas/Docs-Nodes/A/API/API-Data-Fetcher-Bot/api-data-fetcher-bot.json (100%) rename Projects/{Foundations => Data-Mining}/Schemas/Docs-Nodes/D/Data/Data-Mine/data-mine.json (100%) rename Projects/{Foundations => Data-Mining}/Schemas/Docs-Nodes/I/Indicator/Indicator-Bot/indicator-bot.json (100%) rename Projects/{Foundations => Data-Mining}/Schemas/Docs-Nodes/S/Sensor/Sensor-Bot/sensor-bot.json (100%) diff --git a/Projects/Foundations/Schemas/Docs-Nodes/A/API/API-Data-Fetcher-Bot/api-data-fetcher-bot.json b/Projects/Data-Mining/Schemas/Docs-Nodes/A/API/API-Data-Fetcher-Bot/api-data-fetcher-bot.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/A/API/API-Data-Fetcher-Bot/api-data-fetcher-bot.json rename to Projects/Data-Mining/Schemas/Docs-Nodes/A/API/API-Data-Fetcher-Bot/api-data-fetcher-bot.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/D/Data/Data-Mine/data-mine.json b/Projects/Data-Mining/Schemas/Docs-Nodes/D/Data/Data-Mine/data-mine.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/D/Data/Data-Mine/data-mine.json rename to Projects/Data-Mining/Schemas/Docs-Nodes/D/Data/Data-Mine/data-mine.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/I/Indicator/Indicator-Bot/indicator-bot.json b/Projects/Data-Mining/Schemas/Docs-Nodes/I/Indicator/Indicator-Bot/indicator-bot.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/I/Indicator/Indicator-Bot/indicator-bot.json rename to Projects/Data-Mining/Schemas/Docs-Nodes/I/Indicator/Indicator-Bot/indicator-bot.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/S/Sensor/Sensor-Bot/sensor-bot.json b/Projects/Data-Mining/Schemas/Docs-Nodes/S/Sensor/Sensor-Bot/sensor-bot.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/S/Sensor/Sensor-Bot/sensor-bot.json rename to Projects/Data-Mining/Schemas/Docs-Nodes/S/Sensor/Sensor-Bot/sensor-bot.json From ee90ba2b45520e41d85d5197bf2daa47f57b282f Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 25 Sep 2021 18:24:37 +0200 Subject: [PATCH 05/82] Docs Bug Fixed handling Menu Items of other Projects --- .../App-Schema/Api/api-data-fetcher-bot.json | 2 ++ .../Schemas/App-Schema/data-mine.json | 1 + .../App-Schema/data-mining-project.json | 4 ++-- .../Schemas/App-Schema/indicator-bot.json | 2 ++ .../Schemas/App-Schema/sensor-bot.json | 2 ++ .../UI/Spaces/Docs-Space/DocumentPage.js | 19 +++++++++++++++---- 6 files changed, 24 insertions(+), 6 deletions(-) diff --git a/Projects/Data-Mining/Schemas/App-Schema/Api/api-data-fetcher-bot.json b/Projects/Data-Mining/Schemas/App-Schema/Api/api-data-fetcher-bot.json index 9eeb5da39..6265ca234 100644 --- a/Projects/Data-Mining/Schemas/App-Schema/Api/api-data-fetcher-bot.json +++ b/Projects/Data-Mining/Schemas/App-Schema/Api/api-data-fetcher-bot.json @@ -14,6 +14,7 @@ "action": "Add UI Object", "label": "Add Process Definition", "relatedUiObject": "Process Definition", + "relatedUiObjectProject": "Foundations", "actionFunction": "payload.executeAction", "actionProject": "Foundations" }, @@ -21,6 +22,7 @@ "action": "Add UI Object", "label": "Add Product Definition", "relatedUiObject": "Product Definition", + "relatedUiObjectProject": "Foundations", "actionFunction": "payload.executeAction", "actionProject": "Foundations" }, diff --git a/Projects/Data-Mining/Schemas/App-Schema/data-mine.json b/Projects/Data-Mining/Schemas/App-Schema/data-mine.json index 839b92d93..30943c8bb 100644 --- a/Projects/Data-Mining/Schemas/App-Schema/data-mine.json +++ b/Projects/Data-Mining/Schemas/App-Schema/data-mine.json @@ -35,6 +35,7 @@ "action": "Add UI Object", "label": "Add Plotter", "relatedUiObject": "Plotter", + "relatedUiObjectProject": "Foundations", "actionFunction": "payload.executeAction", "actionProject": "Foundations" }, diff --git a/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json b/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json index 103dbf7a2..de9583907 100644 --- a/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json +++ b/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json @@ -10,8 +10,8 @@ }, { "action": "Add UI Object", - "label": "Add Data Mien", - "relatedUiObject": "Data Mien", + "label": "Add Data Mine", + "relatedUiObject": "Data Mine", "actionFunction": "payload.executeAction", "actionProject": "Foundations" }, diff --git a/Projects/Data-Mining/Schemas/App-Schema/indicator-bot.json b/Projects/Data-Mining/Schemas/App-Schema/indicator-bot.json index 7d0d586b4..6846ae63a 100644 --- a/Projects/Data-Mining/Schemas/App-Schema/indicator-bot.json +++ b/Projects/Data-Mining/Schemas/App-Schema/indicator-bot.json @@ -14,6 +14,7 @@ "action": "Add UI Object", "label": "Add Process Definition", "relatedUiObject": "Process Definition", + "relatedUiObjectProject": "Foundations", "actionFunction": "payload.executeAction", "actionProject": "Foundations" }, @@ -21,6 +22,7 @@ "action": "Add UI Object", "label": "Add Product Definition", "relatedUiObject": "Product Definition", + "relatedUiObjectProject": "Foundations", "actionFunction": "payload.executeAction", "actionProject": "Foundations" }, diff --git a/Projects/Data-Mining/Schemas/App-Schema/sensor-bot.json b/Projects/Data-Mining/Schemas/App-Schema/sensor-bot.json index 105d23826..779e4b644 100644 --- a/Projects/Data-Mining/Schemas/App-Schema/sensor-bot.json +++ b/Projects/Data-Mining/Schemas/App-Schema/sensor-bot.json @@ -14,6 +14,7 @@ "action": "Add UI Object", "label": "Add Process Definition", "relatedUiObject": "Process Definition", + "relatedUiObjectProject": "Foundations", "actionFunction": "payload.executeAction", "actionProject": "Foundations" }, @@ -21,6 +22,7 @@ "action": "Add UI Object", "label": "Add Product Definition", "relatedUiObject": "Product Definition", + "relatedUiObjectProject": "Foundations", "actionFunction": "payload.executeAction", "actionProject": "Foundations" }, diff --git a/Projects/Education/UI/Spaces/Docs-Space/DocumentPage.js b/Projects/Education/UI/Spaces/Docs-Space/DocumentPage.js index 15d64e845..eba891dec 100644 --- a/Projects/Education/UI/Spaces/Docs-Space/DocumentPage.js +++ b/Projects/Education/UI/Spaces/Docs-Space/DocumentPage.js @@ -854,7 +854,7 @@ function newFoundationsDocsDocumentPage() { if (appSchemaDocument === undefined || appSchemaDocument.menuItems === undefined) { return } for (let i = 0; i < appSchemaDocument.menuItems.length; i++) { let menuItem = appSchemaDocument.menuItems[i] - let collectionImage = getIcon() + let collectionImage = getIcon(appSchemaDocument.menuItems[i].relatedUiObjectProject, appSchemaDocument.menuItems[i].actionProject) if (collectionImage === undefined) { continue } @@ -866,12 +866,23 @@ function newFoundationsDocsDocumentPage() { let dummyImage = parentElement.childNodes[0] parentElement.replaceChild(imageElement, dummyImage) - function getIcon() { + function getIcon(relatedUiObjectProject, actionProject) { + let project if (menuItem.relatedUiObject !== undefined) { - return UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(UI.projects.education.spaces.docsSpace.currentDocumentBeingRendered.project, menuItem.relatedUiObject) + if (relatedUiObjectProject !== undefined) { + project = relatedUiObjectProject + } else { + project = UI.projects.education.spaces.docsSpace.currentDocumentBeingRendered.project + } + return UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(project, menuItem.relatedUiObject) } else { + if (actionProject !== undefined) { + project = actionProject + } else { + project = UI.projects.education.spaces.docsSpace.currentDocumentBeingRendered.project + } if (menuItem.iconPathOn !== undefined) { - return UI.projects.foundations.spaces.designSpace.getIconByProjectAndName(UI.projects.education.spaces.docsSpace.currentDocumentBeingRendered.project, menuItem.iconPathOn) + return UI.projects.foundations.spaces.designSpace.getIconByProjectAndName(project, menuItem.iconPathOn) } else { return UI.projects.foundations.spaces.designSpace.getIconByProjectAndName('Foundations', 'bitcoin') } From 3d0682b004fbfaa58ae3b3f9b866f41d7c29c536 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 25 Sep 2021 18:43:37 +0200 Subject: [PATCH 06/82] Bug fixes with attaching rules --- .../Foundations/Schemas/App-Schema/process-definition.json | 2 +- .../Foundations/Schemas/App-Schema/product-definition.json | 2 +- .../data-mining-006-data-mining-data-mine-hierarchy.json | 4 ++-- .../data-mining-016-data-mining-indicator-bots.json | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Projects/Foundations/Schemas/App-Schema/process-definition.json b/Projects/Foundations/Schemas/App-Schema/process-definition.json index 1c14c333c..1eb76e7b4 100644 --- a/Projects/Foundations/Schemas/App-Schema/process-definition.json +++ b/Projects/Foundations/Schemas/App-Schema/process-definition.json @@ -35,7 +35,7 @@ }, "level": 1, "attachingRules": { - "compatibleTypes": "->Sensor Bot->API Data Fetcher Bot->Indicator Bot->Trading Bot->Learning Bot->" + "compatibleTypes": "->Data-Mining|Sensor Bot->Data-Mining|API Data Fetcher Bot->Data-Mining|Indicator Bot->Trading Bot->Learning Bot->" }, "childrenNodesProperties": [ { diff --git a/Projects/Foundations/Schemas/App-Schema/product-definition.json b/Projects/Foundations/Schemas/App-Schema/product-definition.json index a10f42c92..555f2adf0 100644 --- a/Projects/Foundations/Schemas/App-Schema/product-definition.json +++ b/Projects/Foundations/Schemas/App-Schema/product-definition.json @@ -52,7 +52,7 @@ "compatibleTypes": "->Plotter Module->" }, "attachingRules": { - "compatibleTypes": "->Sensor Bot->API Data Fetcher Bot->Indicator Bot->Trading Bot->Learning Bot->Product Definition Folder->" + "compatibleTypes": "->Data Mining|Sensor Bot->Data Mining|API Data Fetcher Bot->Data Mining|Indicator Bot->Trading Bot->Learning Bot->Product Definition Folder->" }, "childrenNodesProperties": [ { diff --git a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-006-data-mining-data-mine-hierarchy.json b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-006-data-mining-data-mine-hierarchy.json index ec65c079e..a37ff8df2 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-006-data-mining-data-mine-hierarchy.json +++ b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-006-data-mining-data-mine-hierarchy.json @@ -121,7 +121,7 @@ }, { "style": "Include", - "text": "Foundations->Node->Sensor Bot->Definition", + "text": "Data-Mining->Node->Sensor Bot->Definition", "updated": 1611407914247 }, { @@ -131,7 +131,7 @@ }, { "style": "Include", - "text": "Foundations->Node->Indicator Bot->Definition", + "text": "Data-Mining->Node->Indicator Bot->Definition", "updated": 1611407948292 }, { diff --git a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-016-data-mining-indicator-bots.json b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-016-data-mining-indicator-bots.json index aeee1c320..323e68e2d 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-016-data-mining-indicator-bots.json +++ b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-016-data-mining-indicator-bots.json @@ -9,12 +9,12 @@ "paragraphs": [ { "style": "Include", - "text": "Foundations->Node->Indicator Bot->Definition", + "text": "Data-Mining->Node->Indicator Bot->Definition", "updated": 1611408242603 }, { "style": "Include", - "text": "Foundations->Node->Indicator Bot->Content", + "text": "Data-Mining->Node->Indicator Bot->Content", "updated": 1611408247595 }, { @@ -23,7 +23,7 @@ }, { "style": "Hierarchy", - "text": "Foundations->Indicator Bot->2", + "text": "Data-Mining->Indicator Bot->2", "updated": 1611408262027 } ] From 86fcfb4c67e3b5f21c10bd408c7b418fb752305f Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 25 Sep 2021 21:16:41 +0200 Subject: [PATCH 07/82] Bug Fixed at Menu Items not handling relatedUiObjectProject --- .../UI/Spaces/Floating-Space/CircularMenu.js | 1 + .../Spaces/Floating-Space/CircularMenuItem.js | 59 +++++++++++-------- .../UI/Spaces/Floating-Space/UiObject.js | 3 - 3 files changed, 34 insertions(+), 29 deletions(-) diff --git a/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenu.js b/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenu.js index c9fa366ba..18701154a 100644 --- a/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenu.js +++ b/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenu.js @@ -80,6 +80,7 @@ function newCircularMenu() { menuItem.angle = menuItemInitialValue.angle menuItem.currentStatus = menuItemInitialValue.currentStatus menuItem.relatedUiObject = menuItemInitialValue.relatedUiObject + menuItem.relatedUiObjectProject = menuItemInitialValue.relatedUiObjectProject menuItem.dontShowAtFullscreen = menuItemInitialValue.dontShowAtFullscreen menuItem.askConfirmation = menuItemInitialValue.askConfirmation menuItem.confirmationLabel = menuItemInitialValue.confirmationLabel diff --git a/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js b/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js index 67fe1cd7c..ca1b8496e 100644 --- a/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js +++ b/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js @@ -39,6 +39,7 @@ function newCircularMenuItem() { container: undefined, payload: undefined, relatedUiObject: undefined, + relatedUiObjectProject: undefined, dontShowAtFullscreen: undefined, isEnabled: true, shorcutNumber: undefined, @@ -263,13 +264,18 @@ function newCircularMenuItem() { thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndName('Foundations', thisObject.secondaryIcon) thisObject.iconOff = UI.projects.foundations.spaces.designSpace.getIconByProjectAndName('Foundations', thisObject.secondaryIcon) } else { - if (thisObject.label === "Add Dependency Product Folder") { console.log ("Test") } + if (thisObject.relatedUiObject !== undefined && thisObject.iconProject !== undefined) { thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.iconProject, thisObject.relatedUiObject) thisObject.iconOff = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.iconProject, thisObject.relatedUiObject) } else if (thisObject.relatedUiObject !== undefined && thisObject.iconProject === undefined) { - thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.relatedUiObject) - thisObject.iconOff = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.relatedUiObject) + if (thisObject.relatedUiObjectProject !== undefined) { + thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.relatedUiObjectProject, thisObject.relatedUiObject) + thisObject.iconOff = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.relatedUiObjectProject, thisObject.relatedUiObject) + } else { + thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.relatedUiObject) + thisObject.iconOff = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.relatedUiObject) + } } else { if (thisObject.iconPathOn !== undefined && thisObject.iconPathOff !== undefined && thisObject.iconProject !== undefined) { thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndName(thisObject.iconProject, thisObject.iconPathOn) @@ -303,7 +309,7 @@ function newCircularMenuItem() { if (thisObject.container.frame.isThisPointHere(point, true, false) === true) { let text = thisObject.action - if(thisObject.payload.uiObject.payload.referenceParent !== undefined && thisObject.action === 'Reference Detach'){ + if (thisObject.payload.uiObject.payload.referenceParent !== undefined && thisObject.action === 'Reference Detach') { text = text + ' -> [Existing Reference] Type : [' + thisObject.payload.uiObject.payload.referenceParent.type + '] , Name : [' + thisObject.payload.uiObject.payload.referenceParent.name + ']' } @@ -485,32 +491,33 @@ function newCircularMenuItem() { iconSize = UI.projects.foundations.spaces.floatingSpace.style.node.menuItem.imageSize } - if (thisObject.icon === undefined) { return } - if (thisObject.icon.canDrawIcon === true && thisObject.currentRadius > 1 && thisObject.isDeployed === true) { - browserCanvasContext.drawImage(thisObject.icon, menuPosition.x - iconSize, menuPosition.y - iconSize, iconSize * 2, iconSize * 2) + if (thisObject.icon !== undefined) { + if (thisObject.icon.canDrawIcon === true && thisObject.currentRadius > 1 && thisObject.isDeployed === true) { + browserCanvasContext.drawImage(thisObject.icon, menuPosition.x - iconSize, menuPosition.y - iconSize, iconSize * 2, iconSize * 2) + } + } - /* Menu Label */ - if (thisObject.type === 'Icon & Text') { - label = labelToPrint - if (thisObject.shorcutNumber !== undefined) { - label = '' + thisObject.shorcutNumber + '- ' + labelToPrint + /* Menu Label */ + if (thisObject.type === 'Icon & Text') { + label = labelToPrint + if (thisObject.shorcutNumber !== undefined) { + label = '' + thisObject.shorcutNumber + '- ' + labelToPrint + } + + let labelPoint + let fontSize = UI.projects.foundations.spaces.floatingSpace.style.node.menuItem.fontSize + + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY + + if (thisObject.currentRadius >= thisObject.targetRadius) { + labelPoint = { + x: menuPosition.x + thisObject.currentRadius + 25, + y: menuPosition.y + fontSize * FONT_ASPECT_RATIO } - let labelPoint - let fontSize = UI.projects.foundations.spaces.floatingSpace.style.node.menuItem.fontSize - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - if (thisObject.currentRadius >= thisObject.targetRadius) { - labelPoint = { - x: menuPosition.x + thisObject.currentRadius + 25, - y: menuPosition.y + fontSize * FONT_ASPECT_RATIO - } - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - browserCanvasContext.fillStyle = 'rgba(' + UI.projects.foundations.spaces.floatingSpace.style.node.menuItem.fontColor + ', 1)' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - } + browserCanvasContext.fillStyle = 'rgba(' + UI.projects.foundations.spaces.floatingSpace.style.node.menuItem.fontColor + ', 1)' + browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) } } } diff --git a/Projects/Foundations/UI/Spaces/Floating-Space/UiObject.js b/Projects/Foundations/UI/Spaces/Floating-Space/UiObject.js index 3de121654..69802b1ed 100644 --- a/Projects/Foundations/UI/Spaces/Floating-Space/UiObject.js +++ b/Projects/Foundations/UI/Spaces/Floating-Space/UiObject.js @@ -1433,9 +1433,6 @@ function newUiObject() { function drawForeground() { if (thisObject.isOnFocus === false) { drawBodyAndPicture() - if (isDragging === false) { - thisObject.menu.drawForeground() - } } if (thisObject.circularProgressBar !== undefined) { From 47e3961b3e66e40f5f6aff5df3f9206947c33c73 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 25 Sep 2021 21:22:45 +0200 Subject: [PATCH 08/82] Bug Fixed Attaching Rules --- Projects/Foundations/Schemas/App-Schema/product-definition.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Projects/Foundations/Schemas/App-Schema/product-definition.json b/Projects/Foundations/Schemas/App-Schema/product-definition.json index 555f2adf0..22d229deb 100644 --- a/Projects/Foundations/Schemas/App-Schema/product-definition.json +++ b/Projects/Foundations/Schemas/App-Schema/product-definition.json @@ -52,7 +52,7 @@ "compatibleTypes": "->Plotter Module->" }, "attachingRules": { - "compatibleTypes": "->Data Mining|Sensor Bot->Data Mining|API Data Fetcher Bot->Data Mining|Indicator Bot->Trading Bot->Learning Bot->Product Definition Folder->" + "compatibleTypes": "->Data-Mining|Sensor Bot->Data-Mining|API Data Fetcher Bot->Data-Mining|Indicator Bot->Trading Bot->Learning Bot->Product Definition Folder->" }, "childrenNodesProperties": [ { From 742722be718413947131a533f5d18952108b9dc5 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 26 Sep 2021 14:58:22 +0200 Subject: [PATCH 09/82] Plugins Project implemented --- Platform/Client/githubServer.js | 8 +- Platform/Client/httpInterface.js | 28 +++-- ...ata-mining.png => data-mining-project.png} | Bin .../Plugins/Data-Mines/Alpha.json | 0 .../Plugins/Data-Mines/Barcelona.json | 0 .../Plugins/Data-Mines/Bollinger.json | 0 .../Plugins/Data-Mines/Buddha.json | 0 .../Plugins/Data-Mines/Candles.json | 0 .../Plugins/Data-Mines/CoinGecko.json | 0 .../Plugins/Data-Mines/Delta.json | 0 .../Plugins/Data-Mines/Heikin.json | 0 .../Plugins/Data-Mines/Indicator-Add-ons.json | 0 .../Plugins/Data-Mines/Masters.json | 0 .../Plugins/Data-Mines/Messari.json | 0 .../Plugins/Data-Mines/Omega-One.json | 0 .../Plugins/Data-Mines/Pluvtech.json | 0 .../Plugins/Data-Mines/Polus.json | 0 .../Plugins/Data-Mines/Quasar.json | 0 .../Plugins/Data-Mines/Samurai.json | 0 .../Plugins/Data-Mines/Sparta.json | 0 .../Plugins/Data-Mines/Turtles.json | 0 .../Plugins/Data-Mines/Webhooks.json | 0 .../Plugins/Data-Mines/Zeus.json | 0 .../Plugins/Data-Mines/quantum.json | 0 .../App-Schema/data-mining-project.json | 3 +- ...-actions-adding-an-action-switch-case.json | 4 +- .../UI/Function-Libraries/ActionSwitch.js | 75 -------------- .../Function-Libraries/UiObjectsFromNodes.js | 18 ++++ .../UI/Spaces/Design-Space/Workspace.js | 2 +- .../UI/Function-Libraries/PluginsFunctions.js | 30 +++--- .../Icons}/plugin-api-maps.png | Bin .../Icons}/plugin-data-mines.png | Bin .../Icons}/plugin-file-position.png | Bin .../Plugins => Plugins/Icons}/plugin-file.png | Bin .../Icons}/plugin-learning-engines.png | Bin .../Icons}/plugin-learning-mines.png | Bin .../Icons}/plugin-learning-systems.png | Bin .../Icons}/plugin-project.png | Bin .../Icons}/plugin-super-scripts.png | Bin .../Icons}/plugin-trading-engines.png | Bin .../Icons}/plugin-trading-mines.png | Bin .../Icons}/plugin-trading-systems.png | Bin .../Icons}/plugin-tutorials.png | Bin .../Icons/plugins-project.png} | Bin Projects/Plugins/Icons/plugins.png | Bin 0 -> 9720 bytes .../SA/Utilities/Plugins.js | 4 +- .../Schemas/App-Schema/plugin-api-maps.json | 3 +- .../Schemas/App-Schema/plugin-data-mines.json | 10 +- .../App-Schema/plugin-file-position.json | 3 +- .../Schemas/App-Schema/plugin-file.json | 6 +- .../App-Schema/plugin-learning-engines.json | 3 +- .../App-Schema/plugin-learning-mines.json | 3 +- .../App-Schema/plugin-learning-systems.json | 3 +- .../Schemas/App-Schema/plugin-project.json | 6 +- .../App-Schema/plugin-trading-engines.json | 3 +- .../App-Schema/plugin-trading-mines.json | 3 +- .../App-Schema/plugin-trading-systems.json | 3 +- .../Schemas/App-Schema/plugin-tutorials.json | 3 +- .../Schemas/App-Schema/plugins-project.json | 45 ++++++++ .../Schemas/App-Schema/plugins.json | 3 +- .../Plugin-API-Maps/plugin-api-maps.json | 0 .../Plugin-Data-Mines/plugin-data-mines.json | 0 .../plugin-file-position.json | 0 .../P/Plugin/Plugin-File/plugin-file.json | 0 .../Plugin/Plugin-Project/plugin-project.json | 0 .../plugin-super-scripts.json | 0 .../plugin-trading-engines.json | 0 .../plugin-trading-mines.json | 0 .../plugin-trading-systems.json | 0 .../Plugin-Tutorials/plugin-tutorials.json | 0 .../Docs-Nodes/P}/Plugins/plugins.json | 0 .../UI/Function-Libraries/ActionSwitch.js | 98 ++++++++++++++++++ .../UI/Function-Libraries/PluginsFunctions.js | 66 ++++++------ .../UI/Utilities/Plugins.js | 12 +-- Projects/ProjectsSchema.json | 63 +++++++---- .../Social-Trading/NT/Modules/Bootstrap.js | 4 +- 76 files changed, 320 insertions(+), 192 deletions(-) rename Projects/Data-Mining/Icons/Data/{data-mining.png => data-mining-project.png} (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Alpha.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Barcelona.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Bollinger.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Buddha.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Candles.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/CoinGecko.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Delta.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Heikin.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Indicator-Add-ons.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Masters.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Messari.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Omega-One.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Pluvtech.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Polus.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Quasar.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Samurai.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Sparta.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Turtles.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Webhooks.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/Zeus.json (100%) rename Projects/{Foundations => Data-Mining}/Plugins/Data-Mines/quantum.json (100%) mode change 100755 => 100644 rename Projects/{Foundations/Icons/Plugins => Plugins/Icons}/plugin-api-maps.png (100%) rename Projects/{Foundations/Icons/Plugins => Plugins/Icons}/plugin-data-mines.png (100%) rename Projects/{Foundations/Icons/Plugins => Plugins/Icons}/plugin-file-position.png (100%) rename Projects/{Foundations/Icons/Plugins => Plugins/Icons}/plugin-file.png (100%) rename Projects/{Foundations/Icons/Plugins => Plugins/Icons}/plugin-learning-engines.png (100%) rename Projects/{Foundations/Icons/Plugins => Plugins/Icons}/plugin-learning-mines.png (100%) rename Projects/{Foundations/Icons/Plugins => Plugins/Icons}/plugin-learning-systems.png (100%) rename Projects/{Foundations/Icons/Plugins => Plugins/Icons}/plugin-project.png (100%) rename Projects/{Foundations/Icons/Plugins => Plugins/Icons}/plugin-super-scripts.png (100%) rename Projects/{Foundations/Icons/Plugins => Plugins/Icons}/plugin-trading-engines.png (100%) rename Projects/{Foundations/Icons/Plugins => Plugins/Icons}/plugin-trading-mines.png (100%) rename Projects/{Foundations/Icons/Plugins => Plugins/Icons}/plugin-trading-systems.png (100%) rename Projects/{Foundations/Icons/Plugins => Plugins/Icons}/plugin-tutorials.png (100%) rename Projects/{Foundations/Icons/Plugins/plugins.png => Plugins/Icons/plugins-project.png} (100%) create mode 100644 Projects/Plugins/Icons/plugins.png rename Projects/{Foundations => Plugins}/SA/Utilities/Plugins.js (94%) rename Projects/{Foundations => Plugins}/Schemas/App-Schema/plugin-api-maps.json (91%) rename Projects/{Foundations => Plugins}/Schemas/App-Schema/plugin-data-mines.json (77%) rename Projects/{Foundations => Plugins}/Schemas/App-Schema/plugin-file-position.json (83%) rename Projects/{Foundations => Plugins}/Schemas/App-Schema/plugin-file.json (91%) rename Projects/{Foundations => Plugins}/Schemas/App-Schema/plugin-learning-engines.json (91%) rename Projects/{Foundations => Plugins}/Schemas/App-Schema/plugin-learning-mines.json (91%) rename Projects/{Foundations => Plugins}/Schemas/App-Schema/plugin-learning-systems.json (91%) rename Projects/{Foundations => Plugins}/Schemas/App-Schema/plugin-project.json (95%) rename Projects/{Foundations => Plugins}/Schemas/App-Schema/plugin-trading-engines.json (91%) rename Projects/{Foundations => Plugins}/Schemas/App-Schema/plugin-trading-mines.json (91%) rename Projects/{Foundations => Plugins}/Schemas/App-Schema/plugin-trading-systems.json (91%) rename Projects/{Foundations => Plugins}/Schemas/App-Schema/plugin-tutorials.json (91%) create mode 100644 Projects/Plugins/Schemas/App-Schema/plugins-project.json rename Projects/{Foundations => Plugins}/Schemas/App-Schema/plugins.json (91%) rename Projects/{Foundations => Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-API-Maps/plugin-api-maps.json (100%) rename Projects/{Foundations => Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-Data-Mines/plugin-data-mines.json (100%) rename Projects/{Foundations => Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-File-Position/plugin-file-position.json (100%) rename Projects/{Foundations => Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-File/plugin-file.json (100%) rename Projects/{Foundations => Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-Project/plugin-project.json (100%) rename Projects/{Foundations => Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-Super-Scripts/plugin-super-scripts.json (100%) rename Projects/{Foundations => Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Engines/plugin-trading-engines.json (100%) rename Projects/{Foundations => Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Mines/plugin-trading-mines.json (100%) rename Projects/{Foundations => Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Systems/plugin-trading-systems.json (100%) rename Projects/{Foundations => Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-Tutorials/plugin-tutorials.json (100%) rename Projects/{Foundations/Schemas/Docs-Nodes/P/Plugins => Plugins/Schemas/Docs-Nodes/P}/Plugins/plugins.json (100%) create mode 100644 Projects/Plugins/UI/Function-Libraries/ActionSwitch.js rename Projects/{Foundations => Plugins}/UI/Function-Libraries/PluginsFunctions.js (68%) rename Projects/{Foundations => Plugins}/UI/Utilities/Plugins.js (97%) diff --git a/Platform/Client/githubServer.js b/Platform/Client/githubServer.js index 004811b2f..2a779b259 100644 --- a/Platform/Client/githubServer.js +++ b/Platform/Client/githubServer.js @@ -508,14 +508,14 @@ exports.newGithubServer = function newGithubServer() { unless the existing one belongs to the same Github username. */ let userProfileIdMap = new Map() - let pluginFileNames = await SA.projects.foundations.utilities.plugins.getPluginFileNames( + let pluginFileNames = await SA.projects.plugins.utilities.plugins.getPluginFileNames( 'Governance', 'User-Profiles' ) for (let i = 0; i < pluginFileNames.length; i++) { let pluginFileName = pluginFileNames[i] - let pluginFileContent = await SA.projects.foundations.utilities.plugins.getPluginFileContent( + let pluginFileContent = await SA.projects.plugins.utilities.plugins.getPluginFileContent( 'Governance', 'User-Profiles', pluginFileName @@ -558,13 +558,13 @@ exports.newGithubServer = function newGithubServer() { unless the existing one belongs to the same Github username. */ let userProfileIdMap = new Map() - let pluginFileNames = await SA.projects.foundations.utilities.plugins.getPluginFileNames( + let pluginFileNames = await SA.projects.plugins.utilities.plugins.getPluginFileNames( 'Governance', 'User-Profiles' ) for (let i = 0; i < pluginFileNames.length; i++) { let pluginFileName = pluginFileNames[i] - let pluginFileContent = await SA.projects.foundations.utilities.plugins.getPluginFileContent( + let pluginFileContent = await SA.projects.plugins.utilities.plugins.getPluginFileContent( 'Governance', 'User-Profiles', pluginFileName diff --git a/Platform/Client/httpInterface.js b/Platform/Client/httpInterface.js index cbe0d20aa..37e7234bd 100644 --- a/Platform/Client/httpInterface.js +++ b/Platform/Client/httpInterface.js @@ -1067,7 +1067,7 @@ exports.newHttpInterface = function newHttpInterface() { ) SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(serverResponse), httpResponse) - + setInterval( PL.servers.GITHUB_SERVER.mergePullRequests, 60000, @@ -1075,7 +1075,7 @@ exports.newHttpInterface = function newHttpInterface() { params.username, params.token ) - + return } case 'payContributors': { @@ -1106,7 +1106,7 @@ exports.newHttpInterface = function newHttpInterface() { } try { SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(error), httpResponse) - } catch(err) { + } catch (err) { // we just try to reponnd to the web app, but maybe the response has already been sent. } } @@ -1382,11 +1382,13 @@ exports.newHttpInterface = function newHttpInterface() { try { let project = unescape(requestPath[2]) let folder = unescape(requestPath[3]) - - let response = await SA.projects.foundations.utilities.plugins.getPluginFileNames( + + let response = await SA.projects.plugins.utilities.plugins.getPluginFileNames( project, folder - ) + ).catch(err => { + console.log('[ERROR] httpInterface -> PluginFileNames -> err.stack = ' + err.stack) + }) SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(response), httpResponse) @@ -1419,12 +1421,18 @@ exports.newHttpInterface = function newHttpInterface() { if (fileName === 'Superalgos-CL.json') { fileName = 'Superalgos-PL.json' } - - let response = await SA.projects.foundations.utilities.plugins.getPluginFileContent( + + await SA.projects.plugins.utilities.plugins.getPluginFileContent( project, folder, fileName - ).catch(err => { + ) + .then( response => + { + SA.projects.foundations.utilities.httpResponses.respondWithContent(response, httpResponse) + } + ) + .catch(err => { let error = { result: 'Fail Because', message: err @@ -1433,8 +1441,6 @@ exports.newHttpInterface = function newHttpInterface() { return }) - SA.projects.foundations.utilities.httpResponses.respondWithContent(response, httpResponse) - } catch (err) { console.log('[ERROR] httpInterface -> LoadPlugin -> Method call produced an error.') console.log('[ERROR] httpInterface -> LoadPlugin -> err.stack = ' + err.stack) diff --git a/Projects/Data-Mining/Icons/Data/data-mining.png b/Projects/Data-Mining/Icons/Data/data-mining-project.png similarity index 100% rename from Projects/Data-Mining/Icons/Data/data-mining.png rename to Projects/Data-Mining/Icons/Data/data-mining-project.png diff --git a/Projects/Foundations/Plugins/Data-Mines/Alpha.json b/Projects/Data-Mining/Plugins/Data-Mines/Alpha.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Alpha.json rename to Projects/Data-Mining/Plugins/Data-Mines/Alpha.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Barcelona.json b/Projects/Data-Mining/Plugins/Data-Mines/Barcelona.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Barcelona.json rename to Projects/Data-Mining/Plugins/Data-Mines/Barcelona.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Bollinger.json b/Projects/Data-Mining/Plugins/Data-Mines/Bollinger.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Bollinger.json rename to Projects/Data-Mining/Plugins/Data-Mines/Bollinger.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Buddha.json b/Projects/Data-Mining/Plugins/Data-Mines/Buddha.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Buddha.json rename to Projects/Data-Mining/Plugins/Data-Mines/Buddha.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Candles.json b/Projects/Data-Mining/Plugins/Data-Mines/Candles.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Candles.json rename to Projects/Data-Mining/Plugins/Data-Mines/Candles.json diff --git a/Projects/Foundations/Plugins/Data-Mines/CoinGecko.json b/Projects/Data-Mining/Plugins/Data-Mines/CoinGecko.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/CoinGecko.json rename to Projects/Data-Mining/Plugins/Data-Mines/CoinGecko.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Delta.json b/Projects/Data-Mining/Plugins/Data-Mines/Delta.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Delta.json rename to Projects/Data-Mining/Plugins/Data-Mines/Delta.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Heikin.json b/Projects/Data-Mining/Plugins/Data-Mines/Heikin.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Heikin.json rename to Projects/Data-Mining/Plugins/Data-Mines/Heikin.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Indicator-Add-ons.json b/Projects/Data-Mining/Plugins/Data-Mines/Indicator-Add-ons.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Indicator-Add-ons.json rename to Projects/Data-Mining/Plugins/Data-Mines/Indicator-Add-ons.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Masters.json b/Projects/Data-Mining/Plugins/Data-Mines/Masters.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Masters.json rename to Projects/Data-Mining/Plugins/Data-Mines/Masters.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Messari.json b/Projects/Data-Mining/Plugins/Data-Mines/Messari.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Messari.json rename to Projects/Data-Mining/Plugins/Data-Mines/Messari.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Omega-One.json b/Projects/Data-Mining/Plugins/Data-Mines/Omega-One.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Omega-One.json rename to Projects/Data-Mining/Plugins/Data-Mines/Omega-One.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Pluvtech.json b/Projects/Data-Mining/Plugins/Data-Mines/Pluvtech.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Pluvtech.json rename to Projects/Data-Mining/Plugins/Data-Mines/Pluvtech.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Polus.json b/Projects/Data-Mining/Plugins/Data-Mines/Polus.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Polus.json rename to Projects/Data-Mining/Plugins/Data-Mines/Polus.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Quasar.json b/Projects/Data-Mining/Plugins/Data-Mines/Quasar.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Quasar.json rename to Projects/Data-Mining/Plugins/Data-Mines/Quasar.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Samurai.json b/Projects/Data-Mining/Plugins/Data-Mines/Samurai.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Samurai.json rename to Projects/Data-Mining/Plugins/Data-Mines/Samurai.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Sparta.json b/Projects/Data-Mining/Plugins/Data-Mines/Sparta.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Sparta.json rename to Projects/Data-Mining/Plugins/Data-Mines/Sparta.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Turtles.json b/Projects/Data-Mining/Plugins/Data-Mines/Turtles.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Turtles.json rename to Projects/Data-Mining/Plugins/Data-Mines/Turtles.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Webhooks.json b/Projects/Data-Mining/Plugins/Data-Mines/Webhooks.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Webhooks.json rename to Projects/Data-Mining/Plugins/Data-Mines/Webhooks.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Zeus.json b/Projects/Data-Mining/Plugins/Data-Mines/Zeus.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Zeus.json rename to Projects/Data-Mining/Plugins/Data-Mines/Zeus.json diff --git a/Projects/Foundations/Plugins/Data-Mines/quantum.json b/Projects/Data-Mining/Plugins/Data-Mines/quantum.json old mode 100755 new mode 100644 similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/quantum.json rename to Projects/Data-Mining/Plugins/Data-Mines/quantum.json diff --git a/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json b/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json index de9583907..e6190d9e1 100644 --- a/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json +++ b/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json @@ -12,6 +12,7 @@ "action": "Add UI Object", "label": "Add Data Mine", "relatedUiObject": "Data Mine", + "relatedUiObjectProject": "Data-Mining", "actionFunction": "payload.executeAction", "actionProject": "Foundations" }, @@ -31,7 +32,7 @@ "addLeftIcons": true, "isPinned": true, "positionLocked": true, - "icon": "data-mining", + "icon": "data-mining-project", "childrenNodesProperties": [ { "name": "projectDefinition", diff --git a/Projects/Foundations/Schemas/Docs-Topics/H/How/How-to-Automate-Actions-at-The-Design-Space/how-to-automate-actions-at-the-design-space-008-automating-actions-adding-an-action-switch-case.json b/Projects/Foundations/Schemas/Docs-Topics/H/How/How-to-Automate-Actions-at-The-Design-Space/how-to-automate-actions-at-the-design-space-008-automating-actions-adding-an-action-switch-case.json index 829842bbb..f04dac108 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/H/How/How-to-Automate-Actions-at-The-Design-Space/how-to-automate-actions-at-the-design-space-008-automating-actions-adding-an-action-switch-case.json +++ b/Projects/Foundations/Schemas/Docs-Topics/H/How/How-to-Automate-Actions-at-The-Design-Space/how-to-automate-actions-at-the-design-space-008-automating-actions-adding-an-action-switch-case.json @@ -32,7 +32,7 @@ }, { "style": "Javascript", - "text": "UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginTradingEngines(action.node, action.rootNodes)\n", + "text": "UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginTradingEngines(action.node, action.rootNodes)\n", "updated": 1614938043930 }, { @@ -50,7 +50,7 @@ }, { "style": "Json", - "text": "{\n \"name\": \"Plugins Functions\",\n \"propertyName\": \"pluginsFunctions\",\n \"functionName\": \"newFoundationsFunctionLibraryPluginsFunctions\"\n }", + "text": "{\n \"name\": \"Plugins Functions\",\n \"propertyName\": \"pluginsFunctions\",\n \"functionName\": \"newPluginsFunctionLibraryPluginsFunctions\"\n }", "updated": 1614938194636 }, { diff --git a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js index 657d4fe19..480c3ade0 100644 --- a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js @@ -114,11 +114,6 @@ function newFoundationsActionSwitch() { UI.projects.foundations.functionLibraries.nodeDeleter.deleteUIObject(action.node, action.rootNodes) } break - case 'Install as Plugin': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.installAsPlugin(action.node, action.rootNodes) - } - break case 'Edit Code': break @@ -660,76 +655,6 @@ function newFoundationsActionSwitch() { } } break - case 'Add Missing Plugin Projects': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginProjects(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Types': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginTypes(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Data Mines': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginDataMines(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Trading Mines': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginTradingMines(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Trading Systems': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginTradingSystems(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Trading Engines': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginTradingEngines(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Learning Mines': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginLearningMines(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Learning Systems': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginLearningSystems(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Learning Engines': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginLearningEngines(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Tutorials': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginTutorials(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin API Maps': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginApiMaps(action.node, action.rootNodes) - } - break - case 'Enable Saving With Workspace': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.enableSavingWithWorkspace(action.node, action.rootNodes) - } - break - case 'Disable Saving With Workspace': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.disableSavingWithWorkspace(action.node, action.rootNodes) - } - break - case 'Save Plugin': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.savePlugin(action.node, action.rootNodes) - } - break case 'Add Missing Workspace Projects': { UI.projects.foundations.functionLibraries.workspaceFunctions.addMissingWorkspaceProjects(action.node, action.rootNodes) diff --git a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js index b02a724fc..1ee871873 100644 --- a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js +++ b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js @@ -451,6 +451,24 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { node.project = "Data-Mining" } + if ( + node.type === 'Plugins' || + node.type === 'Plugin Tutorials' || + node.type === 'Plugin Trading Systems' || + node.type === 'Plugin Trading Mines' || + node.type === 'Plugin Trading Engines' || + node.type === 'Plugin Project' || + node.type === 'Plugin Learning Systems' || + node.type === 'Plugin Learning Mines' || + node.type === 'Plugin Learning Engines' || + node.type === 'Plugin File' || + node.type === 'Plugin File Position' || + node.type === 'Plugin Data Mines' || + node.type === 'Plugin API Maps' + ) { + node.project = "Plugins" + } + /* This function can be called with a positionOffset to change the node saved position and all of its descendants positions as well with an diff --git a/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js b/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js index 61a2b1335..da55b395d 100644 --- a/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js +++ b/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js @@ -255,7 +255,7 @@ function newWorkspace() { let saveWithWorkspace = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(pluginFile.payload, 'saveWithWorkspace') if (saveWithWorkspace === true) { - UI.projects.foundations.utilities.plugins.savePluginFile(pluginFile) + UI.projects.plugins.utilities.plugins.savePluginFile(pluginFile) } } } diff --git a/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js b/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js index e8a4a29e5..c563f066f 100644 --- a/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js +++ b/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js @@ -9,7 +9,7 @@ function newGovernanceFunctionLibraryPluginsFunctions() { return thisObject function addMissingPluginUserProfiles(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage( @@ -20,15 +20,15 @@ function newGovernanceFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'User-Profiles', onNamesArrived) + UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'User-Profiles', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'User-Profiles', 'User Profile') + UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'User-Profiles', 'User Profile', 'Governance') } } function addMissingPluginPools(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage( @@ -39,15 +39,15 @@ function newGovernanceFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Pools', onNamesArrived) + UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Pools', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Pools', 'Pools') + UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Pools', 'Pools', 'Governance') } } function addMissingPluginAssets(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage( @@ -58,15 +58,15 @@ function newGovernanceFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Assets', onNamesArrived) + UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Assets', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Assets', 'Assets') + UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Assets', 'Assets', 'Governance') } } function addMissingPluginFeatures(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage( @@ -77,15 +77,15 @@ function newGovernanceFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Features', onNamesArrived) + UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Features', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Features', 'Features') + UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Features', 'Features', 'Governance') } } function addMissingPluginPositionss(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage( @@ -96,10 +96,10 @@ function newGovernanceFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Positions', onNamesArrived) + UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Positions', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Positions', 'Positions') + UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Positions', 'Positions', 'Governance') } } } diff --git a/Projects/Foundations/Icons/Plugins/plugin-api-maps.png b/Projects/Plugins/Icons/plugin-api-maps.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-api-maps.png rename to Projects/Plugins/Icons/plugin-api-maps.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-data-mines.png b/Projects/Plugins/Icons/plugin-data-mines.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-data-mines.png rename to Projects/Plugins/Icons/plugin-data-mines.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-file-position.png b/Projects/Plugins/Icons/plugin-file-position.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-file-position.png rename to Projects/Plugins/Icons/plugin-file-position.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-file.png b/Projects/Plugins/Icons/plugin-file.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-file.png rename to Projects/Plugins/Icons/plugin-file.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-learning-engines.png b/Projects/Plugins/Icons/plugin-learning-engines.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-learning-engines.png rename to Projects/Plugins/Icons/plugin-learning-engines.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-learning-mines.png b/Projects/Plugins/Icons/plugin-learning-mines.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-learning-mines.png rename to Projects/Plugins/Icons/plugin-learning-mines.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-learning-systems.png b/Projects/Plugins/Icons/plugin-learning-systems.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-learning-systems.png rename to Projects/Plugins/Icons/plugin-learning-systems.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-project.png b/Projects/Plugins/Icons/plugin-project.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-project.png rename to Projects/Plugins/Icons/plugin-project.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-super-scripts.png b/Projects/Plugins/Icons/plugin-super-scripts.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-super-scripts.png rename to Projects/Plugins/Icons/plugin-super-scripts.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-trading-engines.png b/Projects/Plugins/Icons/plugin-trading-engines.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-trading-engines.png rename to Projects/Plugins/Icons/plugin-trading-engines.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-trading-mines.png b/Projects/Plugins/Icons/plugin-trading-mines.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-trading-mines.png rename to Projects/Plugins/Icons/plugin-trading-mines.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-trading-systems.png b/Projects/Plugins/Icons/plugin-trading-systems.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-trading-systems.png rename to Projects/Plugins/Icons/plugin-trading-systems.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-tutorials.png b/Projects/Plugins/Icons/plugin-tutorials.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-tutorials.png rename to Projects/Plugins/Icons/plugin-tutorials.png diff --git a/Projects/Foundations/Icons/Plugins/plugins.png b/Projects/Plugins/Icons/plugins-project.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugins.png rename to Projects/Plugins/Icons/plugins-project.png diff --git a/Projects/Plugins/Icons/plugins.png b/Projects/Plugins/Icons/plugins.png new file mode 100644 index 0000000000000000000000000000000000000000..09d71a2968da53a11a4f3ebddd1e549e9975de0a GIT binary patch literal 9720 zcmd6NcT`hN*ykh!4LwLzO27gr)t4qUL0%D+CRJ*XB2|j?ng{|4QhZTRq)Jt!C`yMQ z2w3PKAT1Q7w@`zGWbeCs_Uzen_B*@Z_t)m1xi|NjnL9JjJkM`_zx&9@;3^yQDP{lw z+cn+4jRAl|mvDeQ1{FKOLw}&+r2my${wCgc{DW@aa|T*Y-VV+p*Y4hSaW;0o?G)ns z)ma^Ya~aqE)-nwqTb;yt+ID84H}eWE1)flQtZXnKWo#QVxcla3t0{v2?)@^|TtgW1 zwZ$>r96e3$TVFVe04!oGCDaB>D0yX$=9Q?(Rx;y7#lYQi-jsrITYjS}8)9Y?s(ogI zPRj4{`vN`7?tWcmRe9`u1s_b$#^-SO_^f^Y)s*SCeh}f(lc~Z5lPJSz9A^Ed{AHb& ztiJ7?6ISimt97u}hcFtOCB3;tHsoDZK>@-i!8g+`**%{ap=-@1iCSpX3cBl8EIx`K zHEJN?pf6{M8Nc_M-(GC(GGsEPVN34CIP*mTpin_z1|k4NxSCP78xT;%z7|k9E`xvp zls(~}pM^~JKBQWzyCh%Juv|Qeqk``FE9W5kWlgI%DcJEW@vtNG`2>03=Mrbc&U&1z z`bfagCwnmk*pAuepo8-9wt1(T>juFMwBd@@?+p{^$Ut^}T_b#{>M(}A9rjNnFjwv;L?)x?An<3(k$Xmm#BA_KO z9)E#aW%Wwwjw2E^j|GH7Ub-oTO<<%qoE3Ii2nl>fW=YJkM=Mgc?5=LdP+;0%$?6>w zepm6u{za&MMHqdM>}+*oXzIf_gBBo+OS{4kPa%M-`3C;_2GKVkm}J0UAlQy;bU_4Q zw*?0fdn!oKCvq@MOiOdkOtXe_g4~}rEY%xY09*lw!UzDckYE0%3m5<>sNR32_)qus zzbgDccd1iQ%Cs7W0=XgPiuWTpAb0Ev+Shm%-;x2%!bc8VumLn|LacTF|Ck^31;~p1 ze_Dk`+e-KIPeN8bNB}2@5!gDR$87q47*Q_h}u0N8Lf|f9RO4 zuZ9n<3P-x0-8h<(jpVeWeII+~Ku#;WnsuSm1O!GtWLi%kttkd0s7#iMX_ zbk~-L@x(kl3fNOcr$3_UT`6=W_4>U~3YBDQLWTUVRlBAC_71H9e^`HPvPhQ0+hO)* zI~oBNl@U_y>Hg!lib*7L>PUsh7h(0C{S7Z0c7E)b#i0WkH<01u?ZxomcpO2&FMM7g z9ha3+@PcESxs`tN|peNRhe>f|L zZ7Z;#sMV{Q0o|6U8Wyj-qY$ZC-U2Yl;LTbaU-pgmuBxS)jS?~FkLB6m3H9bp<4nQ>bYh!q29bVHI@yaAUSjqn)63OV+mEk1bSu>f&2mrwb-r5rB%=H z5KXVaD-p3*N2ZX5WswzM?&xYQhOZw8oP>7#DISE_+;`Kl=G{NI%!&2hqY6Ws`9d%H zuqk2uz?;4~%)uUh_h`4_SfY1?&y2Dmb7%QZfL(2X6Wt-)a@31V3i&he_zZ}zy1|9@ z-I^c_ajjFyPmaXHDE$d8hIkKOHTn!*^Ig!pFHer;76_sA|9f&1fg%8u&#$q+= zXuN3CO%Eqm<8fJ+0#8}1^kUJHF*+uZ)^CoR-%4JpaBMdr5Onj~HJ;H+A>=?Yc2MD_OqL)*)Lrw&# z@E`yz+fu~m(*8LzYez4NB5m}8tUq__<^e2Y0^L)Fx^2al@mQ%uxQ*f|5n$BZnp3_jyO2%v2yBti zo9`#2W?Tljg6%{eoD3qBN+3T^7M*_26a@$Eyz~#xub$efdCnncu#}l9!*ppM3Al}@ z9KW-P-0a+XY6?A6=xmN&q;_fiNXcw9|E8&mI} zh$FalivT(5ET)jca4x7P6Tk>FymWK984d|z*`xc?`l3KCm`u7Au1!9Efg9dqDUJp9 zK5jpxwcWAL^nUyC!9m0x%_W+LMsUvva3KIJzMXhZi-9L-ARKCIDx{LbC?NIIa7BEt$Kx1`aGa0+^f}v+1;t6ZrMKK%UCKX{;@zueddm5eEi{mE z$}5C6UH`|8n>Odi;~;l6c6lk9D^RlsyaQVDj8#;X;DBTCsAe`H@4frD1{P*JHZRd) zL-lSrcXY^snfBH_!xuNVfObOU|CTE)u;hX>f_2hi@z^ojs@q~-H};oQif4byte|sP z!u|*(#gQ8Io@nkjQ%G<34iEicH~-F@j(gZfDTQ)mg5`dQh7!Sg=SU*K{4L`c~>?sNPYZkr&*caNnt`Pl!3%c5Z4}zrwsp zRLAG_Y)G7ibWeaE^jrq^G=CrSBH`Gsj}aFuPMDT6eBzml3<0#P;U3!0x6pB%-+5gs{O7?Uye-Ba}bzZC7) z&(&wnPQ(Et*^pPaZrm6e^Ng%D=@-ovQu1!HYUq{t)GWyR&6qlPj(eXvGU7DRIhc`m zX&9D5IN9`@AAY%ClJXnX*Auh5*I-cZZ2kNkzJuk{xt%@Kc?4l>($458Q& zDG~lqgZI!_R?g`oQRgDu=vN(A`KyE4;L?Hk8E2im#DuzDsTh z!W(Y7dF3A7q;O@mc(z*MvCFZcg3aP$`(_E0@_-&IOsHEfQVho1*+lPt7H^aBGg9%` zr&KeXqFnb-@5pM{QQhm>tS+r!Epm{IQ)3s*r_aO_rK>?Y;D^`W-WH}>w9Y%?2Ma#o z_T#sGxZ(<5#{pMN% zrgP(j!}R&$nPDL?zMADc`Lobp#knYzJyeP~HEWQ{N`CI{#s~uvzQ`|av~v3d{y z%g9@5mayIFT?)c0Efm6eo`kMch1}2MhReiuGsc>4R8u$a8X_~E0L6k`3D!LpK=&kf0Srh8RC}r z{SEAO@1toSSVfG>wmqQ|2;M#;Y#^wk25jnuQ_=?w9->UKFf0bI8C*gJVAd0)K0 zLNt^ieTdnkHkhUetz0t9K7X_G^q}w$fzKi-NiR}AorA-2FOcy1SjK|vv6)*G7adD# zD&!eEsU0Bp!+AB^-?dgwlA=xZj&py)2Q2$bN^JZpV z-PS(!Mu1Hb%4g*ZZ6~=Z(C~G@y?*ILO2|AkYXPfICm@)dA?96uIa5p7@!6NP0knE<7*$IrQ$%R!9jfF7ybr;&RTNdIoHb>edS~?a!G+cL);iVh%jR+bDs<&vyP*XGRyPT=IiXb5Ab3l)-tT@OY9B8C`TEy%xWUhW7&WuKJbJ@p zxaq|YrcIPycP3cw2+GGm{&C?xseI7|H;^jXxR3ifv(qT$J0fFBWh886D2dzeXw<%m z+*D`ot7c)TGTySJbKL8Y5p*Nxm_Zg=-3@B?1#j%IS)XG%i-ZrIWoTv78AKp=_IrlC zf=2Co(q2vCO@jZz<&kp12CthdRE`_j4fbXO{krWWK^d66gcSsY)k;sst~=O9J+@T| z%*vn&Ev$XZ+ou(`&0qFL0&V%ObEyrXi2}<5hjp$N7c$v6{yMsThR_)oE)zU8q7C@l zC0dM(okP1kC-xq6n|(SZfY^#sjbcr_yWJ>fWK!5l6tDg?TPfz(F@-<1m$SQz0y?)# zzWy~yON(yl?`s_Y>TaT7lDqwbKWyf$$;%)C$|Tx-hL|`j3m$jvJY?3bPY)@&t?{*< zF*~UuZc_rN*N&hQXw96*Y8je^;VmV4>%mK_y2DR;s=k^aU0Fb1iDU73Qp`?EQTv6! z0R*UiysC9#DXn&=>mc?4!9wtQ-}8-D8@nSPr>$Ll4Qj5 z1mb(Ik>w(xbB>NB`!wTz{oaz2KW+b@fW&Ro^G8}Di3ryBQ-OC4W<&fRkYCtf-UYqa zX}^1G<{gxUt5#J19%T=L^?9Ro#b5f5JCMX@Ze3bA0pHR67=m+1IoUya=gZ}}dSjtd{X}|hr+@m}+#cg4hJzmgSXBvIy`JVL227i}t4*ImD$ikC*Hv%R< zLEbdZjGl}cV&-@*bwHwZO3pkn)Z`Wpq2z70ccNKv!PF`NdQX%7XC1o{)*$7B4#PG~ z_*zAqHlDsNLKHilFQP@R%oVgD3vUevJ9?UNQV6ru{C)C9T@gT{a4of z#b1uaIUx!krD^ZP3iot_1iLx@G(;Y1YU3r^6=32Nw>SZy0mdHQ@HtK zgZ?A89bXz0JoCbZ81jDp3@l4CY}*X)wV%*@F-FBSx|d`~_8w`Z;P`dOhLKy_D>Jfo z2c(&`ATLTa5{z#TE$_E_A5DI|O&^0|K$^#t{}S&fyD%pfp7o=!osvz(hmqMb^%-J^ zKN=|<0Z|Ky`%@gU^y#aY31HJ67qV8NTz-)JWmSIsCC2E-O~OY(cxZoo%!fA`bqDrq za z6XI8Wc)rBU@}?|_EVp58k}b!Z;C?PCOMRP|Q-@v4kX=zr^K;1Hu$O7M`j#OjakHLo z8z${d?U(1%teG=E`EoW~^(X5+54%4l_pFh!9|m{vuipEr$Edk- zZ_)eLqN#0=oiGjka>e`Tg8HAOtKl99LUKV&WXIBSSzHmOCjaR*f7SgCm#ypgqk8^O z^n7OgMuQ-!ri&|UfT{7ffJyV5(q6e?huv2HiGA9_;p$TPkKHjmr)KRzo(>8GW0RL# z38Es2U`M{+O{saKUHwI+XA}Lm5&gTenG!l-Rnj?}7T#<<^9zs)wUQ@yXuWYK%B@1) z9lFfms%eS&HDDgf=qR}_t5mIW3z-Ej^Plnbw{5R>(!K|J*wfUbZInWtTO9W<^Y@%- zYaWF|0iHtCW`_1=gc}cK%1x%VPMuu-urwLjy28*0j{ULQB;4{abhS!!QY*xXzE#P`7EkoPfLkHHp^O+`_-5hw#I7qQv?K;|G!?!o zLF0$zZW+&@e`PPr4GY?~da>v`V_jd3*WruF zgOAP@%1TJj2VZV|9@+BUz8=}M@=7g4_>+^SS9VWDD$juoOAQh@Z{fW)hG>7py=)}s zn9lHaKNF>9FI~j1zi!A{bRY*+l5^#JB)nPbM$^~i*-w}bN=z{}oP_26P5ZSbn|Uxo zUm^xAQ)+$-*VrBBmWn+vplTKsel$FmejWw*O)A{GnT{X(r&&8rJjwQCNq$P&k0i)< zmb=r)Y6p1X(D0zj;aDiLhYFRFA5@8ZvcC@Xl-co8l!}N93iq=ccohNO#%bC{Ut}Tr5bd6pTn>+gOev|}Rh z7mjjsNJpD&SMP&9DZ1}QvP^hWc(TxB`A3_^WR6;!r7JLS21M}DcaU?=`ntp}SS~uX z&Igwyo~IQnG|7%UQhUt=<-EU;nJfEo+slMLr%BB)`clKlKsYopuN9{yfWk0H?+ahx zf35;pJ@6*%WIT5Nh9JqnS^FV$3keJW&YM=JWDL7#3(Yq!RK7t}Yv$BHE zo4Fr3H2>)San04(VsoN$^?q2x;ordl%N&AQP(9kH%ZJPU8bbW3bB6|#^#?{sv}=&- zd;f#CIpUxw$FgGG_V1?;Q~+o{`D@G4dRr726)1Q*C}DPr6u`IN+qstZs8Ed2@xf@S4?8R&r1Y&zc0}l8 zo(NFr;1J7Re9&F!Q!25mq{<+}puYK)!`RI`knxR z@9whh$2z(N0rQgzx^*|}<=~spqC-pCEngSuP{9dtlBfC)Nue1cDGa`mEzt3FXzcPP z6;MVcuoG#D3~&&zepI|d+qQy7w&m?|g+(YsUgb+L_Yb zV4t3igh6e*hR&>XQEAvX^!^$5Z@x#N@@1&jsV}+li`|!5VaI1zGM_;bgZnQI(w~|8 z7`6Arw@kz)C;;6zycE)kyFlZm-lyqxuH9pWpGUlPWk(QBQ93t{98{kMNmFBPHKsct zFR9v-iJpdSEfaqwfRR% ztRGX2uqXs}H~F!5h2z(CG0#qkV{)F7*S!{rw2-fXaD1>A<(~>mdjJ z+c^NigFyVj_FQP`T)^En^{&x-3ZIO+%X3Dp$HhIHA#%H>jbA2#_Tl5mle1vLww_fk z_9o%S=%M$>2TC#5(6y^49)Aw+rZ?B!q;1uR=ODeq-D>i6L2V6w>qo_dPR*k)C6PyC zB^+B(g)cf%lTPzLih*3uT2YvB@$oYCdF&DH@Cd(*JOS3dp^!B5qT;AW;xhIEO+KJ$ zFDH(sagSRE{oX?o$IS1J)YYI{6w_jU(%~(8+ASFTpP)7i;#T42BTBD!3j4B#qAcxu zk|2NG64V2q01CeM0Jd>Umy1?UtikZoF-Fvl+q01FU^~LPAGkeVwpq2}9h-y0OHKrD z9BmG(DOYbhPBs?u?2f(L3|bk}jK{Z!0mJ4}&Npsev!l-fC+S~YvXAaadX`7`h4$eO zzl%p6wj>&2(rDv})<<1?d_ZT00%=YkOHL}q>1v(}$Y8Z}>%EDX`#WFssF&)wf?B$z}2I94N`t|ATd zG*NXCjMoyGycZ4;AQxHv6Z;V&u1aA{OWE>|7q;@hh5ix{F_OmD%i` z<@u7uXRq%LggB{khpBAXv!0ee!w&PfpMC3iZctcr!^Z3KS4RB6@9is&!WisvT}AEXF~UNrZKUY&eY~!;(A`P0%A3I>22unjWD;U zsZj1SGPETp-=AMk`#bo)l+-30&MxR4h8O*<@wo6kH$Bk~!W~OhPnS4HU)L50YY@WT`1s0i)N^k{UY7Ua#YpGVtq@X=@C>GpU#UtewFWM$HfBj@7+PPV>IT}q~Fe63q|vczb~Tv6<%&&siSj! zOw;B1m{M_g73Pj+^06+CgZ*+>E0{g^z$V?uz^ASggRU{9*rKIyoOKp*7r#?z<Zx^%E3MY<{n0bB@%H+{}Q)4c1AyINRcTGv03ISQNjz_!rj%Ah$Dxx0VM_ z$NyElFET?$gPCHWIIQ0rb@vNYU6&6P9BLfy*s!5bc0= z8!l&52X6%6#>dOc&LIfdp)}u@kDBl!Dd3F|eEtD|**6R*;@i==cA_m#Ua;xx`nr*g z3=H<@GWHbXD4)747S!f%qLX9r$vihC*KFk)D`(j`-(n@01M~0fve5&xG1Q+}L%kkHi&)fE$*#9vFsa-bL z_C}nhaL%e1yW02M(hFJ&=MHQndbP`pTXN28Bfqp0Jv$9fcK_-WI|EUio{O>F$HTZ) z9Q@=w*(K9`M>QA;JJjuFmdPY>l90cGLutgfJJM)1$t&uQWHFO6Y==aC^)(ZSqJ?nH zOBe&xgc*(I0sk+H=8*D@1^>HFpDSLP0ST44w*#}AKNRu&+qCOn`LE#Ee1An4771w) z{5(7m4j{zdq%uMhWbS=dItxhj)8~TT29DkKSAY?EQh>-V{1V?^N?aMammorvcnW7_ z71bL0-$R{5HBzYI75hn;YeAA2$YkII84Iue$3+2-AZFQ*fMd_BsYkpP&?CSy-0sef z@+@Frx&1w^aO?&e){+je3&&x(>s!u*q%?4e6_&r_z&Jhb>b>X(3W8ryw0{JhzxD2pN3B>;EFaqZTf|)3gc%2_l1OycH zh06kIm>Uim^u3)W^+Q*4Y_PDX1_pwIf3yb;4q{>mkivGi4EFfuGI_&Zj#O6(MvfslTqq zl|YLxLIGDh)bq!(akGJPUgx>>+<9PxF}|biB{OdvAgEnEHV`O6JPnNQW>wZXQLbo2 zAV4S+Vo9mhe6%skCy3&@-tx2`T4v*0ENBg`0)c-Svxc-~M#$a&Kl-_*(Pdk}_2O@y U3k?{Ke_!m{6@$OaFWX1`H~7(pU;qFB literal 0 HcmV?d00001 diff --git a/Projects/Foundations/SA/Utilities/Plugins.js b/Projects/Plugins/SA/Utilities/Plugins.js similarity index 94% rename from Projects/Foundations/SA/Utilities/Plugins.js rename to Projects/Plugins/SA/Utilities/Plugins.js index 7998febf6..fb5f66c96 100644 --- a/Projects/Foundations/SA/Utilities/Plugins.js +++ b/Projects/Plugins/SA/Utilities/Plugins.js @@ -1,4 +1,4 @@ -exports.newFoundationsUtilitiesPlugins = function () { +exports.newPluginsUtilitiesPlugins = function () { let thisObject = { getPluginFileNames: getPluginFileNames, @@ -14,7 +14,7 @@ exports.newFoundationsUtilitiesPlugins = function () { SA.nodeModules.fs.readdir(path, (err, files) => { if (err) { - reject() + reject(err) return } if (files === undefined) { diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-api-maps.json b/Projects/Plugins/Schemas/App-Schema/plugin-api-maps.json similarity index 91% rename from Projects/Foundations/Schemas/App-Schema/plugin-api-maps.json rename to Projects/Plugins/Schemas/App-Schema/plugin-api-maps.json index 9274fb772..207cde2d5 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-api-maps.json +++ b/Projects/Plugins/Schemas/App-Schema/plugin-api-maps.json @@ -17,7 +17,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-data-mines.json b/Projects/Plugins/Schemas/App-Schema/plugin-data-mines.json similarity index 77% rename from Projects/Foundations/Schemas/App-Schema/plugin-data-mines.json rename to Projects/Plugins/Schemas/App-Schema/plugin-data-mines.json index 8599d57c8..b84e59308 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-data-mines.json +++ b/Projects/Plugins/Schemas/App-Schema/plugin-data-mines.json @@ -7,7 +7,9 @@ "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", - "relatedUiObject": "Data Mine", + "iconPathOn": "data-mine", + "iconPathOff": "data-mine", + "iconProject": "Data-Mining", "actionFunction": "payload.executeAction" }, { @@ -17,7 +19,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, @@ -31,7 +34,8 @@ "name": "pluginFiles", "type": "array", "childType": "Plugin File", - "autoAdd": false + "autoAdd": false, + "project": "Foundations" } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-file-position.json b/Projects/Plugins/Schemas/App-Schema/plugin-file-position.json similarity index 83% rename from Projects/Foundations/Schemas/App-Schema/plugin-file-position.json rename to Projects/Plugins/Schemas/App-Schema/plugin-file-position.json index 98fd30600..982ed5de5 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-file-position.json +++ b/Projects/Plugins/Schemas/App-Schema/plugin-file-position.json @@ -8,7 +8,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "title": [ diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-file.json b/Projects/Plugins/Schemas/App-Schema/plugin-file.json similarity index 91% rename from Projects/Foundations/Schemas/App-Schema/plugin-file.json rename to Projects/Plugins/Schemas/App-Schema/plugin-file.json index 37dc941cf..aefb2ba77 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-file.json +++ b/Projects/Plugins/Schemas/App-Schema/plugin-file.json @@ -6,7 +6,8 @@ "label": "Configure", "iconPathOn": "configuration", "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", @@ -41,7 +42,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "editors": { diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-learning-engines.json b/Projects/Plugins/Schemas/App-Schema/plugin-learning-engines.json similarity index 91% rename from Projects/Foundations/Schemas/App-Schema/plugin-learning-engines.json rename to Projects/Plugins/Schemas/App-Schema/plugin-learning-engines.json index 989fdfef0..e436c13f6 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-learning-engines.json +++ b/Projects/Plugins/Schemas/App-Schema/plugin-learning-engines.json @@ -17,7 +17,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-learning-mines.json b/Projects/Plugins/Schemas/App-Schema/plugin-learning-mines.json similarity index 91% rename from Projects/Foundations/Schemas/App-Schema/plugin-learning-mines.json rename to Projects/Plugins/Schemas/App-Schema/plugin-learning-mines.json index 25c3a4891..1fbe71833 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-learning-mines.json +++ b/Projects/Plugins/Schemas/App-Schema/plugin-learning-mines.json @@ -17,7 +17,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-learning-systems.json b/Projects/Plugins/Schemas/App-Schema/plugin-learning-systems.json similarity index 91% rename from Projects/Foundations/Schemas/App-Schema/plugin-learning-systems.json rename to Projects/Plugins/Schemas/App-Schema/plugin-learning-systems.json index 362412ab8..e73b6cd87 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-learning-systems.json +++ b/Projects/Plugins/Schemas/App-Schema/plugin-learning-systems.json @@ -17,7 +17,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-project.json b/Projects/Plugins/Schemas/App-Schema/plugin-project.json similarity index 95% rename from Projects/Foundations/Schemas/App-Schema/plugin-project.json rename to Projects/Plugins/Schemas/App-Schema/plugin-project.json index e4aa17c5b..b4f39f5c6 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-project.json +++ b/Projects/Plugins/Schemas/App-Schema/plugin-project.json @@ -6,7 +6,8 @@ "actionFunction": "uiObject.configEditor.activate", "label": "Configure", "iconPathOn": "configuration", - "iconPathOff": "configuration" + "iconPathOff": "configuration", + "actionProject": "Foundations" }, { "action": "Add Missing Plugin Types", @@ -21,7 +22,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "initialValues": { diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-trading-engines.json b/Projects/Plugins/Schemas/App-Schema/plugin-trading-engines.json similarity index 91% rename from Projects/Foundations/Schemas/App-Schema/plugin-trading-engines.json rename to Projects/Plugins/Schemas/App-Schema/plugin-trading-engines.json index d8814713c..5fdfd8ba8 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-trading-engines.json +++ b/Projects/Plugins/Schemas/App-Schema/plugin-trading-engines.json @@ -17,7 +17,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-trading-mines.json b/Projects/Plugins/Schemas/App-Schema/plugin-trading-mines.json similarity index 91% rename from Projects/Foundations/Schemas/App-Schema/plugin-trading-mines.json rename to Projects/Plugins/Schemas/App-Schema/plugin-trading-mines.json index 882c3a935..1cc96e5bf 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-trading-mines.json +++ b/Projects/Plugins/Schemas/App-Schema/plugin-trading-mines.json @@ -17,7 +17,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-trading-systems.json b/Projects/Plugins/Schemas/App-Schema/plugin-trading-systems.json similarity index 91% rename from Projects/Foundations/Schemas/App-Schema/plugin-trading-systems.json rename to Projects/Plugins/Schemas/App-Schema/plugin-trading-systems.json index 45a3c1f9c..b7b7489cc 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-trading-systems.json +++ b/Projects/Plugins/Schemas/App-Schema/plugin-trading-systems.json @@ -17,7 +17,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-tutorials.json b/Projects/Plugins/Schemas/App-Schema/plugin-tutorials.json similarity index 91% rename from Projects/Foundations/Schemas/App-Schema/plugin-tutorials.json rename to Projects/Plugins/Schemas/App-Schema/plugin-tutorials.json index ba844f57f..f2338a322 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-tutorials.json +++ b/Projects/Plugins/Schemas/App-Schema/plugin-tutorials.json @@ -18,7 +18,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Plugins/Schemas/App-Schema/plugins-project.json b/Projects/Plugins/Schemas/App-Schema/plugins-project.json new file mode 100644 index 000000000..45226535f --- /dev/null +++ b/Projects/Plugins/Schemas/App-Schema/plugins-project.json @@ -0,0 +1,45 @@ +{ + "type": "Plugins Project", + "menuItems": [ + { + "action": "Add Missing Children", + "label": "Add Missing Children", + "relatedUiObject": "Foundations Project", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Add UI Object", + "label": "Add Plugins", + "relatedUiObject": "Plugins", + "relatedUiObjectProject": "Plugins", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Delete UI Object", + "askConfirmation": true, + "confirmationLabel": "Confirm to Delete", + "actionFunction": "payload.executeAction", + "label": "Delete", + "iconPathOn": "delete-entity", + "iconPathOff": "delete-entity", + "actionProject": "Foundations" + } + ], + "isProjectHead": true, + "isTitleAllwaysVisible": false, + "addLeftIcons": true, + "isPinned": true, + "positionLocked": true, + "icon": "plugins-project", + "childrenNodesProperties": [ + { + "name": "projectDefinition", + "type": "node", + "childType": "Project Definition", + "project": "Foundations", + "autoAdd": true + } + ] +} \ No newline at end of file diff --git a/Projects/Foundations/Schemas/App-Schema/plugins.json b/Projects/Plugins/Schemas/App-Schema/plugins.json similarity index 91% rename from Projects/Foundations/Schemas/App-Schema/plugins.json rename to Projects/Plugins/Schemas/App-Schema/plugins.json index 3858fa98d..8f68f4ba4 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugins.json +++ b/Projects/Plugins/Schemas/App-Schema/plugins.json @@ -17,7 +17,8 @@ "actionFunction": "payload.executeAction", "label": "Delete", "iconPathOn": "delete-entity", - "iconPathOff": "delete-entity" + "iconPathOff": "delete-entity", + "actionProject": "Foundations" } ], "isHierarchyHead": true, diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-API-Maps/plugin-api-maps.json b/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-API-Maps/plugin-api-maps.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-API-Maps/plugin-api-maps.json rename to Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-API-Maps/plugin-api-maps.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Data-Mines/plugin-data-mines.json b/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Data-Mines/plugin-data-mines.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Data-Mines/plugin-data-mines.json rename to Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Data-Mines/plugin-data-mines.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-File-Position/plugin-file-position.json b/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File-Position/plugin-file-position.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-File-Position/plugin-file-position.json rename to Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File-Position/plugin-file-position.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-File/plugin-file.json b/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File/plugin-file.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-File/plugin-file.json rename to Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File/plugin-file.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Project/plugin-project.json b/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Project/plugin-project.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Project/plugin-project.json rename to Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Project/plugin-project.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Super-Scripts/plugin-super-scripts.json b/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Super-Scripts/plugin-super-scripts.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Super-Scripts/plugin-super-scripts.json rename to Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Super-Scripts/plugin-super-scripts.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Engines/plugin-trading-engines.json b/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Engines/plugin-trading-engines.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Engines/plugin-trading-engines.json rename to Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Engines/plugin-trading-engines.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Mines/plugin-trading-mines.json b/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Mines/plugin-trading-mines.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Mines/plugin-trading-mines.json rename to Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Mines/plugin-trading-mines.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Systems/plugin-trading-systems.json b/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Systems/plugin-trading-systems.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Systems/plugin-trading-systems.json rename to Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Systems/plugin-trading-systems.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Tutorials/plugin-tutorials.json b/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Tutorials/plugin-tutorials.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Tutorials/plugin-tutorials.json rename to Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Tutorials/plugin-tutorials.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugins/Plugins/plugins.json b/Projects/Plugins/Schemas/Docs-Nodes/P/Plugins/plugins.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugins/Plugins/plugins.json rename to Projects/Plugins/Schemas/Docs-Nodes/P/Plugins/plugins.json diff --git a/Projects/Plugins/UI/Function-Libraries/ActionSwitch.js b/Projects/Plugins/UI/Function-Libraries/ActionSwitch.js new file mode 100644 index 000000000..9698faf65 --- /dev/null +++ b/Projects/Plugins/UI/Function-Libraries/ActionSwitch.js @@ -0,0 +1,98 @@ +function newPluginsActionSwitch() { + + let thisObject = { + executeAction: executeAction, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function finalize() { + + } + + function initialize() { + /* Nothing to initialize since a Function Library does not hold any state. */ + } + + async function executeAction(action) { + switch (action.name) { + case 'Install as Plugin': + { + UI.projects.plugins.functionLibraries.pluginsFunctions.installAsPlugin(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Projects': + { + UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginProjects(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Types': + { + UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginTypes(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Data Mines': + { + UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginDataMines(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Trading Mines': + { + UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginTradingMines(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Trading Systems': + { + UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginTradingSystems(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Trading Engines': + { + UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginTradingEngines(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Learning Mines': + { + UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginLearningMines(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Learning Systems': + { + UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginLearningSystems(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Learning Engines': + { + UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginLearningEngines(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Tutorials': + { + UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginTutorials(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin API Maps': + { + UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginApiMaps(action.node, action.rootNodes) + } + break + case 'Enable Saving With Workspace': + { + UI.projects.plugins.functionLibraries.pluginsFunctions.enableSavingWithWorkspace(action.node, action.rootNodes) + } + break + case 'Disable Saving With Workspace': + { + UI.projects.plugins.functionLibraries.pluginsFunctions.disableSavingWithWorkspace(action.node, action.rootNodes) + } + break + case 'Save Plugin': + { + UI.projects.plugins.functionLibraries.pluginsFunctions.savePlugin(action.node, action.rootNodes) + } + break + } + } +} diff --git a/Projects/Foundations/UI/Function-Libraries/PluginsFunctions.js b/Projects/Plugins/UI/Function-Libraries/PluginsFunctions.js similarity index 68% rename from Projects/Foundations/UI/Function-Libraries/PluginsFunctions.js rename to Projects/Plugins/UI/Function-Libraries/PluginsFunctions.js index 7e4db38a0..fcd4f38ab 100644 --- a/Projects/Foundations/UI/Function-Libraries/PluginsFunctions.js +++ b/Projects/Plugins/UI/Function-Libraries/PluginsFunctions.js @@ -1,4 +1,4 @@ -function newFoundationsFunctionLibraryPluginsFunctions() { +function newPluginsFunctionLibraryPluginsFunctions() { let thisObject = { addMissingPluginProjects: addMissingPluginProjects, addMissingPluginTypes: addMissingPluginTypes, @@ -43,14 +43,14 @@ function newFoundationsFunctionLibraryPluginsFunctions() { let pluginType = "Plugin" + " " + projectDefinition.plugins[i] if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenByType(node, pluginType) === true) { - UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, pluginType, undefined, project) + UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, pluginType, undefined, 'Plugins') } } } } function addMissingPluginDataMines(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -58,15 +58,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Data-Mines', onNamesArrived) + UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Data-Mines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Data-Mines', 'Data Mine') + UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Data-Mines', 'Data Mine', 'Data-Mining') } } function addMissingPluginTradingMines(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -74,15 +74,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Trading-Mines', onNamesArrived) + UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Trading-Mines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Mines', 'Trading Mine') + UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Mines', 'Trading Mine', 'Foundations') } } function addMissingPluginTradingSystems(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -90,15 +90,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Trading-Systems', onNamesArrived) + UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Trading-Systems', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Systems', 'Trading System') + UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Systems', 'Trading System', 'Foundations') } } function addMissingPluginTradingEngines(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -106,15 +106,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Trading-Engines', onNamesArrived) + UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Trading-Engines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Engines', 'Trading Engine') + UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Engines', 'Trading Engine', 'Foundations') } } function addMissingPluginLearningMines(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -122,15 +122,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Learning-Mines', onNamesArrived) + UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Learning-Mines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Mines', 'Learning Mine') + UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Mines', 'Learning Mine', 'Foundations') } } function addMissingPluginLearningSystems(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -138,15 +138,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Learning-Systems', onNamesArrived) + UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Learning-Systems', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Systems', 'Learning System') + UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Systems', 'Learning System', 'Foundations') } } function addMissingPluginLearningEngines(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -154,15 +154,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Learning-Engines', onNamesArrived) + UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Learning-Engines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Engines', 'Learning Engine') + UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Engines', 'Learning Engine', 'Foundations') } } function addMissingPluginTutorials(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -170,15 +170,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Tutorials', onNamesArrived) + UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Tutorials', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Tutorials', 'Tutorial') + UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Tutorials', 'Tutorial', 'Education') } } function addMissingPluginApiMaps(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -186,10 +186,10 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'API-Maps', onNamesArrived) + UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'API-Maps', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'API-Maps', 'API Map') + UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'API-Maps', 'API Map', 'Foundations') } } @@ -204,16 +204,16 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } function savePlugin(node, rootNodes) { - UI.projects.foundations.utilities.plugins.savePluginFile(node) + UI.projects.plugins.utilities.plugins.savePluginFile(node) } function installAsPlugin(node, rootNodes) { let plugins = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadByNodeType('Plugins') let pluginProject = UI.projects.foundations.utilities.nodeChildren.findChildByCodeName(plugins, node.project) - let pluginFolderName = UI.projects.foundations.utilities.plugins.getPluginFolderNamesByNodeType(node.type) + let pluginFolderName = UI.projects.plugins.utilities.plugins.getPluginFolderNamesByNodeType(node.type) let pluginForlderNodeType = 'Plugin ' + pluginFolderName.replaceAll('-', ' ') let pluginFolderNode = UI.projects.foundations.utilities.nodeChildren.findChildByType(pluginProject, pluginForlderNodeType) - let pluginFile = UI.projects.foundations.utilities.plugins.addMissingPluginFile(pluginFolderNode, node.name, pluginFolderName, node.type, true) + let pluginFile = UI.projects.plugins.utilities.plugins.addMissingPluginFile(pluginFolderNode, node.name, pluginFolderName, node.type, node.project, true) node.isPlugin = true if (pluginFile === undefined) { @@ -221,6 +221,6 @@ function newFoundationsFunctionLibraryPluginsFunctions() { return } - UI.projects.foundations.utilities.plugins.savePluginFile(pluginFile) + UI.projects.plugins.utilities.plugins.savePluginFile(pluginFile) } } diff --git a/Projects/Foundations/UI/Utilities/Plugins.js b/Projects/Plugins/UI/Utilities/Plugins.js similarity index 97% rename from Projects/Foundations/UI/Utilities/Plugins.js rename to Projects/Plugins/UI/Utilities/Plugins.js index 70fb48ac1..e4242dc68 100644 --- a/Projects/Foundations/UI/Utilities/Plugins.js +++ b/Projects/Plugins/UI/Utilities/Plugins.js @@ -1,4 +1,4 @@ -function newFoundationsUtilitiesPlugins() { +function newPluginsUtilitiesPlugins() { let thisObject = { getPluginFileNames: getPluginFileNames, getPluginFolderNamesByNodeType: getPluginFolderNamesByNodeType, @@ -24,20 +24,20 @@ function newFoundationsUtilitiesPlugins() { } } - function addMissingPluginFiles(node, fileNames, pluginFolder, nodeType) { + function addMissingPluginFiles(node, fileNames, pluginFolder, nodeType, project) { for (let i = 0; i < fileNames.length; i++) { let fileName = fileNames[i] fileName = fileName.replace('.json', '') - addMissingPluginFile(node, fileName, pluginFolder, nodeType, false) + addMissingPluginFile(node, fileName, pluginFolder, nodeType, project, false) } } - function addMissingPluginFile(node, fileName, pluginFolder, nodeType, saveWithWorkspace) { + function addMissingPluginFile(node, fileName, pluginFolder, nodeType, project, saveWithWorkspace) { if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenByName(node, fileName) === true) { - let child = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Plugin File', undefined, 'Foundations') + let child = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Plugin File', undefined, 'Plugins') child.name = fileName child.config = JSON.stringify({ - project: node.project, + project: project, fileName: fileName, folderName: pluginFolder, nodeType: nodeType, diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index 9982a1af8..fe6d9310c 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -96,11 +96,6 @@ "propertyName": "chartingSpaceFunctions", "functionName": "newFoundationsFunctionLibraryChartingSpaceFunctions" }, - { - "name": "Plugins Functions", - "propertyName": "pluginsFunctions", - "functionName": "newFoundationsFunctionLibraryPluginsFunctions" - }, { "name": "Workspace Functions", "propertyName": "workspaceFunctions", @@ -202,11 +197,6 @@ "name": "Status Bar", "propertyName": "statusBar", "functionName": "newFoundationsUtilitiesStatusBar" - }, - { - "name": "Plugins", - "propertyName": "plugins", - "functionName": "newFoundationsUtilitiesPlugins" } ], "spaces": [ @@ -764,7 +754,7 @@ ] }, "SA": { - "globals":[ + "globals": [ { "name": "Time Constants", "propertyName": "timeConstants", @@ -773,12 +763,6 @@ } ], "utilities": [ - { - "name": "Plugins", - "propertyName": "plugins", - "functionName": "newFoundationsUtilitiesPlugins", - "fileName": "Plugins.js" - }, { "name": "Miscellaneous Functions", "propertyName": "miscellaneousFunctions", @@ -806,7 +790,6 @@ ] }, "plugins": [ - "Data Mines", "Trading Mines", "Learning Mines", "Trading Systems", @@ -830,7 +813,7 @@ ] }, "TS": { - "botModules":[ + "botModules": [ { "name": "Single Market Sensor Bot", "propertyName": "singleMarketSensorBot", @@ -940,7 +923,41 @@ "folderName": "Sensor-Bot/Webhooks" } ] - } + }, + "plugins": [ + "Data Mines" + ] + }, + { + "name": "Plugins", + "propertyName": "plugins", + "UI": { + "functionLibraries": [ + { + "name": "Plugins Functions", + "propertyName": "pluginsFunctions", + "functionName": "newPluginsFunctionLibraryPluginsFunctions" + } + ], + "utilities": [ + { + "name": "Plugins", + "propertyName": "plugins", + "functionName": "newPluginsUtilitiesPlugins" + } + ] + }, + "SA": { + "utilities": [ + { + "name": "Plugins", + "propertyName": "plugins", + "functionName": "newPluginsUtilitiesPlugins", + "fileName": "Plugins.js" + } + ] + }, + "plugins": [] }, { "name": "Ethereum", @@ -1358,7 +1375,7 @@ "propertyName": "queriesUnfollowedUserProfiles", "functionName": "newSocialTradingModulesQueriesUnfollowedUserProfiles", "fileName": "Queries/UnfollowedUserProfiles.js" - }, + }, { "name": "Bot Profile Stats", "propertyName": "queriesBotProfileStats", @@ -1523,8 +1540,8 @@ ], "utilities": [] }, - "UI":{ - "modules":[ + "UI": { + "modules": [ { "name": "Web Sockets Client", "propertyName": "webSocketsClient", diff --git a/Projects/Social-Trading/NT/Modules/Bootstrap.js b/Projects/Social-Trading/NT/Modules/Bootstrap.js index f46a016b7..2ff290e35 100644 --- a/Projects/Social-Trading/NT/Modules/Bootstrap.js +++ b/Projects/Social-Trading/NT/Modules/Bootstrap.js @@ -18,7 +18,7 @@ exports.newBootstrap = function newBootstrap() { async function initialize() { - let pluginFileNames = await SA.projects.foundations.utilities.plugins.getPluginFileNames( + let pluginFileNames = await SA.projects.plugins.utilities.plugins.getPluginFileNames( 'Governance', 'User-Profiles' ) @@ -26,7 +26,7 @@ exports.newBootstrap = function newBootstrap() { for (let i = 0; i < pluginFileNames.length; i++) { let pluginFileName = pluginFileNames[i] - let pluginFileContent = await SA.projects.foundations.utilities.plugins.getPluginFileContent( + let pluginFileContent = await SA.projects.plugins.utilities.plugins.getPluginFileContent( 'Governance', 'User-Profiles', pluginFileName From 3b90597478b004552abf1c3212468829386a8de9 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 26 Sep 2021 15:31:59 +0200 Subject: [PATCH 10/82] Community Plugins Refactoring --- Platform/Client/githubServer.js | 8 +- Platform/Client/httpInterface.js | 4 +- .../Icons/plugin-api-maps.png | Bin .../Icons/plugin-data-mines.png | Bin .../Icons/plugin-file-position.png | Bin .../Icons/plugin-file.png | Bin .../Icons/plugin-learning-engines.png | Bin .../Icons/plugin-learning-mines.png | Bin .../Icons/plugin-learning-systems.png | Bin .../Icons/plugin-project.png | Bin .../Icons/plugin-super-scripts.png | Bin .../Icons/plugin-trading-engines.png | Bin .../Icons/plugin-trading-mines.png | Bin .../Icons/plugin-trading-systems.png | Bin .../Icons/plugin-tutorials.png | Bin .../Icons/plugins-project.png | Bin .../Icons/plugins.png | Bin .../SA/Utilities/Plugins.js | 0 .../Schemas/App-Schema/plugin-api-maps.json | 0 .../Schemas/App-Schema/plugin-data-mines.json | 0 .../App-Schema/plugin-file-position.json | 0 .../Schemas/App-Schema/plugin-file.json | 0 .../App-Schema/plugin-learning-engines.json | 0 .../App-Schema/plugin-learning-mines.json | 0 .../App-Schema/plugin-learning-systems.json | 0 .../Schemas/App-Schema/plugin-project.json | 0 .../App-Schema/plugin-trading-engines.json | 0 .../App-Schema/plugin-trading-mines.json | 0 .../App-Schema/plugin-trading-systems.json | 0 .../Schemas/App-Schema/plugin-tutorials.json | 0 .../Schemas/App-Schema/plugins-project.json | 2 +- .../Schemas/App-Schema/plugins.json | 0 .../Plugin-API-Maps/plugin-api-maps.json | 0 .../Plugin-Data-Mines/plugin-data-mines.json | 0 .../plugin-file-position.json | 0 .../P/Plugin/Plugin-File/plugin-file.json | 0 .../Plugin/Plugin-Project/plugin-project.json | 0 .../plugin-super-scripts.json | 0 .../plugin-trading-engines.json | 0 .../plugin-trading-mines.json | 0 .../plugin-trading-systems.json | 0 .../Plugin-Tutorials/plugin-tutorials.json | 0 .../Schemas/Docs-Nodes/P/Plugins/plugins.json | 0 .../UI/Function-Libraries/ActionSwitch.js | 98 ++++++++++++++++++ .../UI/Function-Libraries/PluginsFunctions.js | 64 ++++++------ .../UI/Utilities/Plugins.js | 2 +- .../Function-Libraries/UiObjectsFromNodes.js | 2 +- .../UI/Spaces/Design-Space/Workspace.js | 10 +- .../UI/Function-Libraries/PluginsFunctions.js | 30 +++--- .../UI/Function-Libraries/ActionSwitch.js | 98 ------------------ Projects/ProjectsSchema.json | 4 +- .../Social-Trading/NT/Modules/Bootstrap.js | 4 +- 52 files changed, 165 insertions(+), 161 deletions(-) rename Projects/{Plugins => Community-Plugins}/Icons/plugin-api-maps.png (100%) rename Projects/{Plugins => Community-Plugins}/Icons/plugin-data-mines.png (100%) rename Projects/{Plugins => Community-Plugins}/Icons/plugin-file-position.png (100%) rename Projects/{Plugins => Community-Plugins}/Icons/plugin-file.png (100%) rename Projects/{Plugins => Community-Plugins}/Icons/plugin-learning-engines.png (100%) rename Projects/{Plugins => Community-Plugins}/Icons/plugin-learning-mines.png (100%) rename Projects/{Plugins => Community-Plugins}/Icons/plugin-learning-systems.png (100%) rename Projects/{Plugins => Community-Plugins}/Icons/plugin-project.png (100%) rename Projects/{Plugins => Community-Plugins}/Icons/plugin-super-scripts.png (100%) rename Projects/{Plugins => Community-Plugins}/Icons/plugin-trading-engines.png (100%) rename Projects/{Plugins => Community-Plugins}/Icons/plugin-trading-mines.png (100%) rename Projects/{Plugins => Community-Plugins}/Icons/plugin-trading-systems.png (100%) rename Projects/{Plugins => Community-Plugins}/Icons/plugin-tutorials.png (100%) rename Projects/{Plugins => Community-Plugins}/Icons/plugins-project.png (100%) rename Projects/{Plugins => Community-Plugins}/Icons/plugins.png (100%) rename Projects/{Plugins => Community-Plugins}/SA/Utilities/Plugins.js (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/App-Schema/plugin-api-maps.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/App-Schema/plugin-data-mines.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/App-Schema/plugin-file-position.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/App-Schema/plugin-file.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/App-Schema/plugin-learning-engines.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/App-Schema/plugin-learning-mines.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/App-Schema/plugin-learning-systems.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/App-Schema/plugin-project.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/App-Schema/plugin-trading-engines.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/App-Schema/plugin-trading-mines.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/App-Schema/plugin-trading-systems.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/App-Schema/plugin-tutorials.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/App-Schema/plugins-project.json (95%) rename Projects/{Plugins => Community-Plugins}/Schemas/App-Schema/plugins.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-API-Maps/plugin-api-maps.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-Data-Mines/plugin-data-mines.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-File-Position/plugin-file-position.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-File/plugin-file.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-Project/plugin-project.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-Super-Scripts/plugin-super-scripts.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Engines/plugin-trading-engines.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Mines/plugin-trading-mines.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Systems/plugin-trading-systems.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/Docs-Nodes/P/Plugin/Plugin-Tutorials/plugin-tutorials.json (100%) rename Projects/{Plugins => Community-Plugins}/Schemas/Docs-Nodes/P/Plugins/plugins.json (100%) create mode 100644 Projects/Community-Plugins/UI/Function-Libraries/ActionSwitch.js rename Projects/{Plugins => Community-Plugins}/UI/Function-Libraries/PluginsFunctions.js (66%) rename Projects/{Plugins => Community-Plugins}/UI/Utilities/Plugins.js (99%) delete mode 100644 Projects/Plugins/UI/Function-Libraries/ActionSwitch.js diff --git a/Platform/Client/githubServer.js b/Platform/Client/githubServer.js index 2a779b259..a91e86dc6 100644 --- a/Platform/Client/githubServer.js +++ b/Platform/Client/githubServer.js @@ -508,14 +508,14 @@ exports.newGithubServer = function newGithubServer() { unless the existing one belongs to the same Github username. */ let userProfileIdMap = new Map() - let pluginFileNames = await SA.projects.plugins.utilities.plugins.getPluginFileNames( + let pluginFileNames = await SA.projects.communityPlugins.utilities.plugins.getPluginFileNames( 'Governance', 'User-Profiles' ) for (let i = 0; i < pluginFileNames.length; i++) { let pluginFileName = pluginFileNames[i] - let pluginFileContent = await SA.projects.plugins.utilities.plugins.getPluginFileContent( + let pluginFileContent = await SA.projects.communityPlugins.utilities.plugins.getPluginFileContent( 'Governance', 'User-Profiles', pluginFileName @@ -558,13 +558,13 @@ exports.newGithubServer = function newGithubServer() { unless the existing one belongs to the same Github username. */ let userProfileIdMap = new Map() - let pluginFileNames = await SA.projects.plugins.utilities.plugins.getPluginFileNames( + let pluginFileNames = await SA.projects.communityPlugins.utilities.plugins.getPluginFileNames( 'Governance', 'User-Profiles' ) for (let i = 0; i < pluginFileNames.length; i++) { let pluginFileName = pluginFileNames[i] - let pluginFileContent = await SA.projects.plugins.utilities.plugins.getPluginFileContent( + let pluginFileContent = await SA.projects.communityPlugins.utilities.plugins.getPluginFileContent( 'Governance', 'User-Profiles', pluginFileName diff --git a/Platform/Client/httpInterface.js b/Platform/Client/httpInterface.js index 37e7234bd..65ca9de37 100644 --- a/Platform/Client/httpInterface.js +++ b/Platform/Client/httpInterface.js @@ -1383,7 +1383,7 @@ exports.newHttpInterface = function newHttpInterface() { let project = unescape(requestPath[2]) let folder = unescape(requestPath[3]) - let response = await SA.projects.plugins.utilities.plugins.getPluginFileNames( + let response = await SA.projects.communityPlugins.utilities.plugins.getPluginFileNames( project, folder ).catch(err => { @@ -1422,7 +1422,7 @@ exports.newHttpInterface = function newHttpInterface() { fileName = 'Superalgos-PL.json' } - await SA.projects.plugins.utilities.plugins.getPluginFileContent( + await SA.projects.communityPlugins.utilities.plugins.getPluginFileContent( project, folder, fileName diff --git a/Projects/Plugins/Icons/plugin-api-maps.png b/Projects/Community-Plugins/Icons/plugin-api-maps.png similarity index 100% rename from Projects/Plugins/Icons/plugin-api-maps.png rename to Projects/Community-Plugins/Icons/plugin-api-maps.png diff --git a/Projects/Plugins/Icons/plugin-data-mines.png b/Projects/Community-Plugins/Icons/plugin-data-mines.png similarity index 100% rename from Projects/Plugins/Icons/plugin-data-mines.png rename to Projects/Community-Plugins/Icons/plugin-data-mines.png diff --git a/Projects/Plugins/Icons/plugin-file-position.png b/Projects/Community-Plugins/Icons/plugin-file-position.png similarity index 100% rename from Projects/Plugins/Icons/plugin-file-position.png rename to Projects/Community-Plugins/Icons/plugin-file-position.png diff --git a/Projects/Plugins/Icons/plugin-file.png b/Projects/Community-Plugins/Icons/plugin-file.png similarity index 100% rename from Projects/Plugins/Icons/plugin-file.png rename to Projects/Community-Plugins/Icons/plugin-file.png diff --git a/Projects/Plugins/Icons/plugin-learning-engines.png b/Projects/Community-Plugins/Icons/plugin-learning-engines.png similarity index 100% rename from Projects/Plugins/Icons/plugin-learning-engines.png rename to Projects/Community-Plugins/Icons/plugin-learning-engines.png diff --git a/Projects/Plugins/Icons/plugin-learning-mines.png b/Projects/Community-Plugins/Icons/plugin-learning-mines.png similarity index 100% rename from Projects/Plugins/Icons/plugin-learning-mines.png rename to Projects/Community-Plugins/Icons/plugin-learning-mines.png diff --git a/Projects/Plugins/Icons/plugin-learning-systems.png b/Projects/Community-Plugins/Icons/plugin-learning-systems.png similarity index 100% rename from Projects/Plugins/Icons/plugin-learning-systems.png rename to Projects/Community-Plugins/Icons/plugin-learning-systems.png diff --git a/Projects/Plugins/Icons/plugin-project.png b/Projects/Community-Plugins/Icons/plugin-project.png similarity index 100% rename from Projects/Plugins/Icons/plugin-project.png rename to Projects/Community-Plugins/Icons/plugin-project.png diff --git a/Projects/Plugins/Icons/plugin-super-scripts.png b/Projects/Community-Plugins/Icons/plugin-super-scripts.png similarity index 100% rename from Projects/Plugins/Icons/plugin-super-scripts.png rename to Projects/Community-Plugins/Icons/plugin-super-scripts.png diff --git a/Projects/Plugins/Icons/plugin-trading-engines.png b/Projects/Community-Plugins/Icons/plugin-trading-engines.png similarity index 100% rename from Projects/Plugins/Icons/plugin-trading-engines.png rename to Projects/Community-Plugins/Icons/plugin-trading-engines.png diff --git a/Projects/Plugins/Icons/plugin-trading-mines.png b/Projects/Community-Plugins/Icons/plugin-trading-mines.png similarity index 100% rename from Projects/Plugins/Icons/plugin-trading-mines.png rename to Projects/Community-Plugins/Icons/plugin-trading-mines.png diff --git a/Projects/Plugins/Icons/plugin-trading-systems.png b/Projects/Community-Plugins/Icons/plugin-trading-systems.png similarity index 100% rename from Projects/Plugins/Icons/plugin-trading-systems.png rename to Projects/Community-Plugins/Icons/plugin-trading-systems.png diff --git a/Projects/Plugins/Icons/plugin-tutorials.png b/Projects/Community-Plugins/Icons/plugin-tutorials.png similarity index 100% rename from Projects/Plugins/Icons/plugin-tutorials.png rename to Projects/Community-Plugins/Icons/plugin-tutorials.png diff --git a/Projects/Plugins/Icons/plugins-project.png b/Projects/Community-Plugins/Icons/plugins-project.png similarity index 100% rename from Projects/Plugins/Icons/plugins-project.png rename to Projects/Community-Plugins/Icons/plugins-project.png diff --git a/Projects/Plugins/Icons/plugins.png b/Projects/Community-Plugins/Icons/plugins.png similarity index 100% rename from Projects/Plugins/Icons/plugins.png rename to Projects/Community-Plugins/Icons/plugins.png diff --git a/Projects/Plugins/SA/Utilities/Plugins.js b/Projects/Community-Plugins/SA/Utilities/Plugins.js similarity index 100% rename from Projects/Plugins/SA/Utilities/Plugins.js rename to Projects/Community-Plugins/SA/Utilities/Plugins.js diff --git a/Projects/Plugins/Schemas/App-Schema/plugin-api-maps.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-api-maps.json similarity index 100% rename from Projects/Plugins/Schemas/App-Schema/plugin-api-maps.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-api-maps.json diff --git a/Projects/Plugins/Schemas/App-Schema/plugin-data-mines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-data-mines.json similarity index 100% rename from Projects/Plugins/Schemas/App-Schema/plugin-data-mines.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-data-mines.json diff --git a/Projects/Plugins/Schemas/App-Schema/plugin-file-position.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-file-position.json similarity index 100% rename from Projects/Plugins/Schemas/App-Schema/plugin-file-position.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-file-position.json diff --git a/Projects/Plugins/Schemas/App-Schema/plugin-file.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-file.json similarity index 100% rename from Projects/Plugins/Schemas/App-Schema/plugin-file.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-file.json diff --git a/Projects/Plugins/Schemas/App-Schema/plugin-learning-engines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-engines.json similarity index 100% rename from Projects/Plugins/Schemas/App-Schema/plugin-learning-engines.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-engines.json diff --git a/Projects/Plugins/Schemas/App-Schema/plugin-learning-mines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-mines.json similarity index 100% rename from Projects/Plugins/Schemas/App-Schema/plugin-learning-mines.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-mines.json diff --git a/Projects/Plugins/Schemas/App-Schema/plugin-learning-systems.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-systems.json similarity index 100% rename from Projects/Plugins/Schemas/App-Schema/plugin-learning-systems.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-systems.json diff --git a/Projects/Plugins/Schemas/App-Schema/plugin-project.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-project.json similarity index 100% rename from Projects/Plugins/Schemas/App-Schema/plugin-project.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-project.json diff --git a/Projects/Plugins/Schemas/App-Schema/plugin-trading-engines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-engines.json similarity index 100% rename from Projects/Plugins/Schemas/App-Schema/plugin-trading-engines.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-engines.json diff --git a/Projects/Plugins/Schemas/App-Schema/plugin-trading-mines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-mines.json similarity index 100% rename from Projects/Plugins/Schemas/App-Schema/plugin-trading-mines.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-mines.json diff --git a/Projects/Plugins/Schemas/App-Schema/plugin-trading-systems.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-systems.json similarity index 100% rename from Projects/Plugins/Schemas/App-Schema/plugin-trading-systems.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-systems.json diff --git a/Projects/Plugins/Schemas/App-Schema/plugin-tutorials.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-tutorials.json similarity index 100% rename from Projects/Plugins/Schemas/App-Schema/plugin-tutorials.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-tutorials.json diff --git a/Projects/Plugins/Schemas/App-Schema/plugins-project.json b/Projects/Community-Plugins/Schemas/App-Schema/plugins-project.json similarity index 95% rename from Projects/Plugins/Schemas/App-Schema/plugins-project.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugins-project.json index 45226535f..f172a7eca 100644 --- a/Projects/Plugins/Schemas/App-Schema/plugins-project.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugins-project.json @@ -12,7 +12,7 @@ "action": "Add UI Object", "label": "Add Plugins", "relatedUiObject": "Plugins", - "relatedUiObjectProject": "Plugins", + "relatedUiObjectProject": "Community-Plugins", "actionFunction": "payload.executeAction", "actionProject": "Foundations" }, diff --git a/Projects/Plugins/Schemas/App-Schema/plugins.json b/Projects/Community-Plugins/Schemas/App-Schema/plugins.json similarity index 100% rename from Projects/Plugins/Schemas/App-Schema/plugins.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugins.json diff --git a/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-API-Maps/plugin-api-maps.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-API-Maps/plugin-api-maps.json similarity index 100% rename from Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-API-Maps/plugin-api-maps.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-API-Maps/plugin-api-maps.json diff --git a/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Data-Mines/plugin-data-mines.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Data-Mines/plugin-data-mines.json similarity index 100% rename from Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Data-Mines/plugin-data-mines.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Data-Mines/plugin-data-mines.json diff --git a/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File-Position/plugin-file-position.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File-Position/plugin-file-position.json similarity index 100% rename from Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File-Position/plugin-file-position.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File-Position/plugin-file-position.json diff --git a/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File/plugin-file.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File/plugin-file.json similarity index 100% rename from Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File/plugin-file.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File/plugin-file.json diff --git a/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Project/plugin-project.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Project/plugin-project.json similarity index 100% rename from Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Project/plugin-project.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Project/plugin-project.json diff --git a/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Super-Scripts/plugin-super-scripts.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Super-Scripts/plugin-super-scripts.json similarity index 100% rename from Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Super-Scripts/plugin-super-scripts.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Super-Scripts/plugin-super-scripts.json diff --git a/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Engines/plugin-trading-engines.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Engines/plugin-trading-engines.json similarity index 100% rename from Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Engines/plugin-trading-engines.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Engines/plugin-trading-engines.json diff --git a/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Mines/plugin-trading-mines.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Mines/plugin-trading-mines.json similarity index 100% rename from Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Mines/plugin-trading-mines.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Mines/plugin-trading-mines.json diff --git a/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Systems/plugin-trading-systems.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Systems/plugin-trading-systems.json similarity index 100% rename from Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Systems/plugin-trading-systems.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Systems/plugin-trading-systems.json diff --git a/Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Tutorials/plugin-tutorials.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Tutorials/plugin-tutorials.json similarity index 100% rename from Projects/Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Tutorials/plugin-tutorials.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Tutorials/plugin-tutorials.json diff --git a/Projects/Plugins/Schemas/Docs-Nodes/P/Plugins/plugins.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugins/plugins.json similarity index 100% rename from Projects/Plugins/Schemas/Docs-Nodes/P/Plugins/plugins.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugins/plugins.json diff --git a/Projects/Community-Plugins/UI/Function-Libraries/ActionSwitch.js b/Projects/Community-Plugins/UI/Function-Libraries/ActionSwitch.js new file mode 100644 index 000000000..fd5eaf08b --- /dev/null +++ b/Projects/Community-Plugins/UI/Function-Libraries/ActionSwitch.js @@ -0,0 +1,98 @@ +function newCommunityPluginsActionSwitch() { + + let thisObject = { + executeAction: executeAction, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function finalize() { + + } + + function initialize() { + /* Nothing to initialize since a Function Library does not hold any state. */ + } + + async function executeAction(action) { + switch (action.name) { + case 'Install as Plugin': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.installAsPlugin(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Projects': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginProjects(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Types': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginTypes(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Data Mines': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginDataMines(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Trading Mines': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginTradingMines(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Trading Systems': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginTradingSystems(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Trading Engines': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginTradingEngines(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Learning Mines': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginLearningMines(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Learning Systems': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginLearningSystems(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Learning Engines': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginLearningEngines(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Tutorials': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginTutorials(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin API Maps': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginApiMaps(action.node, action.rootNodes) + } + break + case 'Enable Saving With Workspace': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.enableSavingWithWorkspace(action.node, action.rootNodes) + } + break + case 'Disable Saving With Workspace': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.disableSavingWithWorkspace(action.node, action.rootNodes) + } + break + case 'Save Plugin': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.savePlugin(action.node, action.rootNodes) + } + break + } + } +} diff --git a/Projects/Plugins/UI/Function-Libraries/PluginsFunctions.js b/Projects/Community-Plugins/UI/Function-Libraries/PluginsFunctions.js similarity index 66% rename from Projects/Plugins/UI/Function-Libraries/PluginsFunctions.js rename to Projects/Community-Plugins/UI/Function-Libraries/PluginsFunctions.js index fcd4f38ab..4fbc21ab0 100644 --- a/Projects/Plugins/UI/Function-Libraries/PluginsFunctions.js +++ b/Projects/Community-Plugins/UI/Function-Libraries/PluginsFunctions.js @@ -43,14 +43,14 @@ function newPluginsFunctionLibraryPluginsFunctions() { let pluginType = "Plugin" + " " + projectDefinition.plugins[i] if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenByType(node, pluginType) === true) { - UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, pluginType, undefined, 'Plugins') + UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, pluginType, undefined, 'Community-Plugins') } } } } function addMissingPluginDataMines(node, rootNodes) { - let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -58,15 +58,15 @@ function newPluginsFunctionLibraryPluginsFunctions() { } } - UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Data-Mines', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Data-Mines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Data-Mines', 'Data Mine', 'Data-Mining') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Data-Mines', 'Data Mine', 'Data-Mining') } } function addMissingPluginTradingMines(node, rootNodes) { - let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -74,15 +74,15 @@ function newPluginsFunctionLibraryPluginsFunctions() { } } - UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Trading-Mines', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Trading-Mines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Mines', 'Trading Mine', 'Foundations') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Mines', 'Trading Mine', 'Foundations') } } function addMissingPluginTradingSystems(node, rootNodes) { - let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -90,15 +90,15 @@ function newPluginsFunctionLibraryPluginsFunctions() { } } - UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Trading-Systems', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Trading-Systems', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Systems', 'Trading System', 'Foundations') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Systems', 'Trading System', 'Foundations') } } function addMissingPluginTradingEngines(node, rootNodes) { - let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -106,15 +106,15 @@ function newPluginsFunctionLibraryPluginsFunctions() { } } - UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Trading-Engines', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Trading-Engines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Engines', 'Trading Engine', 'Foundations') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Engines', 'Trading Engine', 'Foundations') } } function addMissingPluginLearningMines(node, rootNodes) { - let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -122,15 +122,15 @@ function newPluginsFunctionLibraryPluginsFunctions() { } } - UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Learning-Mines', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Learning-Mines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Mines', 'Learning Mine', 'Foundations') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Mines', 'Learning Mine', 'Foundations') } } function addMissingPluginLearningSystems(node, rootNodes) { - let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -138,15 +138,15 @@ function newPluginsFunctionLibraryPluginsFunctions() { } } - UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Learning-Systems', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Learning-Systems', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Systems', 'Learning System', 'Foundations') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Systems', 'Learning System', 'Foundations') } } function addMissingPluginLearningEngines(node, rootNodes) { - let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -154,15 +154,15 @@ function newPluginsFunctionLibraryPluginsFunctions() { } } - UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Learning-Engines', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Learning-Engines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Engines', 'Learning Engine', 'Foundations') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Engines', 'Learning Engine', 'Foundations') } } function addMissingPluginTutorials(node, rootNodes) { - let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -170,15 +170,15 @@ function newPluginsFunctionLibraryPluginsFunctions() { } } - UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Tutorials', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Tutorials', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Tutorials', 'Tutorial', 'Education') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Tutorials', 'Tutorial', 'Education') } } function addMissingPluginApiMaps(node, rootNodes) { - let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -186,10 +186,10 @@ function newPluginsFunctionLibraryPluginsFunctions() { } } - UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'API-Maps', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'API-Maps', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'API-Maps', 'API Map', 'Foundations') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'API-Maps', 'API Map', 'Foundations') } } @@ -204,16 +204,16 @@ function newPluginsFunctionLibraryPluginsFunctions() { } function savePlugin(node, rootNodes) { - UI.projects.plugins.utilities.plugins.savePluginFile(node) + UI.projects.communityPlugins.utilities.plugins.savePluginFile(node) } function installAsPlugin(node, rootNodes) { let plugins = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadByNodeType('Plugins') let pluginProject = UI.projects.foundations.utilities.nodeChildren.findChildByCodeName(plugins, node.project) - let pluginFolderName = UI.projects.plugins.utilities.plugins.getPluginFolderNamesByNodeType(node.type) + let pluginFolderName = UI.projects.communityPlugins.utilities.plugins.getPluginFolderNamesByNodeType(node.type) let pluginForlderNodeType = 'Plugin ' + pluginFolderName.replaceAll('-', ' ') let pluginFolderNode = UI.projects.foundations.utilities.nodeChildren.findChildByType(pluginProject, pluginForlderNodeType) - let pluginFile = UI.projects.plugins.utilities.plugins.addMissingPluginFile(pluginFolderNode, node.name, pluginFolderName, node.type, node.project, true) + let pluginFile = UI.projects.communityPlugins.utilities.plugins.addMissingPluginFile(pluginFolderNode, node.name, pluginFolderName, node.type, node.project, true) node.isPlugin = true if (pluginFile === undefined) { @@ -221,6 +221,6 @@ function newPluginsFunctionLibraryPluginsFunctions() { return } - UI.projects.plugins.utilities.plugins.savePluginFile(pluginFile) + UI.projects.communityPlugins.utilities.plugins.savePluginFile(pluginFile) } } diff --git a/Projects/Plugins/UI/Utilities/Plugins.js b/Projects/Community-Plugins/UI/Utilities/Plugins.js similarity index 99% rename from Projects/Plugins/UI/Utilities/Plugins.js rename to Projects/Community-Plugins/UI/Utilities/Plugins.js index e4242dc68..aeea2de25 100644 --- a/Projects/Plugins/UI/Utilities/Plugins.js +++ b/Projects/Community-Plugins/UI/Utilities/Plugins.js @@ -34,7 +34,7 @@ function newPluginsUtilitiesPlugins() { function addMissingPluginFile(node, fileName, pluginFolder, nodeType, project, saveWithWorkspace) { if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenByName(node, fileName) === true) { - let child = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Plugin File', undefined, 'Plugins') + let child = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Plugin File', undefined, 'Community-Plugins') child.name = fileName child.config = JSON.stringify({ project: project, diff --git a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js index 1ee871873..aafff5ed8 100644 --- a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js +++ b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js @@ -466,7 +466,7 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { node.type === 'Plugin Data Mines' || node.type === 'Plugin API Maps' ) { - node.project = "Plugins" + node.project = "Community-Plugins" } /* diff --git a/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js b/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js index da55b395d..c8ab84b65 100644 --- a/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js +++ b/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js @@ -18,7 +18,7 @@ function newWorkspace() { share: shareWorkspace, getNodesByTypeAndHierarchyHeadsType: getNodesByTypeAndHierarchyHeadsType, getProjectsHeads: getProjectsHeads, - getProjectHeadByNodeType: getProjectHeadByNodeType, + getProjectHeadByNodeType: getProjectHeadByNodeType, getHierarchyHeads: getHierarchyHeads, getHierarchyHeadsById: getHierarchyHeadsById, getHierarchyHeadsByCodeNameAndNodeType: getHierarchyHeadsByCodeNameAndNodeType, @@ -72,7 +72,7 @@ function newWorkspace() { for (let i = 0; i < PROJECTS_SCHEMA.length; i++) { let project = PROJECTS_SCHEMA[i].name try { - let actionSwitch = eval('new' + project + 'ActionSwitch()') + let actionSwitch = eval('new' + project.replaceAll('-', '') + 'ActionSwitch()') actionSwitchesByProject.set(project, actionSwitch) } catch (err) { console.log('[WARN] Action Switch for project ' + project + ' not found.') @@ -255,7 +255,7 @@ function newWorkspace() { let saveWithWorkspace = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(pluginFile.payload, 'saveWithWorkspace') if (saveWithWorkspace === true) { - UI.projects.plugins.utilities.plugins.savePluginFile(pluginFile) + UI.projects.communityPlugins.utilities.plugins.savePluginFile(pluginFile) } } } @@ -706,6 +706,10 @@ function newWorkspace() { action.rootNodes = thisObject.workspaceNode.rootNodes let actionSwitch = actionSwitchesByProject.get(action.project) + if (actionSwitch === undefined) { + console.log('[ERROR] Action Switch for project ' + action.project + ' could not be found.') + return + } return actionSwitch.executeAction(action) } diff --git a/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js b/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js index c563f066f..6209338a6 100644 --- a/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js +++ b/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js @@ -9,7 +9,7 @@ function newGovernanceFunctionLibraryPluginsFunctions() { return thisObject function addMissingPluginUserProfiles(node, rootNodes) { - let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage( @@ -20,15 +20,15 @@ function newGovernanceFunctionLibraryPluginsFunctions() { } } - UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'User-Profiles', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'User-Profiles', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'User-Profiles', 'User Profile', 'Governance') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'User-Profiles', 'User Profile', 'Governance') } } function addMissingPluginPools(node, rootNodes) { - let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage( @@ -39,15 +39,15 @@ function newGovernanceFunctionLibraryPluginsFunctions() { } } - UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Pools', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Pools', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Pools', 'Pools', 'Governance') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Pools', 'Pools', 'Governance') } } function addMissingPluginAssets(node, rootNodes) { - let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage( @@ -58,15 +58,15 @@ function newGovernanceFunctionLibraryPluginsFunctions() { } } - UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Assets', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Assets', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Assets', 'Assets', 'Governance') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Assets', 'Assets', 'Governance') } } function addMissingPluginFeatures(node, rootNodes) { - let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage( @@ -77,15 +77,15 @@ function newGovernanceFunctionLibraryPluginsFunctions() { } } - UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Features', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Features', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Features', 'Features', 'Governance') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Features', 'Features', 'Governance') } } function addMissingPluginPositionss(node, rootNodes) { - let projectName = UI.projects.plugins.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage( @@ -96,10 +96,10 @@ function newGovernanceFunctionLibraryPluginsFunctions() { } } - UI.projects.plugins.utilities.plugins.getPluginFileNames(projectName, 'Positions', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Positions', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.plugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Positions', 'Positions', 'Governance') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Positions', 'Positions', 'Governance') } } } diff --git a/Projects/Plugins/UI/Function-Libraries/ActionSwitch.js b/Projects/Plugins/UI/Function-Libraries/ActionSwitch.js deleted file mode 100644 index 9698faf65..000000000 --- a/Projects/Plugins/UI/Function-Libraries/ActionSwitch.js +++ /dev/null @@ -1,98 +0,0 @@ -function newPluginsActionSwitch() { - - let thisObject = { - executeAction: executeAction, - initialize: initialize, - finalize: finalize - } - - return thisObject - - function finalize() { - - } - - function initialize() { - /* Nothing to initialize since a Function Library does not hold any state. */ - } - - async function executeAction(action) { - switch (action.name) { - case 'Install as Plugin': - { - UI.projects.plugins.functionLibraries.pluginsFunctions.installAsPlugin(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Projects': - { - UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginProjects(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Types': - { - UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginTypes(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Data Mines': - { - UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginDataMines(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Trading Mines': - { - UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginTradingMines(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Trading Systems': - { - UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginTradingSystems(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Trading Engines': - { - UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginTradingEngines(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Learning Mines': - { - UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginLearningMines(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Learning Systems': - { - UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginLearningSystems(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Learning Engines': - { - UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginLearningEngines(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Tutorials': - { - UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginTutorials(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin API Maps': - { - UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginApiMaps(action.node, action.rootNodes) - } - break - case 'Enable Saving With Workspace': - { - UI.projects.plugins.functionLibraries.pluginsFunctions.enableSavingWithWorkspace(action.node, action.rootNodes) - } - break - case 'Disable Saving With Workspace': - { - UI.projects.plugins.functionLibraries.pluginsFunctions.disableSavingWithWorkspace(action.node, action.rootNodes) - } - break - case 'Save Plugin': - { - UI.projects.plugins.functionLibraries.pluginsFunctions.savePlugin(action.node, action.rootNodes) - } - break - } - } -} diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index fe6d9310c..989ec21b4 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -929,8 +929,8 @@ ] }, { - "name": "Plugins", - "propertyName": "plugins", + "name": "Community-Plugins", + "propertyName": "communityPlugins", "UI": { "functionLibraries": [ { diff --git a/Projects/Social-Trading/NT/Modules/Bootstrap.js b/Projects/Social-Trading/NT/Modules/Bootstrap.js index 2ff290e35..303c2791a 100644 --- a/Projects/Social-Trading/NT/Modules/Bootstrap.js +++ b/Projects/Social-Trading/NT/Modules/Bootstrap.js @@ -18,7 +18,7 @@ exports.newBootstrap = function newBootstrap() { async function initialize() { - let pluginFileNames = await SA.projects.plugins.utilities.plugins.getPluginFileNames( + let pluginFileNames = await SA.projects.communityPlugins.utilities.plugins.getPluginFileNames( 'Governance', 'User-Profiles' ) @@ -26,7 +26,7 @@ exports.newBootstrap = function newBootstrap() { for (let i = 0; i < pluginFileNames.length; i++) { let pluginFileName = pluginFileNames[i] - let pluginFileContent = await SA.projects.plugins.utilities.plugins.getPluginFileContent( + let pluginFileContent = await SA.projects.communityPlugins.utilities.plugins.getPluginFileContent( 'Governance', 'User-Profiles', pluginFileName From af856335afb7eb33db97905b0f9f7b206e4ede9d Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 27 Sep 2021 12:02:52 +0200 Subject: [PATCH 11/82] Fix to Install Market procedure, to allow tasks belonging to different projects --- .../UI/Function-Libraries/TaskFunctions.js | 13 ++++++++----- Projects/ProjectsSchema.json | 7 +++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js b/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js index 0b6e6b84a..178194514 100644 --- a/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js +++ b/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js @@ -587,30 +587,33 @@ function newFoundationsFunctionLibraryTaskFunctions() { } function addMissingProjectDataTasks(node, rootNodes) { - addMissingProjectTasks(node, rootNodes, 'Project Data Tasks') + addMissingProjectTasks(node, rootNodes, 'Project Data Tasks', 'Data Tasks') } function addMissingProjectTradingTasks(node, rootNodes) { - addMissingProjectTasks(node, rootNodes, 'Project Trading Tasks') + addMissingProjectTasks(node, rootNodes, 'Project Trading Tasks', 'Trading Tasks') } function addMissingProjectLearningTasks(node, rootNodes) { - addMissingProjectTasks(node, rootNodes, 'Project Learning Tasks') + addMissingProjectTasks(node, rootNodes, 'Project Learning Tasks', 'Learning Tasks') } - function addMissingProjectTasks(node, rootNodes, newNodeType) { + function addMissingProjectTasks(node, rootNodes, newNodeType, taskType) { for (let k = 0; k < PROJECTS_SCHEMA.length; k++) { let projectDefinition = PROJECTS_SCHEMA[k] let project = projectDefinition.name + if (projectDefinition.tasks === undefined) { continue } + if (projectDefinition.tasks.includes(taskType) === false) { continue } + for (let j = 0; j < rootNodes.length; j++) { let rootNode = rootNodes[j] if (rootNode.type === project + ' Project') { let projectDefinition = rootNode.projectDefinition if (projectDefinition !== undefined) { if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, projectDefinition, true) === true) { - let projectTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, newNodeType, undefined, project) + let projectTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, newNodeType, undefined, node.project) UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(projectTasks, projectDefinition) } } diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index 989ec21b4..ad82ce894 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -798,6 +798,10 @@ "Learning Engines", "Tutorials", "API Maps" + ], + "tasks": [ + "Learning Tasks", + "Trading Tasks" ] }, { @@ -926,6 +930,9 @@ }, "plugins": [ "Data Mines" + ], + "tasks": [ + "Data Tasks" ] }, { From 1c5e2b68f41d0e104313ac1c4eea252602743530 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 27 Sep 2021 13:37:24 +0200 Subject: [PATCH 12/82] Algorithmic-Trading project spinned out from Foundations --- .../Low-Frequency-Trading/APIs/ExchangeAPI.js | 2 +- .../Low-Frequency-Trading/Announcements.js | 2 +- .../OrdersCalculations.js | 2 +- .../OrdersSimulations.js | 2 +- .../Low-Frequency-Trading/Snapshots.js | 2 +- .../Low-Frequency-Trading/TradingEngine.js | 2 +- .../Low-Frequency-Trading/TradingEpisode.js | 2 +- .../Low-Frequency-Trading/TradingExecution.js | 4 +- .../Low-Frequency-Trading/TradingOrders.js | 10 +- .../Low-Frequency-Trading/TradingOutput.js | 4 +- .../Low-Frequency-Trading/TradingPosition.js | 2 +- .../Low-Frequency-Trading/TradingProcess.js | 6 +- .../Low-Frequency-Trading/TradingRecords.js | 2 +- .../TradingSimulation.js | 8 +- .../Low-Frequency-Trading/TradingStages.js | 14 +- .../Low-Frequency-Trading/TradingStrategy.js | 2 +- .../Low-Frequency-Trading/TradingSystem.js | 4 +- .../Trading-Bot/SingleMarketTradingBot.js | 6 +- .../Bot-Modules/Trading-Bot/TradingSession.js | 2 +- .../TradingSessionFunctions.js | 2 +- Projects/ProjectsSchema.json | 304 +++++++++--------- 21 files changed, 200 insertions(+), 184 deletions(-) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/APIs/ExchangeAPI.js (99%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Announcements.js (98%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js (99%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js (99%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Snapshots.js (99%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js (99%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js (99%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js (97%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js (99%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js (94%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js (99%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js (98%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingRecords.js (99%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js (99%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js (99%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js (98%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js (99%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js (99%) rename Projects/{Foundations => Algorithmic-Trading}/TS/Bot-Modules/Trading-Bot/TradingSession.js (99%) rename Projects/{Foundations => Algorithmic-Trading}/UI/Function-Libraries/TradingSessionFunctions.js (99%) diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/APIs/ExchangeAPI.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/APIs/ExchangeAPI.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/APIs/ExchangeAPI.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/APIs/ExchangeAPI.js index 665015dcc..dd88e832a 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/APIs/ExchangeAPI.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/APIs/ExchangeAPI.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesExchangeAPI = function (processIndex) { +exports.newAlgorithmicTradingBotModulesExchangeAPI = function (processIndex) { let MODULE_NAME = "Exchange API"; diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Announcements.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Announcements.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Announcements.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Announcements.js index d0e5821a3..e04ef5d50 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Announcements.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Announcements.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesAnnouncements = function (processIndex) { +exports.newAlgorithmicTradingBotModulesAnnouncements = function (processIndex) { const MODULE_NAME = 'Announcements' diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js index 60b78456b..910d016f4 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesOrdersCalculations = function (processIndex) { +exports.newAlgorithmicTradingBotModulesOrdersCalculations = function (processIndex) { /* When we are live trading, we need to syncronize with the exchange. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js index b67380074..1d3ea0ac6 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesOrdersSimulations = function (processIndex) { +exports.newAlgorithmicTradingBotModulesOrdersSimulations = function (processIndex) { /* When we are backtesting or paper trading, we need to simulate what would have happened at the exchange. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Snapshots.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Snapshots.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Snapshots.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Snapshots.js index 4a2ed0b9a..65f2d2f6c 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Snapshots.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Snapshots.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesSnapshots = function(processIndex) { +exports.newAlgorithmicTradingBotModulesSnapshots = function(processIndex) { /* This module encapsulates the snapshots functionality. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js index 439a86ae5..441e5bfb7 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingEngine = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingEngine = function (processIndex) { /* We call the Trading Engine to the data structure that is needed in order to exevute the trading protocol with the specific rules defined at the Trading System. diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js index 0ff1c6762..44f563cca 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingEpisode = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingEpisode = function (processIndex) { /* This module packages all functions related to Episodes. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js similarity index 97% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js index da6371a61..2080c3a90 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingExecution = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingExecution = function (processIndex) { /* The Trading Execution modules manages the execution nodes and execution algoritms. */ @@ -16,7 +16,7 @@ exports.newFoundationsBotModulesTradingExecution = function (processIndex) { let tradingSystem let sessionParameters - let tradingOrdersModuleObject = TS.projects.foundations.botModules.tradingOrders.newFoundationsBotModulesTradingOrders(processIndex) + let tradingOrdersModuleObject = TS.projects.foundations.botModules.tradingOrders.newAlgorithmicTradingBotModulesTradingOrders(processIndex) return thisObject diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js index 26b4207e5..c540e6cf7 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingOrders = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingOrders = function (processIndex) { /* The Trading Orders modules manages the execution of orders against the exchanges. */ @@ -16,8 +16,8 @@ exports.newFoundationsBotModulesTradingOrders = function (processIndex) { let tradingSystem let sessionParameters - let exchangeAPIModuleObject = TS.projects.foundations.botModules.exchangeAPI.newFoundationsBotModulesExchangeAPI(processIndex) - let announcementsModuleObject = TS.projects.foundations.botModules.announcements.newFoundationsBotModulesAnnouncements(processIndex) + let exchangeAPIModuleObject = TS.projects.foundations.botModules.exchangeAPI.newAlgorithmicTradingBotModulesExchangeAPI(processIndex) + let announcementsModuleObject = TS.projects.foundations.botModules.announcements.newAlgorithmicTradingBotModulesAnnouncements(processIndex) return thisObject @@ -843,7 +843,7 @@ exports.newFoundationsBotModulesTradingOrders = function (processIndex) { let previousBaseAssetFeesPaid = tradingEngineOrder.orderBaseAsset.feesPaid.value let previousQuotedAssetFeesPaid = tradingEngineOrder.orderQuotedAsset.feesPaid.value - let ordersSimulationsModuleObject = TS.projects.foundations.botModules.ordersSimulations.newFoundationsBotModulesOrdersSimulations(processIndex) + let ordersSimulationsModuleObject = TS.projects.foundations.botModules.ordersSimulations.newAlgorithmicTradingBotModulesOrdersSimulations(processIndex) ordersSimulationsModuleObject.initialize() ordersSimulationsModuleObject.actualSizeSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) @@ -874,7 +874,7 @@ exports.newFoundationsBotModulesTradingOrders = function (processIndex) { let previousBaseAssetFeesPaid = tradingEngineOrder.orderBaseAsset.feesPaid.value let previousQuotedAssetFeesPaid = tradingEngineOrder.orderQuotedAsset.feesPaid.value - let ordersCalculationsModuleObject = TS.projects.foundations.botModules.ordersCalculations.newFoundationsBotModulesOrdersCalculations(processIndex) + let ordersCalculationsModuleObject = TS.projects.foundations.botModules.ordersCalculations.newAlgorithmicTradingBotModulesOrdersCalculations(processIndex) ordersCalculationsModuleObject.initialize() await ordersCalculationsModuleObject.actualSizeCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js similarity index 94% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js index cf1396900..4ccc44b48 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingOutput = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingOutput = function (processIndex) { /* This module will load if necesary all the data outputs so that they can be appended with new records if needed. After running the simulation, it will save all the data outputs. @@ -29,7 +29,7 @@ exports.newFoundationsBotModulesTradingOutput = function (processIndex) { } /* Preparing everything for the Simulation */ - let tradingSimulationModuleObject = TS.projects.foundations.botModules.tradingSimulation.newFoundationsBotModulesTradingSimulation(processIndex) + let tradingSimulationModuleObject = TS.projects.foundations.botModules.tradingSimulation.newAlgorithmicTradingBotModulesTradingSimulation(processIndex) let outputDatasets = TS.projects.foundations.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset') let outputDatasetsMap = new Map() diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js index c2aaa9302..4b825861e 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingPosition = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingPosition = function (processIndex) { /* This module packages all functions related to Positions. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js index c1f3f2dab..f70639b34 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingProcess = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingProcess = function (processIndex) { /* This Module will load all the process data dependencies from files and send them downstream. After execution, will save the time range and status report of the process. @@ -16,8 +16,8 @@ let dataFiles = new Map() let multiTimeFrameDataFiles = new Map() - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT = TS.projects.foundations.botModules.tradingEngine.newFoundationsBotModulesTradingEngine(processIndex) - let tradingOutputModuleObject = TS.projects.foundations.botModules.tradingOutput.newFoundationsBotModulesTradingOutput(processIndex) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT = TS.projects.foundations.botModules.tradingEngine.newAlgorithmicTradingBotModulesTradingEngine(processIndex) + let tradingOutputModuleObject = TS.projects.foundations.botModules.tradingOutput.newAlgorithmicTradingBotModulesTradingOutput(processIndex) let currentTimeFrame = {} diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingRecords.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingRecords.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingRecords.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingRecords.js index 0f1d7567c..ab4428a65 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingRecords.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingRecords.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingRecords = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingRecords = function (processIndex) { /* This module facilitates the appending of records to the output of the process. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js index bb3701eef..5944e9683 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingSimulation = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingSimulation = function (processIndex) { /* This Module represents the trading simulacion. Escentially a loop through a set of candles and the execution at each loop cycle of the Trading System Protocol. @@ -34,13 +34,13 @@ exports.newFoundationsBotModulesTradingSimulation = function (processIndex) { '[INFO] runSimulation -> finalDatetime = ' + sessionParameters.timeRange.config.finalDatetime) /* These are the Modules we will need to run the Simulation */ - let tradingRecordsModuleObject = TS.projects.foundations.botModules.tradingRecords.newFoundationsBotModulesTradingRecords(processIndex) + let tradingRecordsModuleObject = TS.projects.foundations.botModules.tradingRecords.newAlgorithmicTradingBotModulesTradingRecords(processIndex) tradingRecordsModuleObject.initialize(outputDatasetsMap) - let tradingSystemModuleObject = TS.projects.foundations.botModules.tradingSystem.newFoundationsBotModulesTradingSystem(processIndex) + let tradingSystemModuleObject = TS.projects.foundations.botModules.tradingSystem.newAlgorithmicTradingBotModulesTradingSystem(processIndex) tradingSystemModuleObject.initialize() - let tradingEpisodeModuleObject = TS.projects.foundations.botModules.tradingEpisode.newFoundationsBotModulesTradingEpisode(processIndex) + let tradingEpisodeModuleObject = TS.projects.foundations.botModules.tradingEpisode.newAlgorithmicTradingBotModulesTradingEpisode(processIndex) tradingEpisodeModuleObject.initialize() /* Setting up the candles array: The whole simulation is based on the array of candles at the time-frame defined at the session parameters. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js index 34b3f1345..9c3895ef0 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingStages = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) { /* This module packages all functions related to Stages. */ @@ -21,12 +21,12 @@ exports.newFoundationsBotModulesTradingStages = function (processIndex) { finalize: finalize } - let tradingStrategyModuleObject = TS.projects.foundations.botModules.tradingStrategy.newFoundationsBotModulesTradingStrategy(processIndex) - let tradingPositionModuleObject = TS.projects.foundations.botModules.tradingPosition.newFoundationsBotModulesTradingPosition(processIndex) - let tradingExecutionModuleObject = TS.projects.foundations.botModules.tradingExecution.newFoundationsBotModulesTradingExecution(processIndex) - let announcementsModuleObject = TS.projects.foundations.botModules.announcements.newFoundationsBotModulesAnnouncements(processIndex) - let snapshotsModuleObject = TS.projects.foundations.botModules.snapshots.newFoundationsBotModulesSnapshots(processIndex) - let tradingEpisodeModuleObject = TS.projects.foundations.botModules.tradingEpisode.newFoundationsBotModulesTradingEpisode(processIndex) + let tradingStrategyModuleObject = TS.projects.foundations.botModules.tradingStrategy.newAlgorithmicTradingBotModulesTradingStrategy(processIndex) + let tradingPositionModuleObject = TS.projects.foundations.botModules.tradingPosition.newAlgorithmicTradingBotModulesTradingPosition(processIndex) + let tradingExecutionModuleObject = TS.projects.foundations.botModules.tradingExecution.newAlgorithmicTradingBotModulesTradingExecution(processIndex) + let announcementsModuleObject = TS.projects.foundations.botModules.announcements.newAlgorithmicTradingBotModulesAnnouncements(processIndex) + let snapshotsModuleObject = TS.projects.foundations.botModules.snapshots.newAlgorithmicTradingBotModulesSnapshots(processIndex) + let tradingEpisodeModuleObject = TS.projects.foundations.botModules.tradingEpisode.newAlgorithmicTradingBotModulesTradingEpisode(processIndex) let tradingEngine let tradingSystem diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js index f676de4d7..c18aefd1d 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingStrategy = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingStrategy = function (processIndex) { /* This module packages all functions related to Strategies. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js index 149c55e76..3367d00b6 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingSystem = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingSystem = function (processIndex) { /* The Trading System is the user defined set of rules compliant with the Trading Protocol that defines the trading logic to be applied during each cycle of the Simulation. @@ -26,7 +26,7 @@ exports.newFoundationsBotModulesTradingSystem = function (processIndex) { let sessionParameters let dynamicIndicators - let tradingStagesModuleObject = TS.projects.foundations.botModules.tradingStages.newFoundationsBotModulesTradingStages(processIndex) + let tradingStagesModuleObject = TS.projects.foundations.botModules.tradingStages.newAlgorithmicTradingBotModulesTradingStages(processIndex) let taskParameters = { market: TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.baseAsset.referenceParent.config.codeName + diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js index 6592a92f8..6b13be19a 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js @@ -1,8 +1,8 @@ -exports.newFoundationsBotModulesSingleMarketTradingBot = function (processIndex) { +exports.newAlgorithmicTradingBotModulesSingleMarketTradingBot = function (processIndex) { const MODULE_NAME = "Single Market Trading Bot"; - let session = TS.projects.foundations.botModules.tradingSession.newFoundationsBotModulesTradingSession(processIndex) + let session = TS.projects.foundations.botModules.tradingSession.newAlgorithmicTradingBotModulesTradingSession(processIndex) let nextLoopTimeoutHandle; let thisObject = { @@ -282,7 +282,7 @@ "[INFO] run -> loop -> initializeDataDependencies -> onInizialized -> Execution finished well.") switch (TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.config.framework.name) { case 'Low-Frequency-Trading-Process': { - processFramework = TS.projects.foundations.botModules.tradingProcess.newFoundationsBotModulesTradingProcess(processIndex); + processFramework = TS.projects.foundations.botModules.tradingProcess.newAlgorithmicTradingBotModulesTradingProcess(processIndex); startProcessFramework(); break; } diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/TradingSession.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/TradingSession.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/TradingSession.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/TradingSession.js index 404516556..d9d3586ee 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/TradingSession.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/TradingSession.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingSession = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingSession = function (processIndex) { const MODULE_NAME = "Trading Session" diff --git a/Projects/Foundations/UI/Function-Libraries/TradingSessionFunctions.js b/Projects/Algorithmic-Trading/UI/Function-Libraries/TradingSessionFunctions.js similarity index 99% rename from Projects/Foundations/UI/Function-Libraries/TradingSessionFunctions.js rename to Projects/Algorithmic-Trading/UI/Function-Libraries/TradingSessionFunctions.js index 65ab97da8..078044e5d 100644 --- a/Projects/Foundations/UI/Function-Libraries/TradingSessionFunctions.js +++ b/Projects/Algorithmic-Trading/UI/Function-Libraries/TradingSessionFunctions.js @@ -1,4 +1,4 @@ -function newFoundationsFunctionLibraryTradingSessionFunctions() { +function newAlgorithmicTradingFunctionLibraryTradingSessionFunctions() { let thisObject = { syncronizeSessionWithBackEnd: syncronizeSessionWithBackEnd, runSession: runSession, diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index ad82ce894..64528cb9e 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -71,11 +71,6 @@ "propertyName": "taskFunctions", "functionName": "newFoundationsFunctionLibraryTaskFunctions" }, - { - "name": "Trading Session Functions", - "propertyName": "tradingSessionFunctions", - "functionName": "newFoundationsFunctionLibraryTradingSessionFunctions" - }, { "name": "Learning Session Functions", "propertyName": "learningSessionFunctions", @@ -509,21 +504,6 @@ } ], "botModules": [ - { - "name": "Single Market Trading Bot", - "propertyName": "singleMarketTradingBot", - "functionName": "newFoundationsBotModulesSingleMarketTradingBot", - "fileName": "SingleMarketTradingBot.js", - "folderName": "Trading-Bot", - "botType": "Trading Bot" - }, - { - "name": "Trading Session", - "propertyName": "tradingSession", - "functionName": "newFoundationsBotModulesTradingSession", - "fileName": "TradingSession.js", - "folderName": "Trading-Bot" - }, { "name": "Social Bots", "propertyName": "socialBots", @@ -552,125 +532,6 @@ "fileName": "SlackBot.js", "folderName": "Trading-Bot/Announcements" }, - { - "name": "Trading Process", - "propertyName": "tradingProcess", - "functionName": "newFoundationsBotModulesTradingProcess", - "fileName": "TradingProcess.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Engine", - "propertyName": "tradingEngine", - "functionName": "newFoundationsBotModulesTradingEngine", - "fileName": "TradingEngine.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Output", - "propertyName": "tradingOutput", - "functionName": "newFoundationsBotModulesTradingOutput", - "fileName": "TradingOutput.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Simulation", - "propertyName": "tradingSimulation", - "functionName": "newFoundationsBotModulesTradingSimulation", - "fileName": "TradingSimulation.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Episode", - "propertyName": "tradingEpisode", - "functionName": "newFoundationsBotModulesTradingEpisode", - "fileName": "TradingEpisode.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Records", - "propertyName": "tradingRecords", - "functionName": "newFoundationsBotModulesTradingRecords", - "fileName": "TradingRecords.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading System", - "propertyName": "tradingSystem", - "functionName": "newFoundationsBotModulesTradingSystem", - "fileName": "TradingSystem.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Stages", - "propertyName": "tradingStages", - "functionName": "newFoundationsBotModulesTradingStages", - "fileName": "TradingStages.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Strategy", - "propertyName": "tradingStrategy", - "functionName": "newFoundationsBotModulesTradingStrategy", - "fileName": "TradingStrategy.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Execution", - "propertyName": "tradingExecution", - "functionName": "newFoundationsBotModulesTradingExecution", - "fileName": "TradingExecution.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Position", - "propertyName": "tradingPosition", - "functionName": "newFoundationsBotModulesTradingPosition", - "fileName": "TradingPosition.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Announcements", - "propertyName": "announcements", - "functionName": "newFoundationsBotModulesAnnouncements", - "fileName": "Announcements.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Snapshots", - "propertyName": "snapshots", - "functionName": "newFoundationsBotModulesSnapshots", - "fileName": "Snapshots.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Orders", - "propertyName": "tradingOrders", - "functionName": "newFoundationsBotModulesTradingOrders", - "fileName": "TradingOrders.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Orders Simulations", - "propertyName": "ordersSimulations", - "functionName": "newFoundationsBotModulesOrdersSimulations", - "fileName": "OrdersSimulations.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Orders Calculations", - "propertyName": "ordersCalculations", - "functionName": "newFoundationsBotModulesOrdersCalculations", - "fileName": "OrdersCalculations.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Exchange API", - "propertyName": "exchangeAPI", - "functionName": "newFoundationsBotModulesExchangeAPI", - "fileName": "ExchangeAPI.js", - "folderName": "Trading-Bot/Low-Frequency-Trading/APIs" - }, { "name": "Single Market Learning Bot", "propertyName": "singleMarketLearningBot", @@ -790,18 +651,14 @@ ] }, "plugins": [ - "Trading Mines", "Learning Mines", - "Trading Systems", "Learning Systems", - "Trading Engines", "Learning Engines", "Tutorials", "API Maps" ], "tasks": [ - "Learning Tasks", - "Trading Tasks" + "Learning Tasks" ] }, { @@ -935,6 +792,165 @@ "Data Tasks" ] }, + { + "name": "Algorithmic-Trading", + "propertyName": "algorithmicTrading", + "UI": { + "functionLibraries": [ + { + "name": "Trading Session Functions", + "propertyName": "tradingSessionFunctions", + "functionName": "newAlgorithmicTradingFunctionLibraryTradingSessionFunctions" + } + ] + }, + "TS": { + "botModules": [ + { + "name": "Single Market Trading Bot", + "propertyName": "singleMarketTradingBot", + "functionName": "newAlgorithmicTradingBotModulesSingleMarketTradingBot", + "fileName": "SingleMarketTradingBot.js", + "folderName": "Trading-Bot", + "botType": "Trading Bot" + }, + { + "name": "Trading Session", + "propertyName": "tradingSession", + "functionName": "newAlgorithmicTradingBotModulesTradingSession", + "fileName": "TradingSession.js", + "folderName": "Trading-Bot" + }, + { + "name": "Trading Process", + "propertyName": "tradingProcess", + "functionName": "newAlgorithmicTradingBotModulesTradingProcess", + "fileName": "TradingProcess.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Engine", + "propertyName": "tradingEngine", + "functionName": "newAlgorithmicTradingBotModulesTradingEngine", + "fileName": "TradingEngine.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Output", + "propertyName": "tradingOutput", + "functionName": "newAlgorithmicTradingBotModulesTradingOutput", + "fileName": "TradingOutput.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Simulation", + "propertyName": "tradingSimulation", + "functionName": "newAlgorithmicTradingBotModulesTradingSimulation", + "fileName": "TradingSimulation.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Episode", + "propertyName": "tradingEpisode", + "functionName": "newAlgorithmicTradingBotModulesTradingEpisode", + "fileName": "TradingEpisode.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Records", + "propertyName": "tradingRecords", + "functionName": "newAlgorithmicTradingBotModulesTradingRecords", + "fileName": "TradingRecords.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading System", + "propertyName": "tradingSystem", + "functionName": "newAlgorithmicTradingBotModulesTradingSystem", + "fileName": "TradingSystem.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Stages", + "propertyName": "tradingStages", + "functionName": "newAlgorithmicTradingBotModulesTradingStages", + "fileName": "TradingStages.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Strategy", + "propertyName": "tradingStrategy", + "functionName": "newAlgorithmicTradingBotModulesTradingStrategy", + "fileName": "TradingStrategy.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Execution", + "propertyName": "tradingExecution", + "functionName": "newAlgorithmicTradingBotModulesTradingExecution", + "fileName": "TradingExecution.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Position", + "propertyName": "tradingPosition", + "functionName": "newAlgorithmicTradingBotModulesTradingPosition", + "fileName": "TradingPosition.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Announcements", + "propertyName": "announcements", + "functionName": "newAlgorithmicTradingBotModulesAnnouncements", + "fileName": "Announcements.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Snapshots", + "propertyName": "snapshots", + "functionName": "newAlgorithmicTradingBotModulesSnapshots", + "fileName": "Snapshots.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Orders", + "propertyName": "tradingOrders", + "functionName": "newAlgorithmicTradingBotModulesTradingOrders", + "fileName": "TradingOrders.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Orders Simulations", + "propertyName": "ordersSimulations", + "functionName": "newAlgorithmicTradingBotModulesOrdersSimulations", + "fileName": "OrdersSimulations.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Orders Calculations", + "propertyName": "ordersCalculations", + "functionName": "newAlgorithmicTradingBotModulesOrdersCalculations", + "fileName": "OrdersCalculations.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Exchange API", + "propertyName": "exchangeAPI", + "functionName": "newAlgorithmicTradingBotModulesExchangeAPI", + "fileName": "ExchangeAPI.js", + "folderName": "Trading-Bot/Low-Frequency-Trading/APIs" + } + ] + }, + "plugins": [ + "Trading Mines", + "Trading Systems", + "Trading Engines" + ], + "tasks": [ + "Trading Tasks" + ] + }, { "name": "Community-Plugins", "propertyName": "communityPlugins", From 704f1d69fa23ff4767b7d7c88cd220124425423d Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 27 Sep 2021 13:55:42 +0200 Subject: [PATCH 13/82] TradingSessionFunctions refactored --- .../Trading-Bot/Low-Frequency-Trading/TradingProcess.js | 2 +- .../Trading-Bot/Low-Frequency-Trading/TradingSimulation.js | 6 +++--- .../TS/Bot-Modules/Trading-Bot/TradingSession.js | 4 ++-- .../TS/Bot-Modules/Trading-Bot/Announcements/TelegramBot.js | 2 +- Projects/Foundations/UI/Function-Libraries/ActionSwitch.js | 4 ++-- .../Foundations/UI/Function-Libraries/UiObjectsFromNodes.js | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js index f70639b34..2d9155863 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js @@ -285,7 +285,7 @@ */ TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[IMPORTANT] checkIfSessionMustStop -> Backtesting Session Finished. Stopping the Session now. ') - TS.projects.foundations.functionLibraries.sessionFunctions.stopSession(processIndex, 'Backtesting Session Finished.') + TS.projects.algorithmicTrading.functionLibraries.sessionFunctions.stopSession(processIndex, 'Backtesting Session Finished.') } } } diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js index 5944e9683..891254fb7 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js @@ -89,7 +89,7 @@ exports.newAlgorithmicTradingBotModulesTradingSimulation = function (processInde meaning that the dataSet needs to be updated with more up-to-date data. */ console.log('DEBUGGING ..................', initialCandle, candles.length) - TS.projects.foundations.functionLibraries.sessionFunctions.stopSession(processIndex, 'Data is not up-to-date enough. Please start the Data Mining Operation.') + TS.projects.algorithmicTrading.functionLibraries.sessionFunctions.stopSession(processIndex, 'Data is not up-to-date enough. Please start the Data Mining Operation.') TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[IMPORTANT] runSimulation -> Data is not up-to-date enough. Stopping the Session now. ') return @@ -253,7 +253,7 @@ exports.newAlgorithmicTradingBotModulesTradingSimulation = function (processInde if (checkFinalDatetime() === false) { closeEpisode('Final Datetime Reached') breakLoop = true - TS.projects.foundations.functionLibraries.sessionFunctions.stopSession(processIndex, 'Final Datetime Reached') + TS.projects.algorithmicTrading.functionLibraries.sessionFunctions.stopSession(processIndex, 'Final Datetime Reached') TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[IMPORTANT] runSimulation -> Final Datetime Reached. Stopping the Session now. ') return @@ -262,7 +262,7 @@ exports.newAlgorithmicTradingBotModulesTradingSimulation = function (processInde if (checkMinimunAndMaximunBalance() === false) { closeEpisode('Min or Max Balance Reached') breakLoop = true - TS.projects.foundations.functionLibraries.sessionFunctions.stopSession(processIndex, 'Min or Max Balance Reached') + TS.projects.algorithmicTrading.functionLibraries.sessionFunctions.stopSession(processIndex, 'Min or Max Balance Reached') TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[IMPORTANT] runSimulation -> Min or Max Balance Reached. Stopping the Session now. ') return diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/TradingSession.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/TradingSession.js index d9d3586ee..0bdf53185 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/TradingSession.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/TradingSession.js @@ -162,12 +162,12 @@ } function onSessionStop() { - TS.projects.foundations.functionLibraries.sessionFunctions.stopSession(processIndex, 'Session Stopped From the User Interface.') + TS.projects.algorithmicTrading.functionLibraries.sessionFunctions.stopSession(processIndex, 'Session Stopped From the User Interface.') } function onSessionResume(message) { try { - if (TS.projects.foundations.functionLibraries.sessionFunctions.stopSession === undefined) { + if (TS.projects.algorithmicTrading.functionLibraries.sessionFunctions.stopSession === undefined) { TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_INSTANCE_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[WARN] onSessionResume -> Event received to resume the Session that have never be ran before. ") return diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Announcements/TelegramBot.js b/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Announcements/TelegramBot.js index 5fe10448c..66a820998 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Announcements/TelegramBot.js +++ b/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Announcements/TelegramBot.js @@ -30,7 +30,7 @@ exports.newFoundationsBotModulesTelegramBot = function (processIndex) { '• Use /stop to stop the session.\n' + '• Use /help to receive this help message.\n\n' + 'Additional commands can be configured using the Social Bot Command node.')) - thisObject.telegramBot.command('stop', (ctx) => TS.projects.foundations.functionLibraries.sessionFunctions.stopSession(processIndex, 'by command from Telegram.')) + thisObject.telegramBot.command('stop', (ctx) => TS.projects.algorithmicTrading.functionLibraries.sessionFunctions.stopSession(processIndex, 'by command from Telegram.')) /* Set up additional commands for each Social Bot Command node */ if(commands !== undefined) { diff --git a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js index 480c3ade0..e91360bf2 100644 --- a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js @@ -580,12 +580,12 @@ function newFoundationsActionSwitch() { break case 'Run Trading Session': { - UI.projects.foundations.functionLibraries.tradingSessionFunctions.runSession(action.node, false, action.callBackFunction) + UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.runSession(action.node, false, action.callBackFunction) } break case 'Resume Trading Session': { - UI.projects.foundations.functionLibraries.tradingSessionFunctions.runSession(action.node, true, action.callBackFunction) + UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.runSession(action.node, true, action.callBackFunction) } break case 'Stop Trading Session': diff --git a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js index aafff5ed8..0eafc7a19 100644 --- a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js +++ b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js @@ -267,7 +267,7 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { function syncronizeTradingSessionsFoundAtWorkspaceWithBackEnd() { for (let i = 0; i < tradingSessionsFoundAtWorkspace.length; i++) { let node = tradingSessionsFoundAtWorkspace[i] - UI.projects.foundations.functionLibraries.tradingSessionFunctions.syncronizeSessionWithBackEnd(node) + UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.syncronizeSessionWithBackEnd(node) } tradingSessionsFoundAtWorkspace = undefined } @@ -275,7 +275,7 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { function syncronizeLearningSessionsFoundAtWorkspaceWithBackEnd() { for (let i = 0; i < learningSessionsFoundAtWorkspace.length; i++) { let node = learningSessionsFoundAtWorkspace[i] - UI.projects.foundations.functionLibraries.tradingSessionFunctions.syncronizeSessionWithBackEnd(node) + UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.syncronizeSessionWithBackEnd(node) } learningSessionsFoundAtWorkspace = undefined } From 8c2d2d762f28693fbe2b66d952d0b8bf65d85d41 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 27 Sep 2021 14:25:28 +0200 Subject: [PATCH 14/82] All TS refactorings done --- .../Low-Frequency-Trading/TradingExecution.js | 2 +- .../Low-Frequency-Trading/TradingOrders.js | 8 ++++---- .../Low-Frequency-Trading/TradingOutput.js | 2 +- .../Low-Frequency-Trading/TradingProcess.js | 4 ++-- .../Low-Frequency-Trading/TradingSimulation.js | 6 +++--- .../Low-Frequency-Trading/TradingStages.js | 12 ++++++------ .../Low-Frequency-Trading/TradingSystem.js | 2 +- .../Trading-Bot/SingleMarketTradingBot.js | 4 ++-- .../Trading-Bot/Announcements}/Announcements.js | 2 +- Projects/ProjectsSchema.json | 14 +++++++------- 10 files changed, 28 insertions(+), 28 deletions(-) rename Projects/{Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading => Foundations/TS/Bot-Modules/Trading-Bot/Announcements}/Announcements.js (98%) diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js index 2080c3a90..11cba8cd6 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js @@ -16,7 +16,7 @@ exports.newAlgorithmicTradingBotModulesTradingExecution = function (processIndex let tradingSystem let sessionParameters - let tradingOrdersModuleObject = TS.projects.foundations.botModules.tradingOrders.newAlgorithmicTradingBotModulesTradingOrders(processIndex) + let tradingOrdersModuleObject = TS.projects.algorithmicTrading.botModules.tradingOrders.newAlgorithmicTradingBotModulesTradingOrders(processIndex) return thisObject diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js index c540e6cf7..a821d7440 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js @@ -16,8 +16,8 @@ exports.newAlgorithmicTradingBotModulesTradingOrders = function (processIndex) { let tradingSystem let sessionParameters - let exchangeAPIModuleObject = TS.projects.foundations.botModules.exchangeAPI.newAlgorithmicTradingBotModulesExchangeAPI(processIndex) - let announcementsModuleObject = TS.projects.foundations.botModules.announcements.newAlgorithmicTradingBotModulesAnnouncements(processIndex) + let exchangeAPIModuleObject = TS.projects.algorithmicTrading.botModules.exchangeAPI.newAlgorithmicTradingBotModulesExchangeAPI(processIndex) + let announcementsModuleObject = TS.projects.foundations.botModules.announcements.newFoundationsBotModulesAnnouncements(processIndex) return thisObject @@ -843,7 +843,7 @@ exports.newAlgorithmicTradingBotModulesTradingOrders = function (processIndex) { let previousBaseAssetFeesPaid = tradingEngineOrder.orderBaseAsset.feesPaid.value let previousQuotedAssetFeesPaid = tradingEngineOrder.orderQuotedAsset.feesPaid.value - let ordersSimulationsModuleObject = TS.projects.foundations.botModules.ordersSimulations.newAlgorithmicTradingBotModulesOrdersSimulations(processIndex) + let ordersSimulationsModuleObject = TS.projects.algorithmicTrading.botModules.ordersSimulations.newAlgorithmicTradingBotModulesOrdersSimulations(processIndex) ordersSimulationsModuleObject.initialize() ordersSimulationsModuleObject.actualSizeSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) @@ -874,7 +874,7 @@ exports.newAlgorithmicTradingBotModulesTradingOrders = function (processIndex) { let previousBaseAssetFeesPaid = tradingEngineOrder.orderBaseAsset.feesPaid.value let previousQuotedAssetFeesPaid = tradingEngineOrder.orderQuotedAsset.feesPaid.value - let ordersCalculationsModuleObject = TS.projects.foundations.botModules.ordersCalculations.newAlgorithmicTradingBotModulesOrdersCalculations(processIndex) + let ordersCalculationsModuleObject = TS.projects.algorithmicTrading.botModules.ordersCalculations.newAlgorithmicTradingBotModulesOrdersCalculations(processIndex) ordersCalculationsModuleObject.initialize() await ordersCalculationsModuleObject.actualSizeCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js index 4ccc44b48..c54869742 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js @@ -29,7 +29,7 @@ exports.newAlgorithmicTradingBotModulesTradingOutput = function (processIndex) { } /* Preparing everything for the Simulation */ - let tradingSimulationModuleObject = TS.projects.foundations.botModules.tradingSimulation.newAlgorithmicTradingBotModulesTradingSimulation(processIndex) + let tradingSimulationModuleObject = TS.projects.algorithmicTrading.botModules.tradingSimulation.newAlgorithmicTradingBotModulesTradingSimulation(processIndex) let outputDatasets = TS.projects.foundations.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset') let outputDatasetsMap = new Map() diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js index 2d9155863..ec5a2c681 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js @@ -16,8 +16,8 @@ let dataFiles = new Map() let multiTimeFrameDataFiles = new Map() - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT = TS.projects.foundations.botModules.tradingEngine.newAlgorithmicTradingBotModulesTradingEngine(processIndex) - let tradingOutputModuleObject = TS.projects.foundations.botModules.tradingOutput.newAlgorithmicTradingBotModulesTradingOutput(processIndex) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT = TS.projects.algorithmicTrading.botModules.tradingEngine.newAlgorithmicTradingBotModulesTradingEngine(processIndex) + let tradingOutputModuleObject = TS.projects.algorithmicTrading.botModules.tradingOutput.newAlgorithmicTradingBotModulesTradingOutput(processIndex) let currentTimeFrame = {} diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js index 891254fb7..84a4b1635 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js @@ -34,13 +34,13 @@ exports.newAlgorithmicTradingBotModulesTradingSimulation = function (processInde '[INFO] runSimulation -> finalDatetime = ' + sessionParameters.timeRange.config.finalDatetime) /* These are the Modules we will need to run the Simulation */ - let tradingRecordsModuleObject = TS.projects.foundations.botModules.tradingRecords.newAlgorithmicTradingBotModulesTradingRecords(processIndex) + let tradingRecordsModuleObject = TS.projects.algorithmicTrading.botModules.tradingRecords.newAlgorithmicTradingBotModulesTradingRecords(processIndex) tradingRecordsModuleObject.initialize(outputDatasetsMap) - let tradingSystemModuleObject = TS.projects.foundations.botModules.tradingSystem.newAlgorithmicTradingBotModulesTradingSystem(processIndex) + let tradingSystemModuleObject = TS.projects.algorithmicTrading.botModules.tradingSystem.newAlgorithmicTradingBotModulesTradingSystem(processIndex) tradingSystemModuleObject.initialize() - let tradingEpisodeModuleObject = TS.projects.foundations.botModules.tradingEpisode.newAlgorithmicTradingBotModulesTradingEpisode(processIndex) + let tradingEpisodeModuleObject = TS.projects.algorithmicTrading.botModules.tradingEpisode.newAlgorithmicTradingBotModulesTradingEpisode(processIndex) tradingEpisodeModuleObject.initialize() /* Setting up the candles array: The whole simulation is based on the array of candles at the time-frame defined at the session parameters. */ diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js index 9c3895ef0..1a3e794f2 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js @@ -21,12 +21,12 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) { finalize: finalize } - let tradingStrategyModuleObject = TS.projects.foundations.botModules.tradingStrategy.newAlgorithmicTradingBotModulesTradingStrategy(processIndex) - let tradingPositionModuleObject = TS.projects.foundations.botModules.tradingPosition.newAlgorithmicTradingBotModulesTradingPosition(processIndex) - let tradingExecutionModuleObject = TS.projects.foundations.botModules.tradingExecution.newAlgorithmicTradingBotModulesTradingExecution(processIndex) - let announcementsModuleObject = TS.projects.foundations.botModules.announcements.newAlgorithmicTradingBotModulesAnnouncements(processIndex) - let snapshotsModuleObject = TS.projects.foundations.botModules.snapshots.newAlgorithmicTradingBotModulesSnapshots(processIndex) - let tradingEpisodeModuleObject = TS.projects.foundations.botModules.tradingEpisode.newAlgorithmicTradingBotModulesTradingEpisode(processIndex) + let tradingStrategyModuleObject = TS.projects.algorithmicTrading.botModules.tradingStrategy.newAlgorithmicTradingBotModulesTradingStrategy(processIndex) + let tradingPositionModuleObject = TS.projects.algorithmicTrading.botModules.tradingPosition.newAlgorithmicTradingBotModulesTradingPosition(processIndex) + let tradingExecutionModuleObject = TS.projects.algorithmicTrading.botModules.tradingExecution.newAlgorithmicTradingBotModulesTradingExecution(processIndex) + let announcementsModuleObject = TS.projects.algorithmicTrading.botModules.announcements.newFoundationsBotModulesAnnouncements(processIndex) + let snapshotsModuleObject = TS.projects.algorithmicTrading.botModules.snapshots.newAlgorithmicTradingBotModulesSnapshots(processIndex) + let tradingEpisodeModuleObject = TS.projects.algorithmicTrading.botModules.tradingEpisode.newAlgorithmicTradingBotModulesTradingEpisode(processIndex) let tradingEngine let tradingSystem diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js index 3367d00b6..4f3d5691a 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js @@ -26,7 +26,7 @@ exports.newAlgorithmicTradingBotModulesTradingSystem = function (processIndex) { let sessionParameters let dynamicIndicators - let tradingStagesModuleObject = TS.projects.foundations.botModules.tradingStages.newAlgorithmicTradingBotModulesTradingStages(processIndex) + let tradingStagesModuleObject = TS.projects.algorithmicTrading.botModules.tradingStages.newAlgorithmicTradingBotModulesTradingStages(processIndex) let taskParameters = { market: TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.baseAsset.referenceParent.config.codeName + diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js index 6b13be19a..23aa53e3c 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js @@ -2,7 +2,7 @@ const MODULE_NAME = "Single Market Trading Bot"; - let session = TS.projects.foundations.botModules.tradingSession.newAlgorithmicTradingBotModulesTradingSession(processIndex) + let session = TS.projects.algorithmicTrading.botModules.tradingSession.newAlgorithmicTradingBotModulesTradingSession(processIndex) let nextLoopTimeoutHandle; let thisObject = { @@ -282,7 +282,7 @@ "[INFO] run -> loop -> initializeDataDependencies -> onInizialized -> Execution finished well.") switch (TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.config.framework.name) { case 'Low-Frequency-Trading-Process': { - processFramework = TS.projects.foundations.botModules.tradingProcess.newAlgorithmicTradingBotModulesTradingProcess(processIndex); + processFramework = TS.projects.algorithmicTrading.botModules.tradingProcess.newAlgorithmicTradingBotModulesTradingProcess(processIndex); startProcessFramework(); break; } diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Announcements.js b/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Announcements/Announcements.js similarity index 98% rename from Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Announcements.js rename to Projects/Foundations/TS/Bot-Modules/Trading-Bot/Announcements/Announcements.js index e04ef5d50..d0e5821a3 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Announcements.js +++ b/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Announcements/Announcements.js @@ -1,4 +1,4 @@ -exports.newAlgorithmicTradingBotModulesAnnouncements = function (processIndex) { +exports.newFoundationsBotModulesAnnouncements = function (processIndex) { const MODULE_NAME = 'Announcements' diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index 64528cb9e..c15a8f1dd 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -504,6 +504,13 @@ } ], "botModules": [ + { + "name": "Announcements", + "propertyName": "announcements", + "functionName": "newFoundationsBotModulesAnnouncements", + "fileName": "Announcements.js", + "folderName": "Trading-Bot/Announcements" + }, { "name": "Social Bots", "propertyName": "socialBots", @@ -898,13 +905,6 @@ "fileName": "TradingPosition.js", "folderName": "Trading-Bot/Low-Frequency-Trading" }, - { - "name": "Announcements", - "propertyName": "announcements", - "functionName": "newAlgorithmicTradingBotModulesAnnouncements", - "fileName": "Announcements.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, { "name": "Snapshots", "propertyName": "snapshots", From d9e2b26e983319ae97bad12cf32a310fe0b51967 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 27 Sep 2021 17:08:18 +0200 Subject: [PATCH 15/82] App Schemas and Icons Moved to new Project Algorithmic-Trading --- .../Icons/Trading/trading-bot.png | Bin .../Icons/Trading/trading-mine.png | Bin .../Icons/algorithmic-trading-project.png | Bin 0 -> 11409 bytes .../algorithmic-trading-project.json | 47 ++++++++++++++++++ .../Schemas/App-Schema/trading-bot.json | 24 ++++++--- .../Schemas/App-Schema/trading-mine.json | 21 +++++--- .../Schemas/App-Schema/data-mine.json | 1 + .../App-Schema/data-mining-project.json | 4 +- .../Spaces/Floating-Space/CircularMenuItem.js | 4 ++ 9 files changed, 86 insertions(+), 15 deletions(-) rename Projects/{Foundations => Algorithmic-Trading}/Icons/Trading/trading-bot.png (100%) rename Projects/{Foundations => Algorithmic-Trading}/Icons/Trading/trading-mine.png (100%) create mode 100644 Projects/Algorithmic-Trading/Icons/algorithmic-trading-project.png create mode 100644 Projects/Algorithmic-Trading/Schemas/App-Schema/algorithmic-trading-project.json rename Projects/{Foundations => Algorithmic-Trading}/Schemas/App-Schema/trading-bot.json (72%) rename Projects/{Foundations => Algorithmic-Trading}/Schemas/App-Schema/trading-mine.json (64%) diff --git a/Projects/Foundations/Icons/Trading/trading-bot.png b/Projects/Algorithmic-Trading/Icons/Trading/trading-bot.png similarity index 100% rename from Projects/Foundations/Icons/Trading/trading-bot.png rename to Projects/Algorithmic-Trading/Icons/Trading/trading-bot.png diff --git a/Projects/Foundations/Icons/Trading/trading-mine.png b/Projects/Algorithmic-Trading/Icons/Trading/trading-mine.png similarity index 100% rename from Projects/Foundations/Icons/Trading/trading-mine.png rename to Projects/Algorithmic-Trading/Icons/Trading/trading-mine.png diff --git a/Projects/Algorithmic-Trading/Icons/algorithmic-trading-project.png b/Projects/Algorithmic-Trading/Icons/algorithmic-trading-project.png new file mode 100644 index 0000000000000000000000000000000000000000..9c5299e7fba0a7b7c0a6cd9818e49a30f729ca2d GIT binary patch literal 11409 zcma)icT`hbx9?7f5b2`yu7XMtP`W^(SdgwLQlyE}q=R%wkak1?6)Dm^3J6F?ij>eK zBGN&6M^IYm0n*;$eBZs}8{^$O-pe2Cy;*auHQSo=H|O5Z4E1lYF!C`%5X5p*>*{R? zf`eN)gro{Lt;eBaxdfHujHhKeBn~@6rB94T7XD z-n@GGj^F6Y1e3D`F<5w=#wliM@I3M1cVpw_QCG6oN=jbcfa%M(`l{A0Rc3!)4%~co z)2Y|yNsr0*r*Qr+-@6n)@jPu8>iJ|6tz}uNsQ1#uX$T)F_4n81J8G+ZoF=xgba#6 zklWa;N629_)xqs>+L@&~Msx@}K!FJ!5Txv%co zblQ|IF<+v~o7qnZER{aFEu+xncPsrttd5)lGjp2= zdy4_kP@PVe$_gC2AWxlqIF=Z+f4$75(|-$hzw}PLl6Ea}fF1#T3z{S7R9dtr86;e< zyTkQ(+l&M5BW9lIiJlui0-A+`j z_FPl2`JMN9v**IiU$d{L&>eZ_;{!vpyr<6Fr5?j{aK^jbbF6B#dyK^LLJkkN;`FAx zF@YoO;s%29{2)?(KrIfzQRw=p1re z0@%RNU~9_IiOQ$#vz>SaJ0TCq^g2=c`}i=5?m2q{a=Q94-=k-b=ysbz?vLht-(VJp z?|iB5xo&?H?4F#rPv|3G(k5H1dAf^$#ftXv!T606C=%%sn5yw>8qE$_e_0T|LB0Mg zy?`f86!7Ojtr?I;0L!G{*#CJ%!bBkKLfqkl_nj@mPx4z1c!qnl$RX*xft<-1;Ek%5 z_h-7_$RsUG*DIkREUN$o|750c{f5diD=UloCuStnW7>&Q3`yF0ByN8H8atSgyPrCl z%{Qja%?^h_Wzpiy0>nvQYVh%YG2BwCfguX_sVF>!*g!ydVOh zD^oCOZJ(zy16;~A0ACNCx4Fc*{n}rf`QDWed^0*UKQyGhq5hETC=9xA;egQjJIcp* zb6ja)-D^3Oay9;zhjjPWyHAlfhnN7j&ci7)iw)Toqz9EY_C^k!y7)w=oVIvc)!pv? zKt=@QdEp@LRDT0AE`0d3Z>Koojpg!BV~y^SaBN?*s;OI6FcE!DZd0(9!xJcGMG=c#ocI$*y%bs)n&l}FcdF^1X)yov&EY!MuA z&QTmrFWnDsKjO5;7(aAT>({sK6L7RqhCTl?o5fog7obDS_q3s>oHR2|X!F785m((S zjep&K`6L#WW#rsPc6_Q+tI)^{@laA>-^QdGmohRQzkywZdII?6F)1ochI6V&pt|ou zx8W(y&pE&?Q$kmSOg=)-*!!Ib0&*za(MCT{_CMJ#fY3_3LGzfWrDzXyUB*6no{M0W zptFM-kuQQu)nwt&-nv-S%F`

Ha*lYe}TMh|XZ^sc&1N&A6CP0Ln?9jJN4Y9^R4xr-?-UpeK!ivM$_k!KaK~Mq{ zH1&`ClhO!acM+D3H^4a&&?cUG7u;m6e!2xm{3|;H*a9@bc<=^7Ll7YOugkQHR|3{& zH@i4Q`aIQ0w{ns$ijA#nbx9&$JHYt9?VkgAi#p}W`o)pOgV!=Qeok&o!Z_chbH2eU zIv;G%ZNGbHp34`rQ%>-YJ1O6#Rko^CdE>RL>_-7``WiOyGrtvMtf1fMIB`+y@(Vrs z0(9t03N(upl%P{Th^J%O!1>*?_hx=SKzWxnoJKesfjH+ExJ@frFwl2CD|i|Shr-+G zs3J0z5->P)on}QDjht_*ahShJ0P`=-ML_7aiEPBYVJ0x}OH%Jkj+dHt_3S`I7z7mi zKVQHZ_&HLDfZ)*n#Vjxv$I;^iw4k^rB5?HQbzJjiyyi@PZ}~kk>2*2&Or>^_@Cd2^ zfA&X>TQ*e#k-U*7+msThFruPe}}bqw)N4woO7HvGO(JE z+X=j>oXp24{xrWW4uX32XG9c9AqiO%rby&}`0l?wSwu38Ud!l(dbMH(cfE%0`PY5s zU*p=0@@M^j#(4*ObX!O2uv@isJzU0-pPc^uOrZv)dp_jO%6e7vw>M_YCp3s;^UplA z=GCN0{^f$8xQc}NC#{Pij&cP~t!CS2#^!EX90WTZ!k`bm0N+%&*c=S@=DP?G#X7yL zBk_UC6+_zCjj*6O=N6q!vQk0@#_0Tuf%ybz?pmghUdq^u=d*8`8-FS?!QBcG%9>kK z3C#qV1~o}E2)a+mq1O(0$D!|pB4 zlO%11>rWx{m|5oBP(%IYTnUZDCbJLJG@V@Lwe_kaaL7gVcKgQTsgb`fNv9tqXVbwM z`27w>y997J0R}7xxOs|$nY|?avDg=rRXAw`l;w0PJ8YNlkyWHqZ^@#W>PPq1F%}T! zx#@Uun9m>{IA~62gP_?Ha=;fvt9RX12qymmu(hYXo@^kS9KM z{0_Ev40qjTgF_YRkx~PyIL3UFnPlH<=9o_BVof3gANIy0)= zLSRFkvDfS`M;+8_iuHJ10)id8;HQb4kH2(|F@eE*Un}_T{%O`WZD72gl2kfjmM;zB z@|anYJmJd~GypK){RC$}2H&d}71`f6>0p^O2E$y=S}A))X8J5rdL#m4dg)$wHoM`@ z8diBV)7ij*+QZ|O0P*F>jAUr@1=Pu}y}xK7ndJ@5B=-2{e)-D2ezot%Tttx2+dtZ& z*%S)D_U97#NsyFA7P$FG5G!<-785A5%uNL7@RAS{Tm{|%ABQ}Sv^N`1Sv%BL^L6TOxRj%-Ydc}&V|Vou>7!KZ=T?P?H)8SkBQ4*v6+?>t&{tx zm<$scWAw$WuP&g(*r8_%#JUNx%#o*)4B~DePxiy6e_qN>=R`^doM6aF-Hq$SEh>Hn z11%5Y<2plBi`nwn(sc4 ze>jl-alDr*DGf&)|1P*n7zRmLmM5HRdRvU{7` zFp)0!CyI40J$BW?YP`Jkr?60~`<(RlIjd@Q#mO^E%y18$ zK&u(A?jf}_y$pQiyqzY#UUT*lwxe*@cl(I2fP9(-ByXv9e0nsD zskb(_N^LZ5FK!K+Jl@Jg+Ghr8P*>ViGg}q{QfS#EWPJI#^iyj@8Kr}`UChuTJscW& z9MT^aC|ndm+hv7r9C*^B39Y0m0QB;$Kp7~QWf$lVO6 z-=z>U3bA+7pH*U#rR5u%1c!ZpC7h5*3;vAD$4P^5#C@qFcy5+PK|R8J`xV-r!1SmH z;>o3UWYTa(Ghp2OP!sBJQuBj?9S$sD9(HI*#2{x3FC2G($zBn`d|0nptdbOfL#wV{ zBd@4L+(lma>?m}zKh7SyPqvyeET!iGN}R~;PUu27Fr+_`uvWv<{uGDHZa2>ldEjWo zc&bJ~NarYUkp^I7LI@1x24DGBVir`Lb-BtFVI#W zT?WaS;{nh$#R!5FOzXxR9|IoQcIrTJ&T7TFUB5LHi zj2!u=^(F!W&OcE0KQ8h&aU6$Hs96jN%{O8>dPEZ6=e!36ivGpj=~1QT`5pRXM}*e9#e(qg`Y^7C6_r#3oW=n!&$OD>XG z`@p0FdMtS4>*-gWCg*u*A%;VnR+WBOFLC?A7GpjHW=l)*PWSL zMl_J3R76EWvPg#Z;$!g(gy~xd=ywS_yFDzZ+9+>7^&BWfSXp3k^bGW#*)b`=2fRa& z!x`h_NzQcnuL3vJ*ELAw_EVCu*N<)4iYDHSJKwBayB`Z})^b>Xi);;Mx~|br#=lN~HNXTJ ziaAzT1ucE8*0`#k8xcz$B)NWORsccN^&rW3+T6;13wJu?qedbkbTwaxj*s?5w#MwC z6{9aV_o-+?Kd39LZBBxkXplUITzd9~kLG=O`n?@O%cGTcRXYarMWjUTDD2W5J{VR_ zp0;=SOF@c|-5XF=Ja|kYmn`4S;8P!% z$1m$$xsh3R3hH_G^YgUa^K4tztdw3%eeS{FQpg}6KVInAJ2zUTZ9I8#vH%ozhI+TE z`sjeWia=*!|KG{;e@L?;K-u6Z^t@Y;fDH!F@It@!T>}azHK9z4wKof0}1SX|)e+6cXTD7#4DrIsBDR%vbg6~;&IP{|pCG0Ow zp6u~$PGQ1N9aO0lbVmd()*bu=nY6@zQYL)jCJ)xQ=Fd*>%yHCSK(+lk$&F%eGxOC@ zInZZz*+6_OujYA67eCc;PgqGK%NhyErmvNH&7_85F34?WdiYGw&a4-DjWy3%)X$XP zWal|2Wr$8$ioZEWYt1O`R=Xq{AQ7}VSR5W0OU0G!>~@FWOPc)XS8)Un^>EEP(0(P+ zmOrJ??kwZ!o2$Cqm?q}zIbY?BRFK&02gy@%=I*nf*GZ_oiD%{@s>yHC4ybOr<3CS! z(UTXMFoiGWzsjIULo=sjf@^a!W6EJTQVUJlg9)5R;@cU*J@w5@SMlk|=V8$|HFwgK z`9ih`)aoLVNkZKaW_7UmtoUI)j-wn9Z`Tw{bNie-%fd+{<<3y)Fg9EOT?LVT9hVtY z+riW*)3N(9px^7NkK!y*nBV4%(GWUhB5(=Bk-z}c$A{wkxC;g0X9fQ6V z=Pe%OzPqH%k8S&lMC-3;JrCd$cDHKj;TITa_`o4FeOems>>#OJ1emGDC#dUgG+Ml_ z^6%s&%2%qsZwL>_Ei3K2~p?bklWoEI?dd7lNS zG>3lgJJKjt7Q|PweRroyA&+_CVrFE__K%&aA&?OpXfhL<{L#;Vq*AIX6ct+OJ}qb? zULgwWcW&D1E$vypF!y&}K|x7UJ<62Sy`(B+y&R}vR$YCs-bWkUom6|0<9sm|4=1N$Hr)y|ghXP=G)gyl`PmMDL7*0z3La;_LGj4MI8zf?$P#M0K|H252~ zLk;wT)Z_gcr`%}cKchQQ^s$)&g2sL+c10XLx&;iGY{e6ml|iWp=_aVNtOWOg^xlt4GAFRSC3Vy1AGy zgr?JwK&`7@iKRxiFMt*j$BjQ8 z;?@s;ExG?4_(-`bYxi?6ce=n)og1-^WcjOVlGE+>R!2LMq>mOPS_vkew=}sohq^$v z=o7pEIt<>Qy+FlVws2a^%qn@q7@bKh5*McdtMt`@eR!{yl~UsloFBFxxYI z8B?z7#zm|^Uw2KsOkxYl8Ts#iLeqWF_ z=SZ}wzbb0S{&>3|^;sfK#aE+leYDB_^iethWcYdOTwIiWCio(I>=Ab&CAg+JMBU0&W@RLp`&jb5xKoV|n%;Q|0^nPDA6y_Y2tp zv4lq^&Jkm#aJ0x))AwMCCC<&LYA~qhoh6e51B@G{0 z?-)x%q}eEWP5}=7mD3GhF+!L<@b;Ekx#WFE6hul+Vz?{J^B4HmEHi{P`{oQNaZMQFW#vY0wI|m_(U8bgIduK0KZgM+u<11p zu+<$$l(-VhETpog|oI=`>C_NG;oeM?P0$K zN;e2zpTR!X;vRa~>R#U20o*kV8oVimR6J(~cylQrHk2AOInfeTC}R>#WJ4lsIHIvC`{ZVw#erQSv(>Yu4ke!!KvL>|xnjnXH9;iXw; ztaB{&Uo*d^KqDNv6o#0?b>%-DY*=3V_Lu#xkRbwyEvV1%BXUN`Ky?)es%4;dys-(( z%R|9AANJ!uI8#UZqk9(84mkig`Va>XG)7~AP%00lvAbN||GeSI(gtm@BJaTwBbJ&e z(!FqZLfJ-7t@5PhJ|#CkN>HmZy_oxTVf|xoBjw{E4YC5R5@~Pu0zCW{J?m~Xlh>E_ zn%5^vq{tI{W$qH*{Yo^fD-EAARr;KnrZ( zJc)jL_560O)L&0E$@_j|PQG0Fkuu%;xB7k%yNAggN22z&Xn(KAOWHAks5k1sm9;wo zmHK1$6F1gl#tPiX{S!l&21m7^<*oxlfiW)e#U2J%QkBz&xpr1UfCY!LC$zeTnXw3? zez7pZA^EnxSGEdDE5o0Lh#yEnvvPEWpgwOE&L#JsNX68Pg8Y&t>NIiW5Hp}cPPLL; z?2vzf*RT^xSH@WkA0yrQL_i>Fo%``BdSQq5i9YO`|mG#9c( z`D5y0S1tQt1U8XmBV;~-h6DPU-)|1DWRA&=>~#dALS$S^{TqBOkW955lNM=5s`veD z^^d(Ek?jQ%aC=Jeow(aQ&&CQUqT@U0*EvO!!VZi#TDmqK+dqk(Uiavyy`-;&vYvt% zV*i<6B(_a*jTqNSA&qq?(f*_?`qE^>kN;w8c#emC2+o?x?!|n~qwSf^dKCO==rU;zS$Tlv_QAaYS?I(#2I%G#}YK=&?Bx@Hw^FQ_XuW$sv-nMBQLVEC)}eRC1^lIA{zbVfh@C_rQZnol99^LX456Mw&{ zim7D_HO;Le*$C8Q&fTi1&!_7rAoU2wPE^-}JIIseJ{4r1??wU!gTuFAlm8HCiu_M58 zso>BRvcM+rtPx>f$6Ee~b=bK!I=)DLUw*0(v*GyT;hlJY@f>noL?$y!;M^fGw=YBM zD*5R(kW;?e^v3u`mV9dJpxs4sc(l)&Gi2l)oR{&IVKcDYbqiKsoDGGfcjmo{bw6#} zw;ne7v-j-{44engbKj3=l%#9J$4PP-t2eXWJD=}mXS%%X^iJ4;l>v4oJ*1?#InS}< z`5!f{2u@hPykAkXQqujTuCO~M$4X}B=)h9(VF^Wgm{k{+OxQ;rbUq7|;IoC7JzjjT zr*Wu^@QHXFq{d@1!Wx$T6@hx`;HBNR)yz{>8Nr(bsA-~I=Ukvm=rGy7x}^J4>vO?` zVDeL?6JQ35jG&4Tt02mPimBca9wI_jZ)p3+?LjFjBc#2vvr<&SGu0Wq(+O|QEH1fZ zi(j5J01g*P{?$*C?1r~Wk_J`H*3RMhXU1d%wJD#~H161(5K5&@@H;WVJa(sZ8p@_Z z4hH5ygZm|~mA@yU)uHae)^pLUlr~;_R=Z^Ny}qhU1Ip)>py0@`jR#qIiirCG6izjt zo^9}5(@Qx}<&4A^{}@LQ_LD9WZp7i4TWQ734V%wQqlDMkqOR*J&F=*54)UgWFvEmL z<+sj<>e$#s9)6G!C%mEY)UJ#b`fxh7jW$y_6lHFFSNW~R8ZEX{Hg+Y7K~q`f(X*)| z6Y-rGu3Ylh#?l=Ot;D8StP9>+ID41Xb`F>4=J~t>VPGLq9X-V164ZVOI=+=)h>L;E z+^C&*CEiVSywpuD-L)}7-l}}l)c&ZiB*9awsTg-3Ib|lRQQN_Sx3iiXVcqZmn17+1 z3A%lv8|k+mN2`3-xxa-eJu~P<>v)z+*Y?VPq#tgyzV|W@e7A*0empyA2+FpC{H=Z}b%D;hKXoL_9 zP?L9-UpUoGOz%?csO0$*@+}`}aSfC!djm-g3di7Pzi#)(Ue3zcIS{_Y)7&{_AfpR? z_F@;2Hxc-ZUrk#3B03(}vE)uD9O~Y?=&>-3p}Je`?LLp<3n{Tun3V`s!W6TwS#UKU z+?|`D{u1@>PWPvu**F#Pj6#V~%YZ({3cBkqQ-lMp)jCP$qY7Lhe@184%kO2T?5Pq$ zd^*2Jcj9>47P^>nlLj!9soKQTqFDt&TSMFS_8&?_Rx-S7hew{6^GJON+`&K3q*iwa zAfOas$ko(aJZM9`*nuqDA+j#Hg?bep`Zt8uRH4U4k_@Vtov5-ppkvXZ)J6N#Dvg95 z{;VGoU>mY}Vkw&SoxLQ)84bYrw<2>c{;y~~QIWl|%OKH%HV^v$y1)(#B9SAtQN_lH zkC#We5umM`6Yyudc|A-i=`7;T2-&x*M(=R7$|?Umyr<6`LDv*-iy5J>=o5|5CIV;=Vz457EEZKNY{DL5zsln%SP+a4&moncw|5 z%iUslz$@gq|x=+DUzWc8z~fgqR{2l@&rX3GB}U4va)n`ni$GZ<@%X%$rw|j zt|CMJ6P-%2i8u9uy)nRWN@6V*YzV>`{DJ0)x`R!cZcz1MfdAm;HYLh_?oM){-&(iS7x4s=iah3)a_`_cel7UrMYOdDXW0iY=*MF-sQNGu2HFRsSJ8G@qG45>VGo#$* zckgecQpbr>mMXo~ZtCWw*NvtA8s!fD;+dq<5Bqo$z`kau^(XN3!_nf&KY!PA&YWVA zkv35*^h#1_Fot8N|+dg>G-FaNR~bYy`+nign5UjYh$6tPwM-hi?`1x zQ6yj^LKG|VHs1Fvi134>Y0jsO~tD&1qIx a81yTDTjx}p`y;?8bn}}2)uJobPyY{u@C Date: Mon, 27 Sep 2021 17:37:28 +0200 Subject: [PATCH 16/82] Plugins Moved from Foundations to Algorithmic-Trading --- .../Icons/Trading/trading-engine.png | Bin .../Icons/Trading/trading-system.png | Bin .../Plugins/Trading-Engines/Low-Frequency.json | 0 .../Plugins/Trading-Mines/Masters.json | 0 .../Trading-Systems/BB-Top-Bounce-BTC-USDT.json | 0 .../LiveTester-Chart-Scanner.json | 0 .../Masters-Lightning-Strike.json | 0 .../Trading-Systems/Sparta-WHB-BTC-USDT.json | 0 .../Schemas/App-Schema/trading-engine.json | 15 ++++++++++----- .../Schemas/App-Schema/trading-system.json | 15 ++++++++++----- .../App-Schema/plugin-trading-engines.json | 4 +++- .../Schemas/App-Schema/plugin-trading-mines.json | 4 +++- .../App-Schema/plugin-trading-systems.json | 4 +++- .../UI/Function-Libraries/PluginsFunctions.js | 6 +++--- 14 files changed, 32 insertions(+), 16 deletions(-) rename Projects/{Foundations => Algorithmic-Trading}/Icons/Trading/trading-engine.png (100%) rename Projects/{Foundations => Algorithmic-Trading}/Icons/Trading/trading-system.png (100%) rename Projects/{Foundations => Algorithmic-Trading}/Plugins/Trading-Engines/Low-Frequency.json (100%) rename Projects/{Foundations => Algorithmic-Trading}/Plugins/Trading-Mines/Masters.json (100%) rename Projects/{Foundations => Algorithmic-Trading}/Plugins/Trading-Systems/BB-Top-Bounce-BTC-USDT.json (100%) rename Projects/{Foundations => Algorithmic-Trading}/Plugins/Trading-Systems/LiveTester-Chart-Scanner.json (100%) rename Projects/{Foundations => Algorithmic-Trading}/Plugins/Trading-Systems/Masters-Lightning-Strike.json (100%) rename Projects/{Foundations => Algorithmic-Trading}/Plugins/Trading-Systems/Sparta-WHB-BTC-USDT.json (100%) rename Projects/{Foundations => Algorithmic-Trading}/Schemas/App-Schema/trading-engine.json (71%) rename Projects/{Foundations => Algorithmic-Trading}/Schemas/App-Schema/trading-system.json (72%) diff --git a/Projects/Foundations/Icons/Trading/trading-engine.png b/Projects/Algorithmic-Trading/Icons/Trading/trading-engine.png similarity index 100% rename from Projects/Foundations/Icons/Trading/trading-engine.png rename to Projects/Algorithmic-Trading/Icons/Trading/trading-engine.png diff --git a/Projects/Foundations/Icons/Trading/trading-system.png b/Projects/Algorithmic-Trading/Icons/Trading/trading-system.png similarity index 100% rename from Projects/Foundations/Icons/Trading/trading-system.png rename to Projects/Algorithmic-Trading/Icons/Trading/trading-system.png diff --git a/Projects/Foundations/Plugins/Trading-Engines/Low-Frequency.json b/Projects/Algorithmic-Trading/Plugins/Trading-Engines/Low-Frequency.json similarity index 100% rename from Projects/Foundations/Plugins/Trading-Engines/Low-Frequency.json rename to Projects/Algorithmic-Trading/Plugins/Trading-Engines/Low-Frequency.json diff --git a/Projects/Foundations/Plugins/Trading-Mines/Masters.json b/Projects/Algorithmic-Trading/Plugins/Trading-Mines/Masters.json similarity index 100% rename from Projects/Foundations/Plugins/Trading-Mines/Masters.json rename to Projects/Algorithmic-Trading/Plugins/Trading-Mines/Masters.json diff --git a/Projects/Foundations/Plugins/Trading-Systems/BB-Top-Bounce-BTC-USDT.json b/Projects/Algorithmic-Trading/Plugins/Trading-Systems/BB-Top-Bounce-BTC-USDT.json similarity index 100% rename from Projects/Foundations/Plugins/Trading-Systems/BB-Top-Bounce-BTC-USDT.json rename to Projects/Algorithmic-Trading/Plugins/Trading-Systems/BB-Top-Bounce-BTC-USDT.json diff --git a/Projects/Foundations/Plugins/Trading-Systems/LiveTester-Chart-Scanner.json b/Projects/Algorithmic-Trading/Plugins/Trading-Systems/LiveTester-Chart-Scanner.json similarity index 100% rename from Projects/Foundations/Plugins/Trading-Systems/LiveTester-Chart-Scanner.json rename to Projects/Algorithmic-Trading/Plugins/Trading-Systems/LiveTester-Chart-Scanner.json diff --git a/Projects/Foundations/Plugins/Trading-Systems/Masters-Lightning-Strike.json b/Projects/Algorithmic-Trading/Plugins/Trading-Systems/Masters-Lightning-Strike.json similarity index 100% rename from Projects/Foundations/Plugins/Trading-Systems/Masters-Lightning-Strike.json rename to Projects/Algorithmic-Trading/Plugins/Trading-Systems/Masters-Lightning-Strike.json diff --git a/Projects/Foundations/Plugins/Trading-Systems/Sparta-WHB-BTC-USDT.json b/Projects/Algorithmic-Trading/Plugins/Trading-Systems/Sparta-WHB-BTC-USDT.json similarity index 100% rename from Projects/Foundations/Plugins/Trading-Systems/Sparta-WHB-BTC-USDT.json rename to Projects/Algorithmic-Trading/Plugins/Trading-Systems/Sparta-WHB-BTC-USDT.json diff --git a/Projects/Foundations/Schemas/App-Schema/trading-engine.json b/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-engine.json similarity index 71% rename from Projects/Foundations/Schemas/App-Schema/trading-engine.json rename to Projects/Algorithmic-Trading/Schemas/App-Schema/trading-engine.json index 7edb467b7..528279a1a 100644 --- a/Projects/Foundations/Schemas/App-Schema/trading-engine.json +++ b/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-engine.json @@ -5,7 +5,8 @@ "action": "Add Missing Children", "label": "Add Missing Children", "relatedUiObject": "Trading Engine", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -14,7 +15,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isHierarchyHead": true, @@ -25,19 +27,22 @@ "name": "tradingCurrent", "type": "node", "childType": "Trading Current", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "tradingLast", "type": "node", "childType": "Trading Last", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "exchangeOrders", "type": "node", "childType": "Exchange Orders", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/App-Schema/trading-system.json b/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-system.json similarity index 72% rename from Projects/Foundations/Schemas/App-Schema/trading-system.json rename to Projects/Algorithmic-Trading/Schemas/App-Schema/trading-system.json index 895e77ccb..7d0ca8e07 100644 --- a/Projects/Foundations/Schemas/App-Schema/trading-system.json +++ b/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-system.json @@ -5,7 +5,8 @@ "action": "Add UI Object", "label": "Add Trading Strategy", "relatedUiObject": "Trading Strategy", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", @@ -13,7 +14,8 @@ "propertyToCheckFor": "dynamicIndicators", "label": "Add Dynamic Indicators", "relatedUiObject": "Dynamic Indicators", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -22,7 +24,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isHierarchyHead": true, @@ -33,13 +36,15 @@ "name": "tradingStrategies", "type": "array", "childType": "Trading Strategy", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "dynamicIndicators", "type": "node", "childType": "Dynamic Indicators", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" } ] } \ No newline at end of file diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-engines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-engines.json index 5fdfd8ba8..695977ab2 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-engines.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-engines.json @@ -7,7 +7,9 @@ "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", - "relatedUiObject": "Trading Engine", + "iconPathOn": "trading-engine", + "iconPathOff": "trading-engine", + "iconProject": "Algorithmic-Trading", "actionFunction": "payload.executeAction" }, { diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-mines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-mines.json index 1cc96e5bf..a1c864624 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-mines.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-mines.json @@ -7,7 +7,9 @@ "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", - "relatedUiObject": "Trading Mine", + "iconPathOn": "trading-mine", + "iconPathOff": "trading-mine", + "iconProject": "Algorithmic-Trading", "actionFunction": "payload.executeAction" }, { diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-systems.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-systems.json index b7b7489cc..c79a28a2e 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-systems.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-systems.json @@ -7,7 +7,9 @@ "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", - "relatedUiObject": "Trading System", + "iconPathOn": "trading-system", + "iconPathOff": "trading-system", + "iconProject": "Algorithmic-Trading", "actionFunction": "payload.executeAction" }, { diff --git a/Projects/Community-Plugins/UI/Function-Libraries/PluginsFunctions.js b/Projects/Community-Plugins/UI/Function-Libraries/PluginsFunctions.js index 4fbc21ab0..d2c010698 100644 --- a/Projects/Community-Plugins/UI/Function-Libraries/PluginsFunctions.js +++ b/Projects/Community-Plugins/UI/Function-Libraries/PluginsFunctions.js @@ -77,7 +77,7 @@ function newPluginsFunctionLibraryPluginsFunctions() { UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Trading-Mines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Mines', 'Trading Mine', 'Foundations') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Mines', 'Trading Mine', 'Algorithmic-Trading') } } @@ -93,7 +93,7 @@ function newPluginsFunctionLibraryPluginsFunctions() { UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Trading-Systems', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Systems', 'Trading System', 'Foundations') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Systems', 'Trading System', 'Algorithmic-Trading') } } @@ -109,7 +109,7 @@ function newPluginsFunctionLibraryPluginsFunctions() { UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Trading-Engines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Engines', 'Trading Engine', 'Foundations') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Engines', 'Trading Engine', 'Algorithmic-Trading') } } From 7bada617b7aca07b374aecb64c095a8600f701f9 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 27 Sep 2021 18:29:29 +0200 Subject: [PATCH 17/82] Trading Task Running --- .../Low-Frequency-Trading/TradingProcess.js | 2 +- .../Low-Frequency-Trading/TradingSimulation.js | 6 +++--- .../Low-Frequency-Trading/TradingStages.js | 2 +- .../TS/Bot-Modules/Trading-Bot/TradingSession.js | 4 ++-- .../Trading-Bot/Announcements/TelegramBot.js | 2 +- .../UI/Function-Libraries/UiObjectsFromNodes.js | 14 +++++++++++++- 6 files changed, 21 insertions(+), 9 deletions(-) diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js index ec5a2c681..eb92775d4 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js @@ -285,7 +285,7 @@ */ TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[IMPORTANT] checkIfSessionMustStop -> Backtesting Session Finished. Stopping the Session now. ') - TS.projects.algorithmicTrading.functionLibraries.sessionFunctions.stopSession(processIndex, 'Backtesting Session Finished.') + TS.projects.foundations.functionLibraries.sessionFunctions.stopSession(processIndex, 'Backtesting Session Finished.') } } } diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js index 84a4b1635..ce9e39ba4 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js @@ -89,7 +89,7 @@ exports.newAlgorithmicTradingBotModulesTradingSimulation = function (processInde meaning that the dataSet needs to be updated with more up-to-date data. */ console.log('DEBUGGING ..................', initialCandle, candles.length) - TS.projects.algorithmicTrading.functionLibraries.sessionFunctions.stopSession(processIndex, 'Data is not up-to-date enough. Please start the Data Mining Operation.') + TS.projects.foundations.functionLibraries.sessionFunctions.stopSession(processIndex, 'Data is not up-to-date enough. Please start the Data Mining Operation.') TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[IMPORTANT] runSimulation -> Data is not up-to-date enough. Stopping the Session now. ') return @@ -253,7 +253,7 @@ exports.newAlgorithmicTradingBotModulesTradingSimulation = function (processInde if (checkFinalDatetime() === false) { closeEpisode('Final Datetime Reached') breakLoop = true - TS.projects.algorithmicTrading.functionLibraries.sessionFunctions.stopSession(processIndex, 'Final Datetime Reached') + TS.projects.foundations.functionLibraries.sessionFunctions.stopSession(processIndex, 'Final Datetime Reached') TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[IMPORTANT] runSimulation -> Final Datetime Reached. Stopping the Session now. ') return @@ -262,7 +262,7 @@ exports.newAlgorithmicTradingBotModulesTradingSimulation = function (processInde if (checkMinimunAndMaximunBalance() === false) { closeEpisode('Min or Max Balance Reached') breakLoop = true - TS.projects.algorithmicTrading.functionLibraries.sessionFunctions.stopSession(processIndex, 'Min or Max Balance Reached') + TS.projects.foundations.functionLibraries.sessionFunctions.stopSession(processIndex, 'Min or Max Balance Reached') TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[IMPORTANT] runSimulation -> Min or Max Balance Reached. Stopping the Session now. ') return diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js index 1a3e794f2..a1e1a0de1 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js @@ -24,7 +24,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) { let tradingStrategyModuleObject = TS.projects.algorithmicTrading.botModules.tradingStrategy.newAlgorithmicTradingBotModulesTradingStrategy(processIndex) let tradingPositionModuleObject = TS.projects.algorithmicTrading.botModules.tradingPosition.newAlgorithmicTradingBotModulesTradingPosition(processIndex) let tradingExecutionModuleObject = TS.projects.algorithmicTrading.botModules.tradingExecution.newAlgorithmicTradingBotModulesTradingExecution(processIndex) - let announcementsModuleObject = TS.projects.algorithmicTrading.botModules.announcements.newFoundationsBotModulesAnnouncements(processIndex) + let announcementsModuleObject = TS.projects.foundations.botModules.announcements.newFoundationsBotModulesAnnouncements(processIndex) let snapshotsModuleObject = TS.projects.algorithmicTrading.botModules.snapshots.newAlgorithmicTradingBotModulesSnapshots(processIndex) let tradingEpisodeModuleObject = TS.projects.algorithmicTrading.botModules.tradingEpisode.newAlgorithmicTradingBotModulesTradingEpisode(processIndex) diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/TradingSession.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/TradingSession.js index 0bdf53185..d9d3586ee 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/TradingSession.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/TradingSession.js @@ -162,12 +162,12 @@ } function onSessionStop() { - TS.projects.algorithmicTrading.functionLibraries.sessionFunctions.stopSession(processIndex, 'Session Stopped From the User Interface.') + TS.projects.foundations.functionLibraries.sessionFunctions.stopSession(processIndex, 'Session Stopped From the User Interface.') } function onSessionResume(message) { try { - if (TS.projects.algorithmicTrading.functionLibraries.sessionFunctions.stopSession === undefined) { + if (TS.projects.foundations.functionLibraries.sessionFunctions.stopSession === undefined) { TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_INSTANCE_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[WARN] onSessionResume -> Event received to resume the Session that have never be ran before. ") return diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Announcements/TelegramBot.js b/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Announcements/TelegramBot.js index 66a820998..5fe10448c 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Announcements/TelegramBot.js +++ b/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Announcements/TelegramBot.js @@ -30,7 +30,7 @@ exports.newFoundationsBotModulesTelegramBot = function (processIndex) { '• Use /stop to stop the session.\n' + '• Use /help to receive this help message.\n\n' + 'Additional commands can be configured using the Social Bot Command node.')) - thisObject.telegramBot.command('stop', (ctx) => TS.projects.algorithmicTrading.functionLibraries.sessionFunctions.stopSession(processIndex, 'by command from Telegram.')) + thisObject.telegramBot.command('stop', (ctx) => TS.projects.foundations.functionLibraries.sessionFunctions.stopSession(processIndex, 'by command from Telegram.')) /* Set up additional commands for each Social Bot Command node */ if(commands !== undefined) { diff --git a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js index 0eafc7a19..fdc974f86 100644 --- a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js +++ b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js @@ -66,7 +66,7 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { for (let j = 0; j < plugins.pluginProjects.length; j++) { let project = plugins.pluginProjects[j] /* - Foundations Plugin Types + Miscelaneours Plugin Types */ if (project.pluginDataMines !== undefined) { totalPlugin = totalPlugin + project.pluginDataMines.pluginFiles.length @@ -84,6 +84,9 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { totalPlugin = totalPlugin + project.pluginTradingEngines.pluginFiles.length pluginAllTheseFiles(project.pluginTradingEngines.pluginFiles, 'Trading-Engines') } + /* + Foundations Plugin Types + */ if (project.pluginLearningMines !== undefined) { totalPlugin = totalPlugin + project.pluginLearningMines.pluginFiles.length pluginAllTheseFiles(project.pluginLearningMines.pluginFiles, 'Learning-Mines') @@ -451,6 +454,15 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { node.project = "Data-Mining" } + if ( + node.type === 'Trading Engine' || + node.type === 'Trading Mine' || + node.type === 'Trading System' || + node.type === 'Trading Bot' + ) { + node.project = "Algorithmic-Trading" + } + if ( node.type === 'Plugins' || node.type === 'Plugin Tutorials' || From 82450bf9c7700ed9705e443bb20b0d3f85bf3313 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 27 Sep 2021 19:02:48 +0200 Subject: [PATCH 18/82] Bug Fixed --- .../ReferenceAttachDetach.js | 15 +- Projects/ProjectsSchema.json | 304 +++++++++--------- 2 files changed, 160 insertions(+), 159 deletions(-) diff --git a/Projects/Foundations/UI/Function-Libraries/ReferenceAttachDetach.js b/Projects/Foundations/UI/Function-Libraries/ReferenceAttachDetach.js index 0e82a6356..60c293b6a 100644 --- a/Projects/Foundations/UI/Function-Libraries/ReferenceAttachDetach.js +++ b/Projects/Foundations/UI/Function-Libraries/ReferenceAttachDetach.js @@ -8,9 +8,9 @@ function newFoundationsFunctionLibraryReferenceAttachDetach() { return thisObject function referenceDetachNode(node) { - cleanAttachNodePath(node) - completeDetachment(node) - + cleanAttachNodePath(node) + completeDetachment(node) + } function referenceAttachNode(node, attachToNode) { @@ -20,18 +20,19 @@ function newFoundationsFunctionLibraryReferenceAttachDetach() { // Store the path to the reference parent to make restoring it possible if the reference parent is updated and given a new id function storeAttachNodePath(node, attachToNode) { + if (node.payload === undefined) { return } let attachNodePath = UI.projects.foundations.utilities.hierarchy.getNodeNameTypePath(attachToNode) // Remove unused node id, and project tag from stored path - for (let i = 0; i < attachNodePath.length; i++ ) { - attachNodePath[i].splice(2,2) + for (let i = 0; i < attachNodePath.length; i++) { + attachNodePath[i].splice(2, 2) } - + // Save attach path to active payload node.payload.referenceParentCombinedNodePath = attachNodePath } // Clear the path to reference parent when the reference is cleared - function cleanAttachNodePath(node){ + function cleanAttachNodePath(node) { if (node.payload !== undefined) { node.payload.referenceParentCombinedNodePath = undefined if (node.savedPayload !== undefined) { diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index c15a8f1dd..82866429e 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -1,4 +1,156 @@ [ + { + "name": "Algorithmic-Trading", + "propertyName": "algorithmicTrading", + "UI": { + "functionLibraries": [ + { + "name": "Trading Session Functions", + "propertyName": "tradingSessionFunctions", + "functionName": "newAlgorithmicTradingFunctionLibraryTradingSessionFunctions" + } + ] + }, + "TS": { + "botModules": [ + { + "name": "Single Market Trading Bot", + "propertyName": "singleMarketTradingBot", + "functionName": "newAlgorithmicTradingBotModulesSingleMarketTradingBot", + "fileName": "SingleMarketTradingBot.js", + "folderName": "Trading-Bot", + "botType": "Trading Bot" + }, + { + "name": "Trading Session", + "propertyName": "tradingSession", + "functionName": "newAlgorithmicTradingBotModulesTradingSession", + "fileName": "TradingSession.js", + "folderName": "Trading-Bot" + }, + { + "name": "Trading Process", + "propertyName": "tradingProcess", + "functionName": "newAlgorithmicTradingBotModulesTradingProcess", + "fileName": "TradingProcess.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Engine", + "propertyName": "tradingEngine", + "functionName": "newAlgorithmicTradingBotModulesTradingEngine", + "fileName": "TradingEngine.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Output", + "propertyName": "tradingOutput", + "functionName": "newAlgorithmicTradingBotModulesTradingOutput", + "fileName": "TradingOutput.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Simulation", + "propertyName": "tradingSimulation", + "functionName": "newAlgorithmicTradingBotModulesTradingSimulation", + "fileName": "TradingSimulation.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Episode", + "propertyName": "tradingEpisode", + "functionName": "newAlgorithmicTradingBotModulesTradingEpisode", + "fileName": "TradingEpisode.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Records", + "propertyName": "tradingRecords", + "functionName": "newAlgorithmicTradingBotModulesTradingRecords", + "fileName": "TradingRecords.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading System", + "propertyName": "tradingSystem", + "functionName": "newAlgorithmicTradingBotModulesTradingSystem", + "fileName": "TradingSystem.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Stages", + "propertyName": "tradingStages", + "functionName": "newAlgorithmicTradingBotModulesTradingStages", + "fileName": "TradingStages.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Strategy", + "propertyName": "tradingStrategy", + "functionName": "newAlgorithmicTradingBotModulesTradingStrategy", + "fileName": "TradingStrategy.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Execution", + "propertyName": "tradingExecution", + "functionName": "newAlgorithmicTradingBotModulesTradingExecution", + "fileName": "TradingExecution.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Position", + "propertyName": "tradingPosition", + "functionName": "newAlgorithmicTradingBotModulesTradingPosition", + "fileName": "TradingPosition.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Snapshots", + "propertyName": "snapshots", + "functionName": "newAlgorithmicTradingBotModulesSnapshots", + "fileName": "Snapshots.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Orders", + "propertyName": "tradingOrders", + "functionName": "newAlgorithmicTradingBotModulesTradingOrders", + "fileName": "TradingOrders.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Orders Simulations", + "propertyName": "ordersSimulations", + "functionName": "newAlgorithmicTradingBotModulesOrdersSimulations", + "fileName": "OrdersSimulations.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Orders Calculations", + "propertyName": "ordersCalculations", + "functionName": "newAlgorithmicTradingBotModulesOrdersCalculations", + "fileName": "OrdersCalculations.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Exchange API", + "propertyName": "exchangeAPI", + "functionName": "newAlgorithmicTradingBotModulesExchangeAPI", + "fileName": "ExchangeAPI.js", + "folderName": "Trading-Bot/Low-Frequency-Trading/APIs" + } + ] + }, + "plugins": [ + "Trading Mines", + "Trading Systems", + "Trading Engines" + ], + "tasks": [ + "Trading Tasks" + ] + }, { "name": "Foundations", "propertyName": "foundations", @@ -799,158 +951,6 @@ "Data Tasks" ] }, - { - "name": "Algorithmic-Trading", - "propertyName": "algorithmicTrading", - "UI": { - "functionLibraries": [ - { - "name": "Trading Session Functions", - "propertyName": "tradingSessionFunctions", - "functionName": "newAlgorithmicTradingFunctionLibraryTradingSessionFunctions" - } - ] - }, - "TS": { - "botModules": [ - { - "name": "Single Market Trading Bot", - "propertyName": "singleMarketTradingBot", - "functionName": "newAlgorithmicTradingBotModulesSingleMarketTradingBot", - "fileName": "SingleMarketTradingBot.js", - "folderName": "Trading-Bot", - "botType": "Trading Bot" - }, - { - "name": "Trading Session", - "propertyName": "tradingSession", - "functionName": "newAlgorithmicTradingBotModulesTradingSession", - "fileName": "TradingSession.js", - "folderName": "Trading-Bot" - }, - { - "name": "Trading Process", - "propertyName": "tradingProcess", - "functionName": "newAlgorithmicTradingBotModulesTradingProcess", - "fileName": "TradingProcess.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Engine", - "propertyName": "tradingEngine", - "functionName": "newAlgorithmicTradingBotModulesTradingEngine", - "fileName": "TradingEngine.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Output", - "propertyName": "tradingOutput", - "functionName": "newAlgorithmicTradingBotModulesTradingOutput", - "fileName": "TradingOutput.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Simulation", - "propertyName": "tradingSimulation", - "functionName": "newAlgorithmicTradingBotModulesTradingSimulation", - "fileName": "TradingSimulation.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Episode", - "propertyName": "tradingEpisode", - "functionName": "newAlgorithmicTradingBotModulesTradingEpisode", - "fileName": "TradingEpisode.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Records", - "propertyName": "tradingRecords", - "functionName": "newAlgorithmicTradingBotModulesTradingRecords", - "fileName": "TradingRecords.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading System", - "propertyName": "tradingSystem", - "functionName": "newAlgorithmicTradingBotModulesTradingSystem", - "fileName": "TradingSystem.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Stages", - "propertyName": "tradingStages", - "functionName": "newAlgorithmicTradingBotModulesTradingStages", - "fileName": "TradingStages.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Strategy", - "propertyName": "tradingStrategy", - "functionName": "newAlgorithmicTradingBotModulesTradingStrategy", - "fileName": "TradingStrategy.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Execution", - "propertyName": "tradingExecution", - "functionName": "newAlgorithmicTradingBotModulesTradingExecution", - "fileName": "TradingExecution.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Position", - "propertyName": "tradingPosition", - "functionName": "newAlgorithmicTradingBotModulesTradingPosition", - "fileName": "TradingPosition.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Snapshots", - "propertyName": "snapshots", - "functionName": "newAlgorithmicTradingBotModulesSnapshots", - "fileName": "Snapshots.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Orders", - "propertyName": "tradingOrders", - "functionName": "newAlgorithmicTradingBotModulesTradingOrders", - "fileName": "TradingOrders.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Orders Simulations", - "propertyName": "ordersSimulations", - "functionName": "newAlgorithmicTradingBotModulesOrdersSimulations", - "fileName": "OrdersSimulations.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Orders Calculations", - "propertyName": "ordersCalculations", - "functionName": "newAlgorithmicTradingBotModulesOrdersCalculations", - "fileName": "OrdersCalculations.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Exchange API", - "propertyName": "exchangeAPI", - "functionName": "newAlgorithmicTradingBotModulesExchangeAPI", - "fileName": "ExchangeAPI.js", - "folderName": "Trading-Bot/Low-Frequency-Trading/APIs" - } - ] - }, - "plugins": [ - "Trading Mines", - "Trading Systems", - "Trading Engines" - ], - "tasks": [ - "Trading Tasks" - ] - }, { "name": "Community-Plugins", "propertyName": "communityPlugins", From 16d5e00fc3791efd4fb0165da164d504d447f9e4 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 27 Sep 2021 22:08:21 +0200 Subject: [PATCH 19/82] Bug Fixed --- .../UI/Function-Libraries/UiObjectsFromNodes.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js index fdc974f86..ed280a4e0 100644 --- a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js +++ b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js @@ -202,7 +202,7 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { config.codeName = name receivedNode.config = JSON.stringify(config) - if (pluginFile.pluginFilePosition !== undefined) { + if (pluginFile.pluginFilePosition !== undefined && receivedNode.savedPayload !== undefined) { let positionOffset = { x: pluginFile.pluginFilePosition.savedPayload.position.x - receivedNode.savedPayload.position.x, y: pluginFile.pluginFilePosition.savedPayload.position.y - receivedNode.savedPayload.position.y @@ -449,7 +449,7 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { node.type === 'Data Mine' || node.type === 'API Data Fetcher Bot' || node.type === 'Indicator Bot' || - node.type === 'Sensor Bot' + node.type === 'Sensor Bot' ) { node.project = "Data-Mining" } @@ -458,7 +458,7 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { node.type === 'Trading Engine' || node.type === 'Trading Mine' || node.type === 'Trading System' || - node.type === 'Trading Bot' + node.type === 'Trading Bot' ) { node.project = "Algorithmic-Trading" } @@ -476,7 +476,7 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { node.type === 'Plugin File' || node.type === 'Plugin File Position' || node.type === 'Plugin Data Mines' || - node.type === 'Plugin API Maps' + node.type === 'Plugin API Maps' ) { node.project = "Community-Plugins" } From b20559057dc79077a5d91e229019f09d0a584bc4 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 28 Sep 2021 12:39:32 +0200 Subject: [PATCH 20/82] Update Getting-Started-Tutorials.json --- .../Workspaces/Getting-Started-Tutorials.json | 1967 +++++++++-------- 1 file changed, 988 insertions(+), 979 deletions(-) diff --git a/Projects/Foundations/Plugins/Workspaces/Getting-Started-Tutorials.json b/Projects/Foundations/Plugins/Workspaces/Getting-Started-Tutorials.json index 2d0c7b7e4..a6eb574dc 100644 --- a/Projects/Foundations/Plugins/Workspaces/Getting-Started-Tutorials.json +++ b/Projects/Foundations/Plugins/Workspaces/Getting-Started-Tutorials.json @@ -1,6 +1,6 @@ { "type": "Workspace", - "name": "Getting Started Tutorials", + "name": "Getting-Started-Tutorials", "config": "{\n \"docsLanguage\": \"EN\",\n \"contributionsBranch\": \"develop\"\n}", "rootNodes": [ { @@ -20,7 +20,7 @@ "projectDataTasks": [ { "type": "Project Data Tasks", - "name": "Foundations", + "name": "Data-Mining", "project": "Foundations", "exchangeDataTasks": [ { @@ -87,13 +87,13 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ "Resistances and Supports", "Indicator Bot", - "Foundations", + "Data-Mining", "d88356a2-36cc-4bdc-ac10-01b8643352c2" ], [ @@ -139,13 +139,13 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ "Resistances and Supports", "Indicator Bot", - "Foundations", + "Data-Mining", "d88356a2-36cc-4bdc-ac10-01b8643352c2" ], [ @@ -259,7 +259,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ] ] @@ -319,13 +319,13 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ "Exchange Raw Data", "Sensor Bot", - "Foundations", + "Data-Mining", "af924204-66a2-47d4-9910-66ab78acb06f" ], [ @@ -428,13 +428,13 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ "Candles Volumes", "Indicator Bot", - "Foundations", + "Data-Mining", "285a4618-0423-4ac9-9df9-7a78be6fd915" ], [ @@ -480,13 +480,13 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ "Candles Volumes", "Indicator Bot", - "Foundations", + "Data-Mining", "285a4618-0423-4ac9-9df9-7a78be6fd915" ], [ @@ -600,7 +600,7 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ] ] @@ -740,21 +740,21 @@ }, "referenceParent": { "type": "Project Definition", - "name": "Foundations", - "id": "a2a04e12-604e-43f8-a986-1b8ca3b043cb" + "name": "Data-Mining", + "id": "588e6946-31d9-4389-8cf2-37715795ba4d" }, "referenceParentCombinedNodePath": [ [ - "New Foundations Project", - "Foundations Project", - "Foundations", - "cf9f8b3b-77c6-43c6-b01f-95cf366a91f6" + "Getting Started Tutorials", + "Workspace" ], [ - "Foundations", - "Project Definition", - "Foundations", - "a2a04e12-604e-43f8-a986-1b8ca3b043cb" + "New Data-Mining Project", + "Data-Mining Project" + ], + [ + "Data-Mining", + "Project Definition" ] ] } @@ -986,7 +986,7 @@ "projectTradingTasks": [ { "type": "Project Trading Tasks", - "name": "Foundations", + "name": "Algorithmic-Trading", "project": "Foundations", "exchangeTradingTasks": [ { @@ -1340,7 +1340,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ] ] @@ -1380,7 +1380,7 @@ [ "Low-Frequency", "Trading Engine", - "Foundations", + "Algorithmic-Trading", "eb20f622-71bf-4479-a574-d2320e1d4bd1" ] ] @@ -1439,13 +1439,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -1559,7 +1559,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ] ] @@ -1699,21 +1699,21 @@ }, "referenceParent": { "type": "Project Definition", - "name": "Foundations", - "id": "a2a04e12-604e-43f8-a986-1b8ca3b043cb" + "name": "Algorithmic-Trading", + "id": "159d6c95-233b-4d79-8fe0-b1d75d40f90b" }, "referenceParentCombinedNodePath": [ [ - "New Foundations Project", - "Foundations Project", - "Foundations", - "cf9f8b3b-77c6-43c6-b01f-95cf366a91f6" + "Getting Started Tutorials", + "Workspace" ], [ - "Foundations", - "Project Definition", - "Foundations", - "a2a04e12-604e-43f8-a986-1b8ca3b043cb" + "New Algorithmic-Trading Project", + "Algorithmic-Trading Project" + ], + [ + "Algorithmic-Trading", + "Project Definition" ] ] } @@ -2075,7 +2075,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ] ] @@ -2115,7 +2115,7 @@ [ "Low-Frequency", "Trading Engine", - "Foundations", + "Algorithmic-Trading", "eb20f622-71bf-4479-a574-d2320e1d4bd1" ] ] @@ -2174,13 +2174,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -2370,7 +2370,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ] ] @@ -2622,13 +2622,13 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ "Resistances and Supports", "Indicator Bot", - "Foundations", + "Data-Mining", "d88356a2-36cc-4bdc-ac10-01b8643352c2" ], [ @@ -2674,13 +2674,13 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ "Resistances and Supports", "Indicator Bot", - "Foundations", + "Data-Mining", "d88356a2-36cc-4bdc-ac10-01b8643352c2" ], [ @@ -2748,7 +2748,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ] ] @@ -2798,13 +2798,13 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ "Exchange Raw Data", "Sensor Bot", - "Foundations", + "Data-Mining", "af924204-66a2-47d4-9910-66ab78acb06f" ], [ @@ -2850,13 +2850,13 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ "Exchange Raw Data", "Sensor Bot", - "Foundations", + "Data-Mining", "af924204-66a2-47d4-9910-66ab78acb06f" ], [ @@ -2932,13 +2932,13 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ "Candles Volumes", "Indicator Bot", - "Foundations", + "Data-Mining", "285a4618-0423-4ac9-9df9-7a78be6fd915" ], [ @@ -2984,13 +2984,13 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ "Candles Volumes", "Indicator Bot", - "Foundations", + "Data-Mining", "285a4618-0423-4ac9-9df9-7a78be6fd915" ], [ @@ -3058,7 +3058,7 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ] ] @@ -3323,13 +3323,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3387,13 +3387,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3451,13 +3451,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3515,13 +3515,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3579,13 +3579,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3643,13 +3643,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3707,13 +3707,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3771,13 +3771,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3865,13 +3865,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3929,13 +3929,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4023,13 +4023,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4087,13 +4087,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4151,13 +4151,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4215,13 +4215,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4309,13 +4309,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4373,13 +4373,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4437,13 +4437,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4501,13 +4501,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4595,13 +4595,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4659,13 +4659,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4723,13 +4723,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4787,13 +4787,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4851,13 +4851,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4915,13 +4915,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5033,13 +5033,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5091,13 +5091,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5149,13 +5149,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5207,13 +5207,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5265,13 +5265,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5323,13 +5323,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5381,13 +5381,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5439,13 +5439,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5497,13 +5497,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5585,13 +5585,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5643,13 +5643,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5708,13 +5708,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5772,13 +5772,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5836,13 +5836,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5900,13 +5900,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5994,13 +5994,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6058,13 +6058,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6122,13 +6122,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6186,13 +6186,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6280,13 +6280,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6344,13 +6344,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6408,13 +6408,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6472,13 +6472,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6536,13 +6536,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6670,7 +6670,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ] ] @@ -6723,7 +6723,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -6841,13 +6841,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6905,13 +6905,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6969,13 +6969,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7033,13 +7033,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7097,13 +7097,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7161,13 +7161,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7225,13 +7225,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7289,13 +7289,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7383,13 +7383,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7447,13 +7447,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7541,13 +7541,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7605,13 +7605,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7669,13 +7669,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7733,13 +7733,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7827,13 +7827,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7891,13 +7891,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7955,13 +7955,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8019,13 +8019,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8113,13 +8113,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8177,13 +8177,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8241,13 +8241,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8305,13 +8305,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8369,13 +8369,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8433,13 +8433,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8551,13 +8551,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8609,13 +8609,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8667,13 +8667,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8725,13 +8725,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8783,13 +8783,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8841,13 +8841,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8899,13 +8899,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8957,13 +8957,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9015,13 +9015,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9103,13 +9103,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9161,13 +9161,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9226,13 +9226,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9290,13 +9290,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9354,13 +9354,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9418,13 +9418,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9512,13 +9512,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9576,13 +9576,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9640,13 +9640,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9704,13 +9704,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9798,13 +9798,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9862,13 +9862,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9926,13 +9926,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9990,13 +9990,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -10054,13 +10054,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -10188,7 +10188,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ] ] @@ -24324,7 +24324,7 @@ "viewport": { "type": "Viewport", "name": "New Viewport", - "config": "{\"zoom\":\"0.00\"}", + "config": "{\"zoom\":\"1.40\"}", "project": "Foundations", "id": "01713f1d-91b8-44f9-9c5d-a0c12fd09037", "savedPayload": { @@ -24349,8 +24349,8 @@ }, "frame": { "position": { - "x": 828.4999999999999, - "y": 194.0257847533632 + "x": 40, + "y": -1445 } } } @@ -24426,7 +24426,7 @@ "timeScale": { "type": "Time Scale", "name": "New Time Scale", - "config": "{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"fromDate\": \"2020-01-01T00:00:00.000Z\",\n \"toDate\": \"2021-08-24T23:59:59.999Z\"\n}", + "config": "{\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"fromDate\": \"2020-08-31T22:29:46.517Z\",\n \"toDate\": \"2020-09-01T04:17:38.377Z\"\n}", "project": "Foundations", "id": "b12b6892-52a3-4bf8-a1d9-85bfe72d2f44", "savedPayload": { @@ -24454,7 +24454,7 @@ "rateScale": { "type": "Rate Scale", "name": "New Rate Scale", - "config": "{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"minValue\": 3744.3087,\n \"maxValue\": 65502.54\n}", + "config": "{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"minValue\": 11394.7713,\n \"maxValue\": 11900.161607250002\n}", "project": "Foundations", "id": "c6d395a1-dfb0-438b-b7be-64fa1a53fe5e", "savedPayload": { @@ -24482,7 +24482,7 @@ "timeFrameScale": { "type": "Time Frame Scale", "name": "New Time Frame Scale", - "config": "{\"value\":\"24-hs\"}", + "config": "{\"value\":\"01-min\"}", "project": "Foundations", "id": "9ac80476-a542-4d74-bf7a-7e55c754887a", "savedPayload": { @@ -24581,7 +24581,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -24768,7 +24768,7 @@ { "type": "Layer", "name": "Trading Episode Statistics", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"on\",\n \"showPanels\": false\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -24810,7 +24810,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -24997,7 +24997,7 @@ { "type": "Layer", "name": "Episode Candle", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"on\"\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -25208,7 +25208,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -29270,7 +29270,7 @@ { "type": "Layer", "name": "Trading System Highlights", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"on\"\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -29433,7 +29433,7 @@ { "type": "Layer", "name": "Trading System Values", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"on\"\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -29596,7 +29596,7 @@ { "type": "Layer", "name": "Trading System Status", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"on\"\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -30744,7 +30744,7 @@ "layerManager": { "type": "Layer Manager", "name": "Masters", - "config": "{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}", + "config": "{\n \"visibleLayers\": 1,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}", "project": "Foundations", "layers": [], "botLayers": [ @@ -30762,7 +30762,7 @@ { "type": "Layer", "name": "Episodes", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"on\",\n \"showPanels\": false\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -30804,7 +30804,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -30863,7 +30863,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -30922,7 +30922,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31010,7 +31010,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31075,7 +31075,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31140,7 +31140,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31205,7 +31205,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31364,7 +31364,7 @@ { "type": "Layer", "name": "Strategies", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"off\",\n \"showPanels\": true\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -31406,7 +31406,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31494,7 +31494,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31559,7 +31559,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31624,7 +31624,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31689,7 +31689,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31897,7 +31897,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31956,7 +31956,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32015,7 +32015,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32074,7 +32074,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32162,7 +32162,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32369,7 +32369,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32428,7 +32428,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32487,7 +32487,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32546,7 +32546,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32634,7 +32634,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32841,7 +32841,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32900,7 +32900,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32959,7 +32959,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33018,7 +33018,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33106,7 +33106,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33171,7 +33171,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33236,7 +33236,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33443,7 +33443,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33502,7 +33502,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33561,7 +33561,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33620,7 +33620,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33708,7 +33708,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33773,7 +33773,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33838,7 +33838,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34075,7 +34075,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34163,7 +34163,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34228,7 +34228,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34293,7 +34293,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34358,7 +34358,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34523,7 +34523,7 @@ { "type": "Layer", "name": "Open Stages", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"off\",\n \"showPanels\": true\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -34565,7 +34565,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34653,7 +34653,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34718,7 +34718,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34783,7 +34783,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34848,7 +34848,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35013,7 +35013,7 @@ { "type": "Layer", "name": "Manage Stages", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"off\",\n \"showPanels\": true\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -35055,7 +35055,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35143,7 +35143,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35208,7 +35208,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35273,7 +35273,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35338,7 +35338,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35545,7 +35545,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35633,7 +35633,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35698,7 +35698,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35763,7 +35763,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35828,7 +35828,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36065,7 +36065,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36124,7 +36124,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36212,7 +36212,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36277,7 +36277,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36484,7 +36484,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36572,7 +36572,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36637,7 +36637,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36702,7 +36702,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36909,7 +36909,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36997,7 +36997,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -37062,7 +37062,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -37127,7 +37127,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -37334,7 +37334,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -37422,7 +37422,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -37629,7 +37629,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -37717,7 +37717,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -37980,7 +37980,7 @@ "y": 80 }, "width": 150, - "height": 40, + "height": 120, "radius": 0 }, "referenceParent": { @@ -38076,7 +38076,7 @@ "layerManager": { "type": "Layer Manager", "name": "Masters", - "config": "{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}", + "config": "{\n \"visibleLayers\": 2,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}", "project": "Foundations", "layers": [], "botLayers": [ @@ -38088,7 +38088,7 @@ { "type": "Layer", "name": "Resistances", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"on\",\n \"showPanels\": true\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -38130,7 +38130,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38189,7 +38189,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38248,7 +38248,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38336,7 +38336,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38401,7 +38401,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38466,7 +38466,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38531,7 +38531,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38596,7 +38596,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38661,7 +38661,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38726,7 +38726,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38791,7 +38791,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38856,7 +38856,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38921,7 +38921,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38986,7 +38986,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39175,7 +39175,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39234,7 +39234,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39293,7 +39293,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39381,7 +39381,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39446,7 +39446,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39511,7 +39511,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39576,7 +39576,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39641,7 +39641,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39706,7 +39706,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39771,7 +39771,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39836,7 +39836,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39901,7 +39901,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39966,7 +39966,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -40031,7 +40031,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -40228,7 +40228,7 @@ "y": 80 }, "width": 150, - "height": 40, + "height": 190, "radius": 0 }, "referenceParent": { @@ -40401,7 +40401,7 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ @@ -40612,7 +40612,7 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ @@ -40970,7 +40970,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -41242,7 +41242,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -41471,7 +41471,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -41869,7 +41869,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -47465,7 +47465,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -47524,7 +47524,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -47583,7 +47583,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -47671,7 +47671,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -47736,7 +47736,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -47801,7 +47801,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -47866,7 +47866,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48067,7 +48067,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48155,7 +48155,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48220,7 +48220,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48285,7 +48285,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48350,7 +48350,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48558,7 +48558,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48617,7 +48617,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48676,7 +48676,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48735,7 +48735,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48823,7 +48823,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49030,7 +49030,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49089,7 +49089,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49148,7 +49148,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49207,7 +49207,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49295,7 +49295,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49502,7 +49502,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49561,7 +49561,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49620,7 +49620,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49679,7 +49679,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49767,7 +49767,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49832,7 +49832,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49897,7 +49897,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50104,7 +50104,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50163,7 +50163,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50222,7 +50222,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50281,7 +50281,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50369,7 +50369,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50434,7 +50434,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50499,7 +50499,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50736,7 +50736,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50824,7 +50824,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50889,7 +50889,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50954,7 +50954,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51019,7 +51019,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51226,7 +51226,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51314,7 +51314,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51379,7 +51379,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51444,7 +51444,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51509,7 +51509,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51716,7 +51716,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51804,7 +51804,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51869,7 +51869,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51934,7 +51934,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51999,7 +51999,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52206,7 +52206,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52294,7 +52294,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52359,7 +52359,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52424,7 +52424,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52489,7 +52489,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52726,7 +52726,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52785,7 +52785,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52873,7 +52873,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52938,7 +52938,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53145,7 +53145,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53233,7 +53233,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53298,7 +53298,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53363,7 +53363,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53570,7 +53570,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53658,7 +53658,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53723,7 +53723,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53788,7 +53788,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53995,7 +53995,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -54083,7 +54083,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -54290,7 +54290,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -54378,7 +54378,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -54791,7 +54791,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -54850,7 +54850,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -54909,7 +54909,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -54997,7 +54997,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55062,7 +55062,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55127,7 +55127,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55192,7 +55192,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55257,7 +55257,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55322,7 +55322,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55387,7 +55387,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55452,7 +55452,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55517,7 +55517,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55582,7 +55582,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55647,7 +55647,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55836,7 +55836,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55895,7 +55895,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55954,7 +55954,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56042,7 +56042,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56107,7 +56107,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56172,7 +56172,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56237,7 +56237,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56302,7 +56302,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56367,7 +56367,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56432,7 +56432,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56497,7 +56497,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56562,7 +56562,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56627,7 +56627,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56692,7 +56692,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -57062,7 +57062,7 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ @@ -57273,7 +57273,7 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ @@ -57807,204 +57807,38 @@ { "type": "Plugins", "name": "New Plugins", - "project": "Foundations", + "project": "Community-Plugins", "pluginProjects": [ { "type": "Plugin Project", - "name": "Foundations", - "config": "{ \n \"codeName\": \"Foundations\"\n}", - "project": "Foundations", - "pluginDataMines": { - "type": "Plugin Data Mines", - "name": "New Plugin Data Mines", - "project": "Foundations", - "pluginFiles": [ - { - "type": "Plugin File", - "name": "Masters", - "config": "{\n\"codeName\": \"\"\n}", - "project": "Foundations", - "pluginFilePosition": { - "type": "Plugin File Position", - "name": "Masters", - "project": "Foundations", - "id": "d5234bd2-ef4e-4856-a6a0-ce7659653a48", - "savedPayload": { - "position": { - "x": 18879.35218735615, - "y": 18688.55301821844 - }, - "targetPosition": { - "x": 31521.72973529933, - "y": 18212.746239098742 - }, - "floatingObject": { - "isPinned": true, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "ecc1a524-de9b-4e73-8874-b99a7ea0402b", - "savedPayload": { - "position": { - "x": 31521.72973529933, - "y": 18212.746239098742 - }, - "targetPosition": { - "x": 31744.673182942548, - "y": 18413.4854210064 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - { - "type": "Plugin File", - "name": "Candles", - "config": "{\n\"codeName\": \"\"\n}", - "project": "Foundations", - "pluginFilePosition": { - "type": "Plugin File Position", - "name": "Candles", - "project": "Foundations", - "id": "f2d06aec-536a-4af1-872d-681bf8cdeb12", - "savedPayload": { - "position": { - "x": 31037.420197433203, - "y": 18670.84686056612 - }, - "targetPosition": { - "x": 31807.046690187875, - "y": 18120.04114078626 - }, - "floatingObject": { - "isPinned": true, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "3ee7e2da-8c0a-4efe-a354-233c881fdb82", - "savedPayload": { - "position": { - "x": 31807.046690187875, - "y": 18120.04114078626 - }, - "targetPosition": { - "x": 31744.673182942548, - "y": 18413.4854210064 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - } - ], - "id": "cbc3d9be-5e59-45d8-bb0f-4ec82763691d", - "savedPayload": { - "position": { - "x": 37341.67318294255, - "y": 10582.466800207203 - }, - "targetPosition": { - "x": 37584.378281255034, - "y": 10758.802375894946 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": true, - "angleToParent": 1, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, + "name": "Algorithmic-Trading", + "config": "{\"codeName\":\"Algorithmic-Trading\"}", + "project": "Community-Plugins", "pluginTradingMines": { "type": "Plugin Trading Mines", "name": "New Plugin Trading Mines", - "project": "Foundations", + "project": "Community-Plugins", "pluginFiles": [ { "type": "Plugin File", "name": "Masters", - "config": "{\n\"codeName\": \"\"\n}", - "project": "Foundations", - "pluginFilePosition": { - "type": "Plugin File Position", - "name": "Masters", - "project": "Foundations", - "id": "ad1ce785-858f-4cfc-ba68-108b5e0c54d9", - "savedPayload": { - "position": { - "x": 24986.217404066585, - "y": 18713.893045797242 - }, - "targetPosition": { - "x": 37398.96808463006, - "y": 10188.168466117855 - }, - "floatingObject": { - "isPinned": true, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "8a64c00e-4f8c-49bf-b57d-4e2e388bae41", + "config": "{\"project\":\"Algorithmic-Trading\",\"fileName\":\"Masters\",\"folderName\":\"Trading-Mines\",\"nodeType\":\"Trading Mine\",\"saveWithWorkspace\":false}", + "project": "Community-Plugins", + "id": "68bdcf8f-5b90-4683-bd24-0cbb90649cea", "savedPayload": { "position": { - "x": 37398.96808463006, - "y": 10188.168466117855 + "x": 38008.64234996696, + "y": 10334.538307183018 }, "targetPosition": { - "x": 37491.67318294255, - "y": 10473.4854210064 + "x": 37796.510315611, + "y": 10546.670341538982 }, "floatingObject": { "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 1, + "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 }, @@ -58014,39 +57848,11 @@ } } ], - "id": "8d881813-3ab9-4e8b-ab5a-48dedab2dd19", + "id": "b784724f-9692-4365-8e01-032158248fc4", "savedPayload": { "position": { - "x": 37491.67318294255, - "y": 10473.4854210064 - }, - "targetPosition": { - "x": 37584.378281255034, - "y": 10758.802375894946 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": true, - "angleToParent": 1, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "pluginLearningMines": { - "type": "Plugin Learning Mines", - "name": "New Plugin Learning Mines", - "project": "Foundations", - "pluginFiles": [], - "id": "980ba5ef-6bd2-4f92-becb-348b591d147b", - "savedPayload": { - "position": { - "x": 37677.08337956752, - "y": 10473.4854210064 + "x": 37796.510315611, + "y": 10546.670341538982 }, "targetPosition": { "x": 37584.378281255034, @@ -58056,7 +57862,7 @@ "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 1, + "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 }, @@ -58068,49 +57874,22 @@ "pluginTradingSystems": { "type": "Plugin Trading Systems", "name": "New Plugin Trading Systems", - "project": "Foundations", + "project": "Community-Plugins", "pluginFiles": [ { "type": "Plugin File", "name": "Masters-Lightning-Strike", - "config": "{\n\"codeName\": \"\"\n}", - "project": "Foundations", - "pluginFilePosition": { - "type": "Plugin File Position", - "name": "Masters-Lightning-Strike", - "project": "Foundations", - "id": "37ab4b0d-6bd8-46b6-9778-e193c32669a4", - "savedPayload": { - "position": { - "x": 31050.365708673427, - "y": 31068.826468868458 - }, - "targetPosition": { - "x": 38069.78847788001, - "y": 10406.13122451946 - }, - "floatingObject": { - "isPinned": true, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "5fdcecee-8c8f-4e0f-b36b-81e9231970a6", + "config": "{\"project\":\"Algorithmic-Trading\",\"fileName\":\"Masters-Lightning-Strike\",\"folderName\":\"Trading-Systems\",\"nodeType\":\"Trading System\",\"saveWithWorkspace\":false}", + "project": "Community-Plugins", + "id": "b5c5eed1-ac0e-4f1b-bbe8-9f2d6dcc519b", "savedPayload": { "position": { - "x": 38069.78847788001, - "y": 10406.13122451946 + "x": 38184.378281255034, + "y": 10758.802375894946 }, "targetPosition": { - "x": 37827.08337956752, - "y": 10582.466800207203 + "x": 37884.378281255034, + "y": 10758.802375894946 }, "floatingObject": { "isPinned": false, @@ -58126,35 +57905,7 @@ } } ], - "id": "3569d452-c593-4e54-a356-7ff8c6b519f3", - "savedPayload": { - "position": { - "x": 37827.08337956752, - "y": 10582.466800207203 - }, - "targetPosition": { - "x": 37584.378281255034, - "y": 10758.802375894946 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": true, - "angleToParent": 1, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "pluginLearningSystems": { - "type": "Plugin Learning Systems", - "name": "New Plugin Learning Systems", - "project": "Foundations", - "pluginFiles": [], - "id": "ba0dfd42-a5e6-4a03-9617-f46f0bc5c7a1", + "id": "ed5fbe5f-6957-47d7-b776-f4868b521378", "savedPayload": { "position": { "x": 37884.378281255034, @@ -58168,7 +57919,7 @@ "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 1, + "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 }, @@ -58180,55 +57931,28 @@ "pluginTradingEngines": { "type": "Plugin Trading Engines", "name": "New Plugin Trading Engines", - "project": "Foundations", + "project": "Community-Plugins", "pluginFiles": [ { "type": "Plugin File", "name": "Low-Frequency", - "config": "{\n\"codeName\": \"\"\n}", - "project": "Foundations", - "pluginFilePosition": { - "type": "Plugin File Position", - "name": "Low-Frequency", - "project": "Foundations", - "id": "e117a2a4-09b3-4181-8455-e680de3bdeb3", - "savedPayload": { - "position": { - "x": 30923.55093774257, - "y": 24967.049392142086 - }, - "targetPosition": { - "x": 29820.22642897682, - "y": 18678.80776835817 - }, - "floatingObject": { - "isPinned": true, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "e9270d67-4630-4ac9-91ca-1dec4fb5aa38", + "config": "{\"project\":\"Algorithmic-Trading\",\"fileName\":\"Low-Frequency\",\"folderName\":\"Trading-Engines\",\"nodeType\":\"Trading Engine\",\"saveWithWorkspace\":false}", + "project": "Community-Plugins", + "id": "a584a09f-6d55-4358-8c3a-cd76e6fd4fb2", "savedPayload": { "position": { - "x": 29820.22642897682, - "y": 18678.80776835817 + "x": 38008.64234996696, + "y": 11183.066444606873 }, "targetPosition": { - "x": 30320.32799443869, - "y": 18678.805890109317 + "x": 37796.510315611, + "y": 10970.93441025091 }, "floatingObject": { "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 1, + "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 }, @@ -58238,39 +57962,11 @@ } } ], - "id": "87a28762-63d0-45f7-bd39-9dea436d8244", + "id": "34cd7afd-774b-4340-ab6b-ebcaa61c2d05", "savedPayload": { "position": { - "x": 37827.08337956752, - "y": 10935.137951582688 - }, - "targetPosition": { - "x": 37584.378281255034, - "y": 10758.802375894946 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": true, - "angleToParent": 1, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "pluginLearningEngines": { - "type": "Plugin Learning Engines", - "name": "New Plugin Learning Engines", - "project": "Foundations", - "pluginFiles": [], - "id": "6e8d19f0-51a5-4d7c-857e-3549c553f008", - "savedPayload": { - "position": { - "x": 37677.08337956752, - "y": 11044.119330783491 + "x": 37796.510315611, + "y": 10970.93441025091 }, "targetPosition": { "x": 37584.378281255034, @@ -58280,7 +57976,7 @@ "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 1, + "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 }, @@ -58289,63 +57985,7 @@ } } }, - "pluginTutorials": { - "type": "Plugin Tutorials", - "name": "New Plugin Tutorials", - "project": "Foundations", - "pluginFiles": [], - "id": "dc01958c-5bd4-4941-b790-aec7da3c1638", - "savedPayload": { - "position": { - "x": 37491.67318294255, - "y": 11044.119330783491 - }, - "targetPosition": { - "x": 37584.378281255034, - "y": 10758.802375894946 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "pluginApiMaps": { - "type": "Plugin API Maps", - "name": "New Plugin API Maps", - "project": "Foundations", - "pluginFiles": [], - "id": "b75d5c18-f8d1-47de-aa4b-95040435d094", - "savedPayload": { - "position": { - "x": 37341.67318294255, - "y": 10935.137951582688 - }, - "targetPosition": { - "x": 37584.378281255034, - "y": 10758.802375894946 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "c4e402d7-5228-408c-9d67-379d6ef40bae", + "id": "252daf71-559e-4a54-a534-42ec1e7f1a31", "savedPayload": { "position": { "x": 37584.378281255034, @@ -58367,6 +58007,315 @@ "isRunning": false } } + }, + { + "type": "Plugin Project", + "name": "Data-Mining", + "config": "{\"codeName\":\"Data-Mining\"}", + "project": "Community-Plugins", + "pluginDataMines": { + "type": "Plugin Data Mines", + "name": "New Plugin Data Mines", + "project": "Community-Plugins", + "pluginFiles": [ + { + "type": "Plugin File", + "name": "Candles", + "config": "{\n \"project\": \"Data-Mining\",\n \"fileName\": \"Candles\",\n \"folderName\": \"Data-Mines\",\n \"nodeType\": \"Data Mine\",\n \"saveWithWorkspace\": false\n}", + "project": "Community-Plugins", + "id": "868419c3-cd9d-4825-a208-8b7c15be0468", + "savedPayload": { + "position": { + "x": 38039.447273030084, + "y": 11196.569395006949 + }, + "targetPosition": { + "x": 37744.00494712642, + "y": 11144.47494170687 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin File", + "name": "Masters", + "config": "{\"project\":\"Data-Mining\",\"fileName\":\"Masters\",\"folderName\":\"Data-Mines\",\"nodeType\":\"Data Mine\",\"saveWithWorkspace\":false}", + "project": "Community-Plugins", + "id": "9817eb10-418e-4035-aa38-6158d4a2d848", + "savedPayload": { + "position": { + "x": 37846.61099012412, + "y": 11426.382727942642 + }, + "targetPosition": { + "x": 37744.00494712642, + "y": 11144.47494170687 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "42d84322-438f-4219-8b7e-58b1b58de7b0", + "savedPayload": { + "position": { + "x": 37744.00494712642, + "y": 11144.47494170687 + }, + "targetPosition": { + "x": 37514.19161419073, + "y": 10951.638658800908 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "9e34391d-8a7f-465d-aaae-d1aab31d27af", + "savedPayload": { + "position": { + "x": 37514.19161419073, + "y": 10951.638658800908 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Community-Plugins", + "config": "{\"codeName\":\"Community-Plugins\"}", + "project": "Community-Plugins", + "id": "005d0fc0-5d81-4607-856b-32bcb1665b64", + "savedPayload": { + "position": { + "x": 37336.472734555115, + "y": 11054.244701798609 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Ethereum", + "config": "{\"codeName\":\"Ethereum\"}", + "project": "Community-Plugins", + "id": "bddb8fdb-f325-4615-a828-9935d37583ad", + "savedPayload": { + "position": { + "x": 37134.378281255034, + "y": 11018.609997030277 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "TensorFlow", + "config": "{\"codeName\":\"TensorFlow\"}", + "project": "Community-Plugins", + "id": "d6649bf0-8e12-456a-a2d0-a7d4617f6843", + "savedPayload": { + "position": { + "x": 37002.47049501926, + "y": 10861.408418892646 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Education", + "config": "{\"codeName\":\"Education\"}", + "project": "Community-Plugins", + "id": "e72188be-7474-4a0d-85c1-413810bfa807", + "savedPayload": { + "position": { + "x": 37002.47049501926, + "y": 10656.196332897245 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Governance", + "config": "{\"codeName\":\"Governance\"}", + "project": "Community-Plugins", + "id": "5614b71b-9e5f-42b0-a6fb-6322564623ea", + "savedPayload": { + "position": { + "x": 37134.378281255034, + "y": 10498.994754759615 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Network", + "config": "{\"codeName\":\"Network\"}", + "project": "Community-Plugins", + "id": "624a4851-e3d8-411f-8ac3-b1418516f30d", + "savedPayload": { + "position": { + "x": 37336.472734555115, + "y": 10463.360049991283 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Social-Trading", + "config": "{\"codeName\":\"Social-Trading\"}", + "project": "Community-Plugins", + "id": "b41eaa84-a3bc-44fc-8199-48cc117cbd27", + "savedPayload": { + "position": { + "x": 37514.19161419073, + "y": 10565.966092988983 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } } ], "id": "bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6", @@ -58651,12 +58600,12 @@ "id": "cf9f8b3b-77c6-43c6-b01f-95cf366a91f6", "savedPayload": { "position": { - "x": 18903, - "y": 10733.5 + "x": 4320.75, + "y": 30833.453560371516 }, "targetPosition": { - "x": 18903, - "y": 10733.5 + "x": 4320.75, + "y": 30833.453560371516 }, "floatingObject": { "isPinned": true, @@ -60251,7 +60200,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -60438,7 +60387,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -60675,7 +60624,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -61052,7 +61001,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ] ] @@ -61112,7 +61061,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -61321,7 +61270,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -61502,7 +61451,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -61643,7 +61592,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -61821,7 +61770,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -62002,7 +61951,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -62078,7 +62027,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ] ] @@ -62122,7 +62071,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -62420,8 +62369,8 @@ }, "referenceParent": { "type": "Workspace", - "name": "Getting Started Tutorials", - "id": "a3333ada-a69c-4086-bba6-3c950bd1f6fd" + "name": "Getting-Started-Tutorials", + "id": "ba8d157b-86e8-43e6-900d-97909ca0048b" }, "referenceParentCombinedNodePath": [ [ @@ -62503,7 +62452,7 @@ [ "New Plugins", "Plugins", - "Foundations", + "Community-Plugins", "bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6" ] ] @@ -62574,38 +62523,7 @@ "name": "Masters-Lightning-Strike", "id": "37ab4b0d-6bd8-46b6-9778-e193c32669a4" }, - "referenceParentCombinedNodePath": [ - [ - "New Plugins", - "Plugins", - "Foundations", - "bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6" - ], - [ - "Foundations", - "Plugin Project", - "Foundations", - "c4e402d7-5228-408c-9d67-379d6ef40bae" - ], - [ - "New Plugin Trading Systems", - "Plugin Trading Systems", - "Foundations", - "3569d452-c593-4e54-a356-7ff8c6b519f3" - ], - [ - "Masters-Lightning-Strike", - "Plugin File", - "Foundations", - "5fdcecee-8c8f-4e0f-b36b-81e9231970a6" - ], - [ - "Masters-Lightning-Strike", - "Plugin File Position", - "Foundations", - "37ab4b0d-6bd8-46b6-9778-e193c32669a4" - ] - ] + "referenceParentCombinedNodePath": [] } }, { @@ -62642,26 +62560,7 @@ "name": "New Plugin Trading Systems", "id": "3569d452-c593-4e54-a356-7ff8c6b519f3" }, - "referenceParentCombinedNodePath": [ - [ - "New Plugins", - "Plugins", - "Foundations", - "bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6" - ], - [ - "Foundations", - "Plugin Project", - "Foundations", - "c4e402d7-5228-408c-9d67-379d6ef40bae" - ], - [ - "New Plugin Trading Systems", - "Plugin Trading Systems", - "Foundations", - "3569d452-c593-4e54-a356-7ff8c6b519f3" - ] - ] + "referenceParentCombinedNodePath": [] } }, { @@ -64077,7 +63976,7 @@ "40af91d9-431c-4b7d-addc-aed37bc2f3fe" ], [ - "Foundations", + "Data-Mining", "Project Data Tasks", "Foundations", "cb4eb67d-ceba-448e-83e7-0dced47e3c66" @@ -64175,7 +64074,7 @@ "40af91d9-431c-4b7d-addc-aed37bc2f3fe" ], [ - "Foundations", + "Data-Mining", "Project Data Tasks", "Foundations", "cb4eb67d-ceba-448e-83e7-0dced47e3c66" @@ -64795,7 +64694,7 @@ "40af91d9-431c-4b7d-addc-aed37bc2f3fe" ], [ - "Foundations", + "Data-Mining", "Project Data Tasks", "Foundations", "cb4eb67d-ceba-448e-83e7-0dced47e3c66" @@ -64875,7 +64774,7 @@ "40af91d9-431c-4b7d-addc-aed37bc2f3fe" ], [ - "Foundations", + "Data-Mining", "Project Data Tasks", "Foundations", "cb4eb67d-ceba-448e-83e7-0dced47e3c66" @@ -64967,7 +64866,7 @@ "40af91d9-431c-4b7d-addc-aed37bc2f3fe" ], [ - "Foundations", + "Data-Mining", "Project Data Tasks", "Foundations", "cb4eb67d-ceba-448e-83e7-0dced47e3c66" @@ -65071,7 +64970,7 @@ "40af91d9-431c-4b7d-addc-aed37bc2f3fe" ], [ - "Foundations", + "Data-Mining", "Project Data Tasks", "Foundations", "cb4eb67d-ceba-448e-83e7-0dced47e3c66" @@ -66286,13 +66185,13 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ "Resistances and Supports", "Indicator Bot", - "Foundations", + "Data-Mining", "d88356a2-36cc-4bdc-ac10-01b8643352c2" ], [ @@ -66342,7 +66241,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -66681,7 +66580,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -66791,7 +66690,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -66907,7 +66806,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -67553,7 +67452,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ], [ @@ -67621,7 +67520,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ], [ @@ -67701,7 +67600,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ], [ @@ -67769,7 +67668,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ], [ @@ -67819,7 +67718,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ], [ @@ -67927,7 +67826,7 @@ [ "Low-Frequency", "Trading Engine", - "Foundations", + "Algorithmic-Trading", "eb20f622-71bf-4479-a574-d2320e1d4bd1" ] ] @@ -67971,7 +67870,7 @@ [ "Low-Frequency", "Trading Engine", - "Foundations", + "Algorithmic-Trading", "eb20f622-71bf-4479-a574-d2320e1d4bd1" ], [ @@ -68095,7 +67994,7 @@ [ "Low-Frequency", "Trading Engine", - "Foundations", + "Algorithmic-Trading", "eb20f622-71bf-4479-a574-d2320e1d4bd1" ], [ @@ -68157,7 +68056,7 @@ [ "Low-Frequency", "Trading Engine", - "Foundations", + "Algorithmic-Trading", "eb20f622-71bf-4479-a574-d2320e1d4bd1" ], [ @@ -68760,7 +68659,7 @@ "40af91d9-431c-4b7d-addc-aed37bc2f3fe" ], [ - "Foundations", + "Data-Mining", "Project Data Tasks", "Foundations", "cb4eb67d-ceba-448e-83e7-0dced47e3c66" @@ -69964,6 +69863,116 @@ "status": "Done" } } + }, + { + "type": "Algorithmic-Trading Project", + "name": "New Algorithmic-Trading Project", + "project": "Algorithmic-Trading", + "projectDefinition": { + "type": "Project Definition", + "name": "Algorithmic-Trading", + "config": "{ \n \"codeName\": \"Algorithmic-Trading\"\n}", + "project": "Foundations", + "id": "159d6c95-233b-4d79-8fe0-b1d75d40f90b", + "savedPayload": { + "position": { + "x": 4613.125, + "y": 10824.41124871001 + }, + "targetPosition": { + "x": 4313.125, + "y": 10824.41124871001 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "96734230-bb91-4527-b2a9-e2f16eb0be96", + "savedPayload": { + "position": { + "x": 4313.125, + "y": 10824.41124871001 + }, + "targetPosition": { + "x": 4313.125, + "y": 10824.41124871001 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Data-Mining Project", + "name": "New Data-Mining Project", + "project": "Data-Mining", + "projectDefinition": { + "type": "Project Definition", + "name": "Data-Mining", + "config": "{ \n \"codeName\": \"Data-Mining\"\n}", + "project": "Foundations", + "id": "588e6946-31d9-4389-8cf2-37715795ba4d", + "savedPayload": { + "position": { + "x": 4601.708333333332, + "y": 19847.940660474716 + }, + "targetPosition": { + "x": 4301.708333333332, + "y": 19847.940660474716 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "c80ac0bd-1c21-4e7c-b4b8-020e212bd6f4", + "savedPayload": { + "position": { + "x": 4301.708333333332, + "y": 19847.940660474716 + }, + "targetPosition": { + "x": 4301.708333333332, + "y": 19847.940660474716 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } } ] } \ No newline at end of file From 14e7655df922fe5aab43fa919cec7178110a445e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 28 Sep 2021 13:40:35 +0200 Subject: [PATCH 21/82] Fixing some bugs --- .../App-Schema/algorithmic-trading-project.json | 16 ++++++++++++++++ .../Schemas/App-Schema/trading-engine.json | 6 +++--- .../UI/Function-Libraries/UiObjectsFromNodes.js | 6 +++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/Projects/Algorithmic-Trading/Schemas/App-Schema/algorithmic-trading-project.json b/Projects/Algorithmic-Trading/Schemas/App-Schema/algorithmic-trading-project.json index 9a8e89cd4..53e974e6d 100644 --- a/Projects/Algorithmic-Trading/Schemas/App-Schema/algorithmic-trading-project.json +++ b/Projects/Algorithmic-Trading/Schemas/App-Schema/algorithmic-trading-project.json @@ -18,6 +18,22 @@ "actionFunction": "payload.executeAction", "actionProject": "Foundations" }, + { + "action": "Add UI Object", + "label": "Add Trading Engine", + "relatedUiObject": "Trading Engine", + "relatedUiObjectProject": "Algorithmic-Trading", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Add UI Object", + "label": "Add Trading System", + "relatedUiObject": "Trading System", + "relatedUiObjectProject": "Algorithmic-Trading", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, { "action": "Delete UI Object", "askConfirmation": true, diff --git a/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-engine.json b/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-engine.json index 528279a1a..517079e17 100644 --- a/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-engine.json +++ b/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-engine.json @@ -27,21 +27,21 @@ "name": "tradingCurrent", "type": "node", "childType": "Trading Current", - "autoAdd": true, + "autoAdd": false, "project": "Foundations" }, { "name": "tradingLast", "type": "node", "childType": "Trading Last", - "autoAdd": true, + "autoAdd": false, "project": "Foundations" }, { "name": "exchangeOrders", "type": "node", "childType": "Exchange Orders", - "autoAdd": true, + "autoAdd": false, "project": "Foundations" } ] diff --git a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js index ed280a4e0..802ac1ab0 100644 --- a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js +++ b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js @@ -756,7 +756,11 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { if (property.type === 'node') { if (property.name !== previousPropertyName) { if (node[property.name] === undefined) { - addUIObject(node, property.childType, rootNodes) + let currenAngleToParent = node.payload.floatingObject.angleToParent + node.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + let uiObject = addUIObject(node, property.childType, rootNodes, property.project) + node.payload.floatingObject.angleToParent = currenAngleToParent + //uiObject.payload.floatingObject.angleToParent = currenAngleToParent previousPropertyName = property.name } } From 2837f0ab32cb49944eb9c253c1135dd71b5617bd Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 29 Sep 2021 10:48:28 +0200 Subject: [PATCH 22/82] Update githubServer.js --- Platform/Client/githubServer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Platform/Client/githubServer.js b/Platform/Client/githubServer.js index a91e86dc6..148ce0801 100644 --- a/Platform/Client/githubServer.js +++ b/Platform/Client/githubServer.js @@ -340,7 +340,7 @@ exports.newGithubServer = function newGithubServer() { owner: owner, repo: repo, issue_number: pullRequest.number, - body: 'This Pull Request could not be automatically merged and was closed by the Superalgos Governance System because it was detected that a User Profile file... \n\n' + fileContentUrl + '\n\n...was submitted together with ' + (filesChanged.length - 1) + ' other file/s. User Profiles files as per the Governance System rules, must be the only file present at a Pull Request in order to pass all the validations and be automatically merged.' + body: 'This Pull Request could not be automatically merged and was closed by the Superalgos Governance System because it was detected that a User Profile file... \n\n' + fileContentUrl + '\n\n...was submitted together with ' + (filesChanged.length - 1) + ' other file/s. User Profiles files as per the Governance System rules, must be the only file present at a Pull Request in order to pass all the validations and be automatically merged. \n\n If you intentionally submitted the extra files, the way to get your work merged is by first removing your User Profile file from the Plugins folder at your local installation and executing an app.contribute again. Then wait until the PR is merged (manually reviewed) and after that you put your User Profile file again and create a new PR only with that file with an app.contribute. That last PR should be merged automatically.' }); await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME) From 9e5c5504746f298b3bb40e0b5000d4855fb8f251 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 29 Sep 2021 11:46:20 +0200 Subject: [PATCH 23/82] Machine Learning Project extracted from Foundations --- .../UI/Function-Libraries/ActionSwitch.js | 8 +- .../Function-Libraries/UiObjectsFromNodes.js | 2 +- .../Learning-Bot/LearningSession.js | 2 +- .../Low-Frequency-Learning/LearningEngine.js | 2 +- .../Low-Frequency-Learning/LearningEpisode.js | 2 +- .../Low-Frequency-Learning/LearningOutput.js | 4 +- .../Low-Frequency-Learning/LearningProcess.js | 6 +- .../Low-Frequency-Learning/LearningRecords.js | 2 +- .../LearningSimulation.js | 8 +- .../Low-Frequency-Learning/LearningSystem.js | 2 +- .../Learning-Bot/SingleMarketLearningBot.js | 6 +- .../LearningSessionFunctions.js | 2 +- Projects/ProjectsSchema.json | 164 ++++++++++-------- 13 files changed, 112 insertions(+), 98 deletions(-) rename Projects/{Foundations => Machine-Learning}/TS/Bot-Modules/Learning-Bot/LearningSession.js (99%) rename Projects/{Foundations => Machine-Learning}/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js (99%) rename Projects/{Foundations => Machine-Learning}/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js (98%) rename Projects/{Foundations => Machine-Learning}/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js (94%) rename Projects/{Foundations => Machine-Learning}/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js (98%) rename Projects/{Foundations => Machine-Learning}/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningRecords.js (99%) rename Projects/{Foundations => Machine-Learning}/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js (99%) rename Projects/{Foundations => Machine-Learning}/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js (99%) rename Projects/{Foundations => Machine-Learning}/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js (99%) rename Projects/{Foundations => Machine-Learning}/UI/Function-Libraries/LearningSessionFunctions.js (99%) diff --git a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js index e91360bf2..e66088a46 100644 --- a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js @@ -590,22 +590,22 @@ function newFoundationsActionSwitch() { break case 'Stop Trading Session': { - UI.projects.foundations.functionLibraries.tradingSessionFunctions.stopSession(action.node, action.callBackFunction) + UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.stopSession(action.node, action.callBackFunction) } break case 'Run Learning Session': { - UI.projects.foundations.functionLibraries.learningSessionFunctions.runSession(action.node, false, action.callBackFunction) + UI.projects.machineLearning.functionLibraries.learningSessionFunctions.runSession(action.node, false, action.callBackFunction) } break case 'Resume Learning Session': { - UI.projects.foundations.functionLibraries.learningSessionFunctions.runSession(action.node, true, action.callBackFunction) + UI.projects.machineLearning.functionLibraries.learningSessionFunctions.runSession(action.node, true, action.callBackFunction) } break case 'Stop Learning Session': { - UI.projects.foundations.functionLibraries.learningSessionFunctions.stopSession(action.node, action.callBackFunction) + UI.projects.machineLearning.functionLibraries.learningSessionFunctions.stopSession(action.node, action.callBackFunction) } break case 'Run Super Action': diff --git a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js index 802ac1ab0..7043b518a 100644 --- a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js +++ b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js @@ -278,7 +278,7 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { function syncronizeLearningSessionsFoundAtWorkspaceWithBackEnd() { for (let i = 0; i < learningSessionsFoundAtWorkspace.length; i++) { let node = learningSessionsFoundAtWorkspace[i] - UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.syncronizeSessionWithBackEnd(node) + UI.projects.machineLearning.functionLibraries.learningSessionFunctions.syncronizeSessionWithBackEnd(node) } learningSessionsFoundAtWorkspace = undefined } diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/LearningSession.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/LearningSession.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/LearningSession.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/LearningSession.js index ed0f52dcb..50459a29f 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/LearningSession.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/LearningSession.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesLearningSession = function (processIndex) { +exports.newMachineLearningBotModulesLearningSession = function (processIndex) { const MODULE_NAME = "Learning Session" diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js index 84f53097e..c63f52b31 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesLearningEngine = function (processIndex) { +exports.newMachineLearningBotModulesLearningEngine = function (processIndex) { /* We call the Learning Engine to the data structure that is needed in order to exevute the learning protocol with the specific rules defined at the Learning System. diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js index 6eba82d6e..6ea0bdb39 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesLearningEpisode = function (processIndex) { +exports.newMachineLearningBotModulesLearningEpisode = function (processIndex) { /* This module packages all functions related to Episodes. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js similarity index 94% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js index d6768c04e..38e50393b 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesLearningOutput = function (processIndex) { +exports.newMachineLearningBotModulesLearningOutput = function (processIndex) { /* This module will load if necesary all the data outputs so that they can be appended with new records if needed. After running the simulation, it will save all the data outputs. @@ -29,7 +29,7 @@ exports.newFoundationsBotModulesLearningOutput = function (processIndex) { } /* Preparing everything for the Simulation */ - let learningSimulationModuleObject = TS.projects.foundations.botModules.learningSimulation.newFoundationsBotModulesLearningSimulation(processIndex) + let learningSimulationModuleObject = TS.projects.foundations.botModules.learningSimulation.newMachineLearningBotModulesLearningSimulation(processIndex) let outputDatasets = TS.projects.foundations.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset') let outputDatasetsMap = new Map() diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js index 3ed2a043c..f7d76eb52 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesLearningProcess = function (processIndex) { +exports.newMachineLearningBotModulesLearningProcess = function (processIndex) { /* This Module will load all the process data dependencies from files and send them downstream. After execution, will save the time range and status report of the process. @@ -16,8 +16,8 @@ let dataFiles = new Map() let multiTimeFrameDataFiles = new Map() - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).LEARNING_ENGINE_MODULE_OBJECT = TS.projects.foundations.botModules.learningEngine.newFoundationsBotModulesLearningEngine(processIndex) - let learningOutputModuleObject = TS.projects.foundations.botModules.learningOutput.newFoundationsBotModulesLearningOutput(processIndex) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).LEARNING_ENGINE_MODULE_OBJECT = TS.projects.foundations.botModules.learningEngine.newMachineLearningBotModulesLearningEngine(processIndex) + let learningOutputModuleObject = TS.projects.foundations.botModules.learningOutput.newMachineLearningBotModulesLearningOutput(processIndex) let currentTimeFrame = {} diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningRecords.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningRecords.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningRecords.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningRecords.js index 9c9b916d5..6ca21e3a8 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningRecords.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningRecords.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesLearningRecords = function (processIndex) { +exports.newMachineLearningBotModulesLearningRecords = function (processIndex) { /* This module facilitates the appending of records to the output of the process. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js index 53ee68f92..a6385b44c 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesLearningSimulation = function (processIndex) { +exports.newMachineLearningBotModulesLearningSimulation = function (processIndex) { /* This Module represents the learning simulation. Essentially a loop through a set of candles and the execution at each loop cycle of the Learning System Protocol. @@ -33,10 +33,10 @@ exports.newFoundationsBotModulesLearningSimulation = function (processIndex) { '[INFO] runSimulation -> finalDatetime = ' + sessionParameters.timeRange.config.finalDatetime) /* These are the Modules we will need to run the Simulation */ - let learningRecordsModuleObject = TS.projects.foundations.botModules.learningRecords.newFoundationsBotModulesLearningRecords(processIndex) + let learningRecordsModuleObject = TS.projects.foundations.botModules.learningRecords.newMachineLearningBotModulesLearningRecords(processIndex) learningRecordsModuleObject.initialize(outputDatasetsMap) - let learningSystemModuleObject = TS.projects.foundations.botModules.learningSystem.newFoundationsBotModulesLearningSystem(processIndex) + let learningSystemModuleObject = TS.projects.foundations.botModules.learningSystem.newMachineLearningBotModulesLearningSystem(processIndex) learningSystemModuleObject.initialize() /* @@ -77,7 +77,7 @@ exports.newFoundationsBotModulesLearningSimulation = function (processIndex) { } } - let learningEpisodeModuleObject = TS.projects.foundations.botModules.learningEpisode.newFoundationsBotModulesLearningEpisode(processIndex) + let learningEpisodeModuleObject = TS.projects.foundations.botModules.learningEpisode.newMachineLearningBotModulesLearningEpisode(processIndex) learningEpisodeModuleObject.initialize() /* Setting up the candles array: The whole simulation is based on the array of candles at the time-frame defined at the session parameters. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js index c1505f124..f6f41c4c1 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesLearningSystem = function (processIndex) { +exports.newMachineLearningBotModulesLearningSystem = function (processIndex) { /* The Learning System is the user defined set of rules compliant with the Learning Protocol that defines the learning logic to be applied during each cycle of the Simulation. diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js index 22aa322e5..9d23b0e8a 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js @@ -1,8 +1,8 @@ -exports.newFoundationsBotModulesSingleMarketLearningBot = function (processIndex) { +exports.newMachineLearningBotModulesSingleMarketLearningBot = function (processIndex) { const MODULE_NAME = "Single Market Learning Bot"; - let session = TS.projects.foundations.botModules.learningSession.newFoundationsBotModulesLearningSession(processIndex) + let session = TS.projects.foundations.botModules.learningSession.newMachineLearningBotModulesLearningSession(processIndex) let nextLoopTimeoutHandle; let thisObject = { @@ -282,7 +282,7 @@ "[INFO] run -> loop -> initializeDataDependencies -> onInizialized -> Execution finished well.") switch (TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.config.framework.name) { case 'Low-Frequency-Learning-Process': { - processFramework = TS.projects.foundations.botModules.learningProcess.newFoundationsBotModulesLearningProcess(processIndex); + processFramework = TS.projects.foundations.botModules.learningProcess.newMachineLearningBotModulesLearningProcess(processIndex); startProcessFramework(); break; } diff --git a/Projects/Foundations/UI/Function-Libraries/LearningSessionFunctions.js b/Projects/Machine-Learning/UI/Function-Libraries/LearningSessionFunctions.js similarity index 99% rename from Projects/Foundations/UI/Function-Libraries/LearningSessionFunctions.js rename to Projects/Machine-Learning/UI/Function-Libraries/LearningSessionFunctions.js index e542b9ae2..b8440de23 100644 --- a/Projects/Foundations/UI/Function-Libraries/LearningSessionFunctions.js +++ b/Projects/Machine-Learning/UI/Function-Libraries/LearningSessionFunctions.js @@ -1,4 +1,4 @@ -function newFoundationsFunctionLibraryLearningSessionFunctions() { +function newMachineLearningFunctionLibraryLearningSessionFunctions() { let thisObject = { syncronizeSessionWithBackEnd: syncronizeSessionWithBackEnd, runSession: runSession, diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index 82866429e..3c6cb5d05 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -151,6 +151,95 @@ "Trading Tasks" ] }, + { + "name": "Machine-Learning", + "propertyName": "machineLearning", + "UI": { + "functionLibraries": [ + { + "name": "Learning Session Functions", + "propertyName": "learningSessionFunctions", + "functionName": "newMachineLearningFunctionLibraryLearningSessionFunctions" + } + ] + }, + "TS": { + "botModules": [ + { + "name": "Single Market Learning Bot", + "propertyName": "singleMarketLearningBot", + "functionName": "newMachineLearningBotModulesSingleMarketLearningBot", + "fileName": "SingleMarketLearningBot.js", + "folderName": "Learning-Bot", + "botType": "Learning Bot" + }, + { + "name": "Learning Session", + "propertyName": "learningSession", + "functionName": "newMachineLearningBotModulesLearningSession", + "fileName": "LearningSession.js", + "folderName": "Learning-Bot" + }, + { + "name": "Learning Process", + "propertyName": "learningProcess", + "functionName": "newMachineLearningBotModulesLearningProcess", + "fileName": "LearningProcess.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning Engine", + "propertyName": "learningEngine", + "functionName": "newMachineLearningBotModulesLearningEngine", + "fileName": "LearningEngine.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning Output", + "propertyName": "learningOutput", + "functionName": "newMachineLearningBotModulesLearningOutput", + "fileName": "LearningOutput.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning Simulation", + "propertyName": "learningSimulation", + "functionName": "newMachineLearningBotModulesLearningSimulation", + "fileName": "LearningSimulation.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning Episode", + "propertyName": "learningEpisode", + "functionName": "newMachineLearningBotModulesLearningEpisode", + "fileName": "LearningEpisode.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning Records", + "propertyName": "learningRecords", + "functionName": "newMachineLearningBotModulesLearningRecords", + "fileName": "LearningRecords.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning System", + "propertyName": "learningSystem", + "functionName": "newMachineLearningBotModulesLearningSystem", + "fileName": "LearningSystem.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + } + ] + }, + "plugins": [ + "Learning Mines", + "Learning Systems", + "Learning Engines" + ], + "tasks": [ + "Learning Tasks" + ] + }, { "name": "Foundations", "propertyName": "foundations", @@ -223,11 +312,6 @@ "propertyName": "taskFunctions", "functionName": "newFoundationsFunctionLibraryTaskFunctions" }, - { - "name": "Learning Session Functions", - "propertyName": "learningSessionFunctions", - "functionName": "newFoundationsFunctionLibraryLearningSessionFunctions" - }, { "name": "Crypto Ecosystem Functions", "propertyName": "cryptoEcosystemFunctions", @@ -690,70 +774,6 @@ "functionName": "newFoundationsBotModulesSlackBot", "fileName": "SlackBot.js", "folderName": "Trading-Bot/Announcements" - }, - { - "name": "Single Market Learning Bot", - "propertyName": "singleMarketLearningBot", - "functionName": "newFoundationsBotModulesSingleMarketLearningBot", - "fileName": "SingleMarketLearningBot.js", - "folderName": "Learning-Bot", - "botType": "Learning Bot" - }, - { - "name": "Learning Session", - "propertyName": "learningSession", - "functionName": "newFoundationsBotModulesLearningSession", - "fileName": "LearningSession.js", - "folderName": "Learning-Bot" - }, - { - "name": "Learning Process", - "propertyName": "learningProcess", - "functionName": "newFoundationsBotModulesLearningProcess", - "fileName": "LearningProcess.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning Engine", - "propertyName": "learningEngine", - "functionName": "newFoundationsBotModulesLearningEngine", - "fileName": "LearningEngine.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning Output", - "propertyName": "learningOutput", - "functionName": "newFoundationsBotModulesLearningOutput", - "fileName": "LearningOutput.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning Simulation", - "propertyName": "learningSimulation", - "functionName": "newFoundationsBotModulesLearningSimulation", - "fileName": "LearningSimulation.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning Episode", - "propertyName": "learningEpisode", - "functionName": "newFoundationsBotModulesLearningEpisode", - "fileName": "LearningEpisode.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning Records", - "propertyName": "learningRecords", - "functionName": "newFoundationsBotModulesLearningRecords", - "fileName": "LearningRecords.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning System", - "propertyName": "learningSystem", - "functionName": "newFoundationsBotModulesLearningSystem", - "fileName": "LearningSystem.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" } ] }, @@ -810,14 +830,8 @@ ] }, "plugins": [ - "Learning Mines", - "Learning Systems", - "Learning Engines", "Tutorials", "API Maps" - ], - "tasks": [ - "Learning Tasks" ] }, { From 2a49b303cc77c3a3bdae0b436a73a62738ee7815 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 29 Sep 2021 13:14:15 +0200 Subject: [PATCH 24/82] Machine Learning Refactoring --- .../Learning-Bot/Low-Frequency-Learning/LearningOutput.js | 2 +- .../Learning-Bot/Low-Frequency-Learning/LearningProcess.js | 5 +++-- .../Low-Frequency-Learning/LearningSimulation.js | 6 +++--- .../TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js index 38e50393b..b2c6539fe 100644 --- a/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js @@ -29,7 +29,7 @@ exports.newMachineLearningBotModulesLearningOutput = function (processIndex) { } /* Preparing everything for the Simulation */ - let learningSimulationModuleObject = TS.projects.foundations.botModules.learningSimulation.newMachineLearningBotModulesLearningSimulation(processIndex) + let learningSimulationModuleObject = TS.projects.machineLearning.botModules.learningSimulation.newMachineLearningBotModulesLearningSimulation(processIndex) let outputDatasets = TS.projects.foundations.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset') let outputDatasetsMap = new Map() diff --git a/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js index f7d76eb52..1bbdcd3c4 100644 --- a/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js @@ -16,8 +16,9 @@ let dataFiles = new Map() let multiTimeFrameDataFiles = new Map() - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).LEARNING_ENGINE_MODULE_OBJECT = TS.projects.foundations.botModules.learningEngine.newMachineLearningBotModulesLearningEngine(processIndex) - let learningOutputModuleObject = TS.projects.foundations.botModules.learningOutput.newMachineLearningBotModulesLearningOutput(processIndex) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).LEARNING_ENGINE_MODULE_OBJECT = + TS.projects.machineLearning.botModules.learningEngine.newMachineLearningBotModulesLearningEngine(processIndex) + let learningOutputModuleObject = TS.projects.machineLearning.botModules.learningOutput.newMachineLearningBotModulesLearningOutput(processIndex) let currentTimeFrame = {} diff --git a/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js index a6385b44c..b1127e248 100644 --- a/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js @@ -33,10 +33,10 @@ exports.newMachineLearningBotModulesLearningSimulation = function (processIndex) '[INFO] runSimulation -> finalDatetime = ' + sessionParameters.timeRange.config.finalDatetime) /* These are the Modules we will need to run the Simulation */ - let learningRecordsModuleObject = TS.projects.foundations.botModules.learningRecords.newMachineLearningBotModulesLearningRecords(processIndex) + let learningRecordsModuleObject = TS.projects.machineLearning.botModules.learningRecords.newMachineLearningBotModulesLearningRecords(processIndex) learningRecordsModuleObject.initialize(outputDatasetsMap) - let learningSystemModuleObject = TS.projects.foundations.botModules.learningSystem.newMachineLearningBotModulesLearningSystem(processIndex) + let learningSystemModuleObject = TS.projects.machineLearning.botModules.learningSystem.newMachineLearningBotModulesLearningSystem(processIndex) learningSystemModuleObject.initialize() /* @@ -77,7 +77,7 @@ exports.newMachineLearningBotModulesLearningSimulation = function (processIndex) } } - let learningEpisodeModuleObject = TS.projects.foundations.botModules.learningEpisode.newMachineLearningBotModulesLearningEpisode(processIndex) + let learningEpisodeModuleObject = TS.projects.machineLearning.botModules.learningEpisode.newMachineLearningBotModulesLearningEpisode(processIndex) learningEpisodeModuleObject.initialize() /* Setting up the candles array: The whole simulation is based on the array of candles at the time-frame defined at the session parameters. */ diff --git a/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js index 9d23b0e8a..7eae12d5b 100644 --- a/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js @@ -2,7 +2,7 @@ const MODULE_NAME = "Single Market Learning Bot"; - let session = TS.projects.foundations.botModules.learningSession.newMachineLearningBotModulesLearningSession(processIndex) + let session = TS.projects.machineLearning.botModules.learningSession.newMachineLearningBotModulesLearningSession(processIndex) let nextLoopTimeoutHandle; let thisObject = { @@ -282,7 +282,7 @@ "[INFO] run -> loop -> initializeDataDependencies -> onInizialized -> Execution finished well.") switch (TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.config.framework.name) { case 'Low-Frequency-Learning-Process': { - processFramework = TS.projects.foundations.botModules.learningProcess.newMachineLearningBotModulesLearningProcess(processIndex); + processFramework = TS.projects.machineLearning.botModules.learningProcess.newMachineLearningBotModulesLearningProcess(processIndex); startProcessFramework(); break; } From c4944335769592e50963d855f3b40cae94bfe109 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 29 Sep 2021 14:09:00 +0200 Subject: [PATCH 25/82] ML Schemas migrated out of Foundations --- .../Schemas/App-Schema/learning-bot.json | 24 ++++--- .../Schemas/App-Schema/learning-engine.json | 18 ++++-- .../Schemas/App-Schema/learning-mine.json | 18 ++++-- .../Schemas/App-Schema/learning-system.json | 6 +- .../App-Schema/machine-learning-project.json | 63 +++++++++++++++++++ 5 files changed, 107 insertions(+), 22 deletions(-) rename Projects/{Foundations => Machine-Learning}/Schemas/App-Schema/learning-bot.json (72%) rename Projects/{Foundations => Machine-Learning}/Schemas/App-Schema/learning-engine.json (70%) rename Projects/{Foundations => Machine-Learning}/Schemas/App-Schema/learning-mine.json (69%) rename Projects/{Foundations => Machine-Learning}/Schemas/App-Schema/learning-system.json (74%) create mode 100644 Projects/Machine-Learning/Schemas/App-Schema/machine-learning-project.json diff --git a/Projects/Foundations/Schemas/App-Schema/learning-bot.json b/Projects/Machine-Learning/Schemas/App-Schema/learning-bot.json similarity index 72% rename from Projects/Foundations/Schemas/App-Schema/learning-bot.json rename to Projects/Machine-Learning/Schemas/App-Schema/learning-bot.json index 8123e86b6..4439652a9 100644 --- a/Projects/Foundations/Schemas/App-Schema/learning-bot.json +++ b/Projects/Machine-Learning/Schemas/App-Schema/learning-bot.json @@ -7,25 +7,29 @@ "iconPathOn": "configuration", "iconPathOff": "configuration", "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Process Definition", "relatedUiObject": "Process Definition", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Product Definition", "relatedUiObject": "Product Definition", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Product Definition Folder", "relatedUiObject": "Product Definition Folder", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -34,7 +38,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isTitleAllwaysVisible": true, @@ -54,19 +59,22 @@ "name": "processes", "type": "array", "childType": "Process Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "products", "type": "array", "childType": "Product Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "productDefinitionFolders", "type": "array", "childType": "Product Definition Folder", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" } ], "propertyNameAtParent": "learningBots" diff --git a/Projects/Foundations/Schemas/App-Schema/learning-engine.json b/Projects/Machine-Learning/Schemas/App-Schema/learning-engine.json similarity index 70% rename from Projects/Foundations/Schemas/App-Schema/learning-engine.json rename to Projects/Machine-Learning/Schemas/App-Schema/learning-engine.json index ae575426a..fb41c8d92 100644 --- a/Projects/Foundations/Schemas/App-Schema/learning-engine.json +++ b/Projects/Machine-Learning/Schemas/App-Schema/learning-engine.json @@ -5,7 +5,8 @@ "action": "Add Missing Children", "label": "Add Missing Children", "relatedUiObject": "Learning Engine", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -14,7 +15,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isHierarchyHead": true, @@ -25,25 +27,29 @@ "name": "learningCurrent", "type": "node", "childType": "Learning Current", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "features", "type": "node", "childType": "Features", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "labels", "type": "node", "childType": "Labels", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "predictions", "type": "node", "childType": "Predictions", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/App-Schema/learning-mine.json b/Projects/Machine-Learning/Schemas/App-Schema/learning-mine.json similarity index 69% rename from Projects/Foundations/Schemas/App-Schema/learning-mine.json rename to Projects/Machine-Learning/Schemas/App-Schema/learning-mine.json index cefbe2b42..24b9b91bb 100644 --- a/Projects/Foundations/Schemas/App-Schema/learning-mine.json +++ b/Projects/Machine-Learning/Schemas/App-Schema/learning-mine.json @@ -7,19 +7,22 @@ "iconPathOn": "configuration", "iconPathOff": "configuration", "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Learning Bot", "relatedUiObject": "Learning Bot", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Plotter", "relatedUiObject": "Plotter", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -28,7 +31,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isTitleAllwaysVisible": true, @@ -45,12 +49,14 @@ { "name": "learningBots", "type": "array", - "childType": "Learning Bot" + "childType": "Learning Bot", + "project": "Algorithmic-Trading" }, { "name": "plotters", "type": "array", - "childType": "Plotter" + "childType": "Plotter", + "project": "Algorithmic-Trading" } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/App-Schema/learning-system.json b/Projects/Machine-Learning/Schemas/App-Schema/learning-system.json similarity index 74% rename from Projects/Foundations/Schemas/App-Schema/learning-system.json rename to Projects/Machine-Learning/Schemas/App-Schema/learning-system.json index 9d1c8390e..4075463ae 100644 --- a/Projects/Foundations/Schemas/App-Schema/learning-system.json +++ b/Projects/Machine-Learning/Schemas/App-Schema/learning-system.json @@ -8,7 +8,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isHierarchyHead": true, @@ -18,7 +19,8 @@ { "name": "machineLearningLibrary", "type": "node", - "childType": "TensorFlow Library" + "childType": "TensorFlow Library", + "project": "Foundations" } ] } \ No newline at end of file diff --git a/Projects/Machine-Learning/Schemas/App-Schema/machine-learning-project.json b/Projects/Machine-Learning/Schemas/App-Schema/machine-learning-project.json new file mode 100644 index 000000000..2c2c32481 --- /dev/null +++ b/Projects/Machine-Learning/Schemas/App-Schema/machine-learning-project.json @@ -0,0 +1,63 @@ +{ + "type": "Machine-Learning Project", + "menuItems": [ + { + "action": "Add Missing Children", + "label": "Add Missing Children", + "iconPathOn": "machine-learning-project", + "iconPathOff": "machine-learning-project", + "iconProject": "Machine-Learning", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Add UI Object", + "label": "Add Learning Mine", + "relatedUiObject": "Learning Mine", + "relatedUiObjectProject": "Machine-Learning", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Add UI Object", + "label": "Add Learning Engine", + "relatedUiObject": "Learning Engine", + "relatedUiObjectProject": "Machine-Learning", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Add UI Object", + "label": "Add Learning System", + "relatedUiObject": "Learning System", + "relatedUiObjectProject": "Machine-Learning", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Delete UI Object", + "askConfirmation": true, + "confirmationLabel": "Confirm to Delete", + "actionFunction": "payload.executeAction", + "label": "Delete", + "iconPathOn": "delete-entity", + "iconPathOff": "delete-entity", + "actionProject": "Foundations" + } + ], + "isProjectHead": true, + "isTitleAllwaysVisible": false, + "addLeftIcons": true, + "isPinned": true, + "positionLocked": true, + "icon": "machine-learning-project", + "childrenNodesProperties": [ + { + "name": "projectDefinition", + "type": "node", + "childType": "Project Definition", + "project": "Foundations", + "autoAdd": true + } + ] +} \ No newline at end of file From 6d41d04cbd02b772e4408b6c17c63068e90c80d7 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 29 Sep 2021 15:15:49 +0200 Subject: [PATCH 26/82] ML Icons --- .../Icons/Learning/learning-bot.png | Bin .../Icons/Learning/learning-engine.png | Bin .../Icons/Learning/learning-mine.png | Bin .../Icons/Learning/learning-system.png | Bin .../Icons/machine-learning-project.png | Bin 0 -> 12925 bytes 5 files changed, 0 insertions(+), 0 deletions(-) rename Projects/{Foundations => Machine-Learning}/Icons/Learning/learning-bot.png (100%) rename Projects/{Foundations => Machine-Learning}/Icons/Learning/learning-engine.png (100%) rename Projects/{Foundations => Machine-Learning}/Icons/Learning/learning-mine.png (100%) rename Projects/{Foundations => Machine-Learning}/Icons/Learning/learning-system.png (100%) create mode 100644 Projects/Machine-Learning/Icons/machine-learning-project.png diff --git a/Projects/Foundations/Icons/Learning/learning-bot.png b/Projects/Machine-Learning/Icons/Learning/learning-bot.png similarity index 100% rename from Projects/Foundations/Icons/Learning/learning-bot.png rename to Projects/Machine-Learning/Icons/Learning/learning-bot.png diff --git a/Projects/Foundations/Icons/Learning/learning-engine.png b/Projects/Machine-Learning/Icons/Learning/learning-engine.png similarity index 100% rename from Projects/Foundations/Icons/Learning/learning-engine.png rename to Projects/Machine-Learning/Icons/Learning/learning-engine.png diff --git a/Projects/Foundations/Icons/Learning/learning-mine.png b/Projects/Machine-Learning/Icons/Learning/learning-mine.png similarity index 100% rename from Projects/Foundations/Icons/Learning/learning-mine.png rename to Projects/Machine-Learning/Icons/Learning/learning-mine.png diff --git a/Projects/Foundations/Icons/Learning/learning-system.png b/Projects/Machine-Learning/Icons/Learning/learning-system.png similarity index 100% rename from Projects/Foundations/Icons/Learning/learning-system.png rename to Projects/Machine-Learning/Icons/Learning/learning-system.png diff --git a/Projects/Machine-Learning/Icons/machine-learning-project.png b/Projects/Machine-Learning/Icons/machine-learning-project.png new file mode 100644 index 0000000000000000000000000000000000000000..688bcacdb3fcc902c889de14da2c601ca96b8922 GIT binary patch literal 12925 zcmch-c{tQx_&0uL48~4m4I@f+k!)e?w2&>zUP`2teK#Z|MH@<%>^mid7?KdOuVt%b z-}jkeo-=)}@ALfr_+8Imzw76^Tyx&-^;=6PJsO#lZ^;~&4Nn@^{j>P} zerps@M+vS%xf>8Uo)TZsHa_!t8y1Gh7}PF%ij2+2$olv^Gr3j9M|=NX|M{!8{;XxY zwY)D*w)TxVIudx$=~_MF_RMz7TiIf3AH4L@c{mnKSSP2POEIM^=>PvelYXDwkGc|| z?L`J1Zr5+VcA|ZruU(n2`PAph`8qt=cq9}*Tq-`BIeUbiP&S=3RxV*IL4^WfiZf7b z(R7uV@+0=g#5)~e6%#>4hs^zRDJuMEDGe5YN%x+_qZ)Z}Gq1&V1*mZWVUrQ+U%k0c ztcoLG_hPP~_PH^QnV&gzqb%Ya=yriGSMp#K@T zm@3`v=ZfIRP=QR;s(q?@i@Q!FwDRtXV^90n{%r;9HOch65^Szre? zjx`i1zv^n3G!am^1X)|kGN!`QW*vi(xLgs&e=i(vHYPff=I!cr3t2&sL*ZU6`+JL% zXn;lQ;%lP1%G41U#+P&9>?(|ZT$ot_2&E6XZiRpE$ASWV<}$~fD08H@h5u{#%?;`S zc5TwNr&puQsdV*Ub-|=Ol+i$(A|W<|UL95eNhgVakBpD%IRYZL=)lb*ebg9$c}6`^ zFgKm+au^9-Un=6^FLOD>3LMTh8bisJFMps%fckd>q%pcz(onx)ocnGTJ7rwOP3Yr_BOo$svqBN4?3Zjf3t!{miq5<9$gv-rvS>WDRim(n=f+$?XH7F+z zb(r+6Eadu-+M`Pd1Yo8E1GVgOwov3Rk3w>C5?NS5cl3M@qEh@gz#yq7OgFezP8P8s z!4->F(s@OKP*NoLEVIkFa3A2(4S_=q4&Yd0;A%0TL4*PkC_6{cxqp2!!sd{$=ZXJX ze~bqWlGHky-_z2h*IxUwwlI`yFl^-7zdl-GpK%27gtgTw#E z0$YU%h$$=a4Pw%s(V+hZ48!iwoGvX|J$>FZj8*vzcswlXHJwfKtgS)oa4%!AytxAGir1vEGec z{hR9uux6radr?g#ezr6E5Epn;>{H0KaydvHU{2CVq^R+u-4w`I^&XBED6t`Mj==!S z--|fn@kH1#Svq>!1;@A`Y;?z`)KZ>5#g|O3*o^eoNSnV>e8;yqpXfdlQW?-Qv0v=I zDMcu^uFCzUKbCgkTi0?2vAo@~bchrb!^QG+dyC1(ad8dr{lle0W8$=f+;8rtCN;mfFm8 z0{NyLFXtltSYbZEJ*aOUu-tns@oGr9>e9~=V{=t6uMdT(-ec3`lAnW2I)|8V+*po8 z@tB;TeZW`cCyy{>2H%zUUfMyG$rgy(^SG8CxPL77=`461zuFwFbzSAx`b$0wa%U@o zwH-_{E?DlYOW8?B7}D2n{>rA6X_4BW;2=1d=Loy%vx=ZwqZygukN|e!^`+~ z@4~%vl}oE@JCr^4_)Kj>-oG&@C`Mnn-f9=Ql0AH`OMOw#w_>IUSWh5_d(mNajIWu@Bpo6}y|xQ{sp`vbvB*Xn?vEz**Ixicp_|@^ zu8{&OE$sCbgz7)DCG|HYYT5rRs}5?v81ku&fK(P3{qz)zE3^21<@s;yzzv-+W3F8R zsIw@sEKArhJE*%!l(nBGyi3~NVn)V(s)!18LFKcyc*GpCiwZymwb?XI6sZqYbxd8W z#;(rZ-x*VDn*79!N}Iz1lw{dlcmkza`mC^#(|!Y0a=^E!MQw}_P8Juxt76-24(?Wt z@|(jAoe{_V{6eg2Q$q`v`b-BhLRV#2+jYvT(NEs;wA%@w)I=DdY*IFr%hjQ42T}dU zg3F>=G$RqOj_>Z0W(XfU6j)eu0{W<5_8@BKK>DMQt&%{_CC29g#I)eK9%`;;MEKD@ z)O$ND^JS$IjyN%7L{UIZx<~%+d%*T`H5K zx2Q!>R>_L2D2JnT$ond2##VGgAxCJER={5GkK7iPa4@+L-B5T4NRA?p$7jgYh0tsK z;zfNQp84j?3~0(k00$2Oo8%-DLVPD`^)qUiHmpT3c=ZmegA5{~XgG)LoaBS$&dMeC zWRlOObdvaDG!AK39tm-65iamu;H=P!LSjUkZj*PP3%2JYRJTmh)mWWM$;F~+(kw(O zLlLf{1igvV1LgI}U$OC7gDWrU5Z`hU^Q;#S?&sDM>x6=9tvi>tX?L~$?oESdMn?QE zdT_q#g!6)Fy_i)qJ3)Q#sV<8HhjBfu3c8iW!@_bi@QExaZH*_Z+V88V?jjVNo=(;% z*v?n21bumhT&azI7thwQpY}^#CtbtZ?HCQB!oG2ad&J&##GEoCb=^3K?jz!^w;~(ew{M$~ zcmLMT&p)<4g--ZQKw?Xf4M#JnlxOnlPu;~sm&y^Ee$1mLy@&yWa$xh%jhg5`hO?#z z-pH^sxNvqF==GWfF{lRB-nlz|RvO*lBIO%fy3jfUa8r9fqU!rXL+GQfwFe;w|wiWuQ3tU&izRiL@YBuxgSQ)U=s*Vt} z|JY%U^*VejV6T#nrJ(7>VE%Yu108ClfGwPHCGF;%XrTVO>I#|mRhr?xk|Bt` zgDD&MJQx0Ny#jA{SWubHwpBGj(<)3;DdA?D#*$XW z7llup;zqB>%prknN-_7KDA?tu7#(=ZLe_(pVui#GG&(|7LK#jvk*P3)WEdZ?Yel}S$Lc(~J1MQm2P{0LA55VM$HxY8Z8U=He(ZCRm zs(?ZrhMe|SX@He|z~1Q#TEM`AJDvq=1W6SpHR~T!1WYI-B+EKH6oTi+frc_U$Wgc# z8pGI1E0GJIS*7QuDBKJi9p>~)jWqmuONp(Jd+CY+neU^ zauVJ9L{LCS6b^7Y_pg0zdVr=7Fn=CyKjIw+c`QX}ad@s4$CN{TVA`^tU##aKpdj;!#mr+F)7BHS znQR%(ixnw9^j#tyNTlN2b9cy{^7ebWBCfaiWMlxKTm0AqgAquh0VJmXpA;~Zu_yuS z|9gQ|D*NHJOJ?Ldp{0i(%nUW2V+0Lj8EHL=wOc3iSPHeh3tSWiR`K?MTTgy|D%Hkn zPW;`vccNk^_5zfSX78wY4N1`@*y*NP~UzP28 z9kJmJCj2N5xU_aLl?S!!6YLfmdR?VwpjlkGxRN=tiBN!Rh^7jcB&~<2PIAoXj+u=X38V&V)eUWbeUJD2@v5+3 zVX(tARCjzsG=(i}sw|fVvfI!)-@Ut`>Gj;%;tjv zt+d^v6IZeEm4y)zYr3B`k8wMpY3^R$?K7GZ^dPz`cHJ@KbC%jN{BhY^%G>Y)XJ~HC z9izfPY2%j+_y~~r=iQMWp>+EwoFfuAguK(Ru$aC5`q+!R@uhS$mn>vwEsK;Jel?S` zTpbGxzoX+75ZCeF0=K#&z0mP3$IXyoJ_0cE3f`L!H-4w6!rgl7nq?ff`GfEfJ^D%A zwVlg*FSPklG~tXeR-SwmF4L?o`0|0@U4HuaMy#`Zzgta0L1B(XSV{ z64J$4&*Umm34MQ}GrPqvxwN8osQ)#@+Ov$=O&Vh*-LwY*sPMBGZf{O*W|d4Tk9OX0 zzs&>vlp*=EP8S;TG2fXn0Q21~cUEwK8jtmKcqoerlbt!zq{7_J$%N5Bl)5%Zo|XZKyAFcP|HLvnx$tDhgpSg=+`Ee%aEqSK zK0PiS?ch#MSFfD^tbtwAk9Nf5vhZY#&3_WTY~@Nb@>fwhQ~teT11ka;I;*P5h>?Wd zI;if4AHkA$@5LOeP{nwe50)-AT)xZ)xqJ@<^ zujfjWGEY%oJ%WrOaC?ViQ#sdc5@u$Y9|1O>Qu|0^iwnKT3G^`G#^gw!^K~mrpTKL{ zLhhR_q`j?^NSx9Zp~{r>bP{v%fKirrl1JiiSJ#Gub}Ya!dI*p;Un3%L>-qQPcrnRC zN78lC;M{6ZRx}$x8P+fQn3BS%HL>dKR58@y=({Kw8>e%;`PJ1NfFlTDRw979u=LC0 zPcDBzBEVlxGNN*YI)Mp6t%Ws1!wdtr4T)zI#mj)u)xzBh!m|SG8tv7?$lb+Ln1LOn z<3j+N4(-YQV?FGr5y0eRN4Q4%G%F_UE!&lhDI;10oG$)xc_Yi@WprzP_2crg4FJ(jJh(9mCE||Su z-vCTcNCb%?5D#v@b}+nll4!Se+fm^WfEkCZ{l&fv!sKWtb!h$V3yJd+WeHtZ*7XpJ zyMo?;>N9Nzt33wck-4!#i;ay4lwb$vlh;q5; zx7^0zZ!>)buV5C++MUDw1r_p;B0WYXpg$KGxxcv24#1aj(W;ehbQ>e0H}J{)Wp-Nc zwJu_?DD*2>n>KI5#b~v^;nD|THi&1?-woCW+rQQ`SU!Pce5+BKQGVC-^Ed28Up?r! z&i$yV?LXkRzm!~ishhiv89|+!_gVn?&9QmKpX~aE8s_fo+N@k%WBfxT`H^SYTSQQA z%x|RfV01$p;usEOp+9vHakwMWaC-4=+wW0cuQhlsf@hpaA92s`%&p355UPx*O2cBsil_nV(KlK3r7MCCzj2o&eOGCA|r1zUhaf~d{T zyDqgEnj#1?seG9R6gKwvpZ(`ZF!UY4s^2y}W+pph4+|I8l_UQZG=r=AM%MfxfU8_Qh9}EahTJR%d zhu=N|z;ANM@=hQHsOrL))J?3?THLo}j2vTrLyfzbq8b`v z-nmqJTX(czJp>rj;(;w1jZ>>$zy0rl}bLa5|$G*maDp#j{mZ zRR{ho{m?s;nmDm%UKjHA;K88Nl^YY=w6L*+HhUQjz&;m7m|&9SQ)>Jkb1~-3Lm1CJF(tl5Lm4dk`;=a4;>c zebS8t&Il0w!BQ^a_3IjK?R1miGXij!k3NB}XM;Vaw8qlBOYJfTOD25hziXXbHrqucuNqc#21G~7U4+P#JSay4Pb(?_1On=0-{vgK9@AXGJI-A(&9~mdFQmfg;MIWR8rgSZSA|Iv z+-;}-ZKTWqfXy&80HJT?fR^{@Rk+39(`cM2{D4HHZU0Pl>a+Is>M9Br}m-}^> zDafN^0Gb*`g8;KWE@@|JxpJOw&FWIIO@4j4B$(1MLa-D;#0$`Hl>lp#D0}a2;Mh{l>5BV{PcG?Cs5C+(Gwb17= z_=k5oItr)+LkbRNeB4zzCoWf=W%@9oP1WQFqXU=V=TBOjIu8LH4QZ+R(J3ve@!G>H zFL&JS)65g^7)kGLNZF>idJfT#gI1ln#)SU}3SAg zDO4Rfk4^;0LKiTqd(cB1$d+QrwLL+)*kcW>o(|}zLbIG39vsWgQTahti~nI}HvgP~ zYyQA(cv4V=iSH)z-nuM zit3|CDpcXAdy?!^QSMMQOt_H4J2B*!Qm!Ry+{grF%K?X*GAiE?k+3B2%o|A3oYD&Y zB8XpMK>P>lL|vSL9*fF+Tv|D0&cMC}E~)iRQs>3jN;l?`^U`7{$bDY4xR}*#cIG~v z95GNH9xOq%r(_`x0TPQ$qZNibp;k#PbMZ$X6M3JB|MvX24}lMTUa$+YkOo@(C*|xA zueH~Op&Ok8DXzN$+cU6B&KZ`Y$~Y`ZgP%7fWdAf1!X8qywqF_&$BjjyYhY!_70tbg z>L&WK-`w6IaNd9p0H@UUb#ZT(^QILQ?(ehTQ@;~7zPb@Q_xAh9SFWw)H#pSo^BN z6x)5sf>aC0W=3=ppDI0TJFB`g1Y#Tkwb$>%xAr)fSKsx*z)BT(x+oRI9dX2b6!0_%`q7&NaC!`6^e^g_9!&T3u>?fJ`T|!u4QM}1PTcHtiP3P7+;gihz2D%_%a;Ld%hyt7 zIXbb>UilSXX<3lsW|OJJ34yLu_e9frEK|IZhBulw{rBVwU;@IlIn7RkRZ8yIU6IBv zyi87)1XN|SV1ow?;rztjcB!%V%}k#w69Va#yDX3`x2mRVV~>Y*sq*#BTxSE5zH5p8 zUxYuPSQ#D?BomK6X;xl^Cw%?$z8I@j+Amo*&jb<{FNUX<9-a|}B0+dHbd8f)r4V1F z`$dnhu9DE;=66h8C?=%t7bO@!{-=5y(t7{;=936;xC`bb(ryQ|LMs0XLgts~wlIKa zgIvI?zuqFCVJUfXb&atYbbH3i=E%^2$tJ4w!SdX$uLSwj`M}1%7RMppo+;C_?i33B zh1K_|8kS~i<8d>u;`TN+ND3kV+qpb)%v~}$0bF&Vq)48#t{ZUtM5bFwu2?+aRx&e<390?|7iVe))2XT7xfXIh%;(;uZjH_7^T&0wt{uzWzn#tVSK`8v z_W9&70{8l2;=x#6BFnp3)XS5$yG!Y#+4rkxIC-cs0QAUfvG?;cwH8*VAfr-b;}vG7 z+Qi90Czd{2Q+exwKc9ut`VK+6nEv^IN4!Qbg%0(h@)T;FEw3xlgSt>w5HBl9gUZl0 zB1&{KLN5Qv1Z<-~hNgP%wNq4Ru=>FgF6yi5i~b9t-MrtC4bSW)_Z8KH9^QzKtGI1j zu(M%(O6UCf3g1!Zq1&nk=hAr~lR4H&N)#Pt#~2CjT9k`d_&B0 zRs8)N3mTxEIIw!a?Fv#>E1fGAUV1w40(9E>wtJ(3u(Dt1HIU8N>0(Yvsp!2Hu5&6<EiR#OMlVqasf)^E zL>Y=oFpK|G5-yy1$8C=R31S<+3Gxp|AQEgIKtYa9-$bUDoHQar5Zt5eLC(n!8qi4Y-%|ng6{J-+ z(K&z-1!U=gNObWdjeo#JE58OGZzUZE2=Gw0);W>U`@JYgH&3Og7uze#1iFc|2tap) zIv(B=s|mGvzyv)K93oO1uw&kekpAJxKr#mrZyu$z1iwfS;S5A#-okxi@*45qR1Df= zxW!_;fdQxTQkt&+g7w1iwJ)oEboQhOKuyVN(sE}atDhCce&|dqutVsbbwAPC@b54qG z!6_kqcFbqJf6GdzgF5uTf@CxQr&8RYEECRP`@hi#Td!gxP1uh4|5NI&JXvvZaY$Q#*4Td(G`903yCO}zb$%757|Tdrnur&LDj1c^al^EN+CiG=t3*|XE7 z9n|-;0<6YN?Tu|sthbh$@~x+T;jymEeUQ)C^~52G3S#}UfD-4qaJ*YgPuOH=&>K_zu4H+w|JlM50lQsU(uKKOCRLM)2FS*R z?5%knmut%0D7RP!L>L>ukW7HY>}UK+d-i%USJBI}b)>t7f(1vA2fymfC3ESshRM18 zxzoQ^9w@lxkZS+z7SCVO5FZoV&I7DnPdG1t`&3v=k#zP!PF2>y!M&B3(BiS=7XdqM z&jRk93$nwA^@nCKkXe3=uNUnO1=!eHY8cdI>X`~Atgt{`ulb5ctBwSxnYufjovseS zw|Rxfq7Ay^yVV2Hh1A$q*oK61M0=v#PQ?Swk&+N`lS z<;UY4-!jSm9SNmC_bsN{${{D)Lx3X}**|WYC4(I)-mLLGZW^+MM?nNE09TdhVO(Fz zjL0#jO)@7H3ihRCtDh$9Lj>af`qi*ryfm47i6rqy5@p6k^UVg|@?cQDD_i=7;*s^} zPJL#>&+0&SkIA_gU3RFHMIME(c5Ny7gTr(aD=!XK2>A{c1%wqMiGifSt2Y4R2tpHk&s`4Oi7U1fXOZtmxh90z`!y>4a zv(j%96HE(xOP1G(_R{&8Go8aH%icGo-RiaLy|WcSdh|3N6NQRgn(*LHcWT0n2&X^b zr+NfE$#))Lz%dBFH~L+CfD|hzN!gz`yKh#q_RGFBeSiMt*8seQlX%06F=Vp%!J&{p z{5wexaD?6zoEt;NdUnUKWxmY<))8`y(Jp*1_?2NyMh?mcQB$8)53 z3dEsmk1!|x65Jl4e_vCd|7+#gUW(kI-=F&m@^2j)rU(w{0lIvwJFv#IS3H$$4JJS>V`Ou z8Q+ZqwSc{S>6k23V%auzyaieA&A6<;ogE`l=I?D^{KWJrnDIX%C<84}u8*(@HrXll z?Rk`tnvCFa=zoU~5}J~6A)CblE!LNz@Qb|XV_;ZV;ueYNVeCH3Zg zd+H5Fo1#0uhaJxRnSWL*NYj5udUHGTDfq}{>)dL%ancPXjxBsr6YDv&TlqmRI$vAI+s*E{(5_J{_lOQ6fR<4}}521zu7q1W& z$05#68ivbOW`Id1qjuY+jAc>lx8t=}Cb&-4wz%G3Cn#$dUUtsDeqh_z=zE)MmT(STA{IB{?g?t{*ADy}&Px+DNfuoV2wfB_Z zbRSj6)D;jNz#1>J*#p1zq8<3DKt-7D3RF3pQ2#D=v8`q`MZjWrZh8{=omb)cB>|ft zF}KjXlE0xP0e?Jt{cSflf=qD_Oiv+x<(;~BKD@C$@?f2;HaoEDaZR92eCuvy4?ftq zVCBJ8+|qHDMJMgh%inLVdaguJOTFFr`CR+)!4lip9ojt+@aP&nm_17y7|Q>6WtH7& zO>vywQdRigbq&aSB3wU#B6=lIR5vlK*B6$#CLO%9|A7ypF1F9FYh=1&#(Hpf|JB$d zrW#CbV2YbM*ufx6L^w>Vkq%N&(hz6y;EId3r!>q=$t+)sMD|B9VF`ut6BLr4e!N|7OzbTJs4S0 z;5gL%lln3Hr!54$Ln~g>ID%Fxvny23`i_r1 zV3b~^f-ca>NT}TQ@J;;R4`bxzvPV|GcVseoLmr6k;A-Do*uW6+Y1O;)I+OKYooWzg|Dm&WdRoT8?V|PNj&|Yvkv9MhM>C{E^WGZPXlsx_-^{%Jx zYC5x&Fipi+A>r%3I3AwB>ZAdiS_O|3Y8QzSVNIl&r}N>~pJb!)C1{g8DJRn}cDD&! z2AZ{QUAD@rqq!TQ#{>J@Uo?JgxssyNjkj4kAQPif<&=G!Q)jri0daY(m&p(Q48HUh?N3|DnmJcajb!8b; zPU-DGxA4S_1Z`AiBlP_37J^C}`+f7)km|xAk4QC1fBqU|VvNn`oJw3}IFM+FVS8bknqFHMg*!BW@8dqDM;?utI zgc@2gu~~8{7WHY?tn_pxbq5dA@QfKweC3ZpsUQXbO;nhWDB91Y+bM~B^FVK`ul74x8&aRX{4=ZS$}R7>>`Nu(ocntn<|ejk z`i-=ogwt{*UNRfHuDtsE9)aZw-i!a%JrhqK;tjukSWQKRy?M5EDzIyq0g017$aK9U z!~!#;xhMINdMh-*mUIDc0KZya)ia91O>wA&!fOnrL+MlvGckK1kRE0Y>#flO%)MS4 z7@*)#Fs=9hWQFkQKYI9oFQkgwGs)_!!hG@xWjY{CIMK}slfU8pq<5A5eao zKA6q;GWxMUD1SeHUPEeWg}+x(W?opE57N<6JG?aM_e%|f0iv}E+5oi9XW9$8%-j^? z_$lsP@OhJJ-Xs4})b`uppyRihg@;>f-5h_pX+>f~?3JHiz?npJTTh0hTm;y$#?E;SKF4VTRNF7@h_s_-Adw>eAc z6Z?;ubqRkk{33xl`^L829{qJRLM!rW9);W1*Dxybemqk_tg~v6fx9{0K&!eAj zw?5Ky`(<|U{8{}E!B4)-?X!PT2ik~W<+1%|9(qSIj?Qkkb*sM%AT!d8secdFd$*HD zx7uF&t2z2XTlx=Y-!G%ivPLUu7$i0nU25@y^W=7qdiyrVO~LYUjY~R#^B+V+DN8aK~|9NBcb&$@c(}ou#|`Yi(wx!0^QgChCb+>wp*Wxv;fiIo2%t# z_nR$%>GRFBGt^IZjI~B{uLue47!r4PtnM$L*(2<8>3~*h($N_^9%6{oxH;inulkLO zE~O>*wC#KsiM@4o?n&Ek`;T>tg1_EOJN9Gd;+xT2sdPQQyWzMA=6NFDlSyAQ)+Mv7 z;Dk`}?EUSB_C)hg!N*GW1tB|s*4Jy4CPGbI(@aL4N49zB%7TOV5xZn0BQU!i6>n@7 ROSwt}hPp;NC0Y*Q{|hqGssjK3 literal 0 HcmV?d00001 From d597b0416dfcbc15f71b4a449aacfaed7df5e092 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 29 Sep 2021 15:28:38 +0200 Subject: [PATCH 27/82] Docs moved from Foundations --- .../Docs-Nodes/T/Trading/Trading-Bot/trading-bot.json | 0 .../T/Trading/Trading-Engine/trading-engine.json | 0 .../Docs-Nodes/T/Trading/Trading-Mine/trading-mine.json | 0 .../T/Trading/Trading-System/trading-system.json | 0 .../UI/Function-Libraries/UiObjectsFromNodes.js | 9 +++++++++ .../Docs-Nodes/L/Learning/Learning-Bot/learning-bot.json | 0 .../L/Learning/Learning-Mine/learning-mine.json | 0 .../L/Learning/Learning-System/learning-system.json | 0 8 files changed, 9 insertions(+) rename Projects/{Foundations => Algorithmic-Trading}/Schemas/Docs-Nodes/T/Trading/Trading-Bot/trading-bot.json (100%) rename Projects/{Foundations => Algorithmic-Trading}/Schemas/Docs-Nodes/T/Trading/Trading-Engine/trading-engine.json (100%) rename Projects/{Foundations => Algorithmic-Trading}/Schemas/Docs-Nodes/T/Trading/Trading-Mine/trading-mine.json (100%) rename Projects/{Foundations => Algorithmic-Trading}/Schemas/Docs-Nodes/T/Trading/Trading-System/trading-system.json (100%) rename Projects/{Foundations => Machine-Learning}/Schemas/Docs-Nodes/L/Learning/Learning-Bot/learning-bot.json (100%) rename Projects/{Foundations => Machine-Learning}/Schemas/Docs-Nodes/L/Learning/Learning-Mine/learning-mine.json (100%) rename Projects/{Foundations => Machine-Learning}/Schemas/Docs-Nodes/L/Learning/Learning-System/learning-system.json (100%) diff --git a/Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-Bot/trading-bot.json b/Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-Bot/trading-bot.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-Bot/trading-bot.json rename to Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-Bot/trading-bot.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-Engine/trading-engine.json b/Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-Engine/trading-engine.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-Engine/trading-engine.json rename to Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-Engine/trading-engine.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-Mine/trading-mine.json b/Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-Mine/trading-mine.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-Mine/trading-mine.json rename to Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-Mine/trading-mine.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-System/trading-system.json b/Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-System/trading-system.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-System/trading-system.json rename to Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-System/trading-system.json diff --git a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js index 7043b518a..25d6fb185 100644 --- a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js +++ b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js @@ -463,6 +463,15 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { node.project = "Algorithmic-Trading" } + if ( + node.type === 'Learning Engine' || + node.type === 'Learning Mine' || + node.type === 'Learning System' || + node.type === 'Learning Bot' + ) { + node.project = "Machine-Learning" + } + if ( node.type === 'Plugins' || node.type === 'Plugin Tutorials' || diff --git a/Projects/Foundations/Schemas/Docs-Nodes/L/Learning/Learning-Bot/learning-bot.json b/Projects/Machine-Learning/Schemas/Docs-Nodes/L/Learning/Learning-Bot/learning-bot.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/L/Learning/Learning-Bot/learning-bot.json rename to Projects/Machine-Learning/Schemas/Docs-Nodes/L/Learning/Learning-Bot/learning-bot.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/L/Learning/Learning-Mine/learning-mine.json b/Projects/Machine-Learning/Schemas/Docs-Nodes/L/Learning/Learning-Mine/learning-mine.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/L/Learning/Learning-Mine/learning-mine.json rename to Projects/Machine-Learning/Schemas/Docs-Nodes/L/Learning/Learning-Mine/learning-mine.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/L/Learning/Learning-System/learning-system.json b/Projects/Machine-Learning/Schemas/Docs-Nodes/L/Learning/Learning-System/learning-system.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/L/Learning/Learning-System/learning-system.json rename to Projects/Machine-Learning/Schemas/Docs-Nodes/L/Learning/Learning-System/learning-system.json From 215ec526a164f7c422359057c87b5c2ae19e386d Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 29 Sep 2021 15:40:35 +0200 Subject: [PATCH 28/82] ML Plugins fixed --- .../Schemas/App-Schema/plugin-learning-engines.json | 4 +++- .../Schemas/App-Schema/plugin-learning-mines.json | 4 +++- .../Schemas/App-Schema/plugin-learning-systems.json | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-engines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-engines.json index e436c13f6..024892155 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-engines.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-engines.json @@ -7,7 +7,9 @@ "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", - "relatedUiObject": "Learning Engine", + "iconPathOn": "learning-engine", + "iconPathOff": "learning-engine", + "iconProject": "Machine-Learning", "actionFunction": "payload.executeAction" }, { diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-mines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-mines.json index 1fbe71833..b807e879a 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-mines.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-mines.json @@ -7,7 +7,9 @@ "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", - "relatedUiObject": "Learning Mine", + "iconPathOn": "learning-mine", + "iconPathOff": "learning-mine", + "iconProject": "Machine-Learning", "actionFunction": "payload.executeAction" }, { diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-systems.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-systems.json index e73b6cd87..f1279f14d 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-systems.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-systems.json @@ -7,7 +7,9 @@ "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", - "relatedUiObject": "Learning System", + "iconPathOn": "learning-system", + "iconPathOff": "learning-system", + "iconProject": "Machine-Learning", "actionFunction": "payload.executeAction" }, { From c7db94c63ab1a8b7e9e8d07bea9d18120d610fda Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 29 Sep 2021 15:49:48 +0200 Subject: [PATCH 29/82] Plugins Moved --- .../Plugins/Learning-Engines/Low-Frequency.json | 0 .../Plugins/Learning-Mines/Masters.json | 0 .../Plugins/Learning-Systems/Sandbox.json | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename Projects/{Foundations => Machine-Learning}/Plugins/Learning-Engines/Low-Frequency.json (100%) rename Projects/{Foundations => Machine-Learning}/Plugins/Learning-Mines/Masters.json (100%) rename Projects/{Foundations => Machine-Learning}/Plugins/Learning-Systems/Sandbox.json (100%) diff --git a/Projects/Foundations/Plugins/Learning-Engines/Low-Frequency.json b/Projects/Machine-Learning/Plugins/Learning-Engines/Low-Frequency.json similarity index 100% rename from Projects/Foundations/Plugins/Learning-Engines/Low-Frequency.json rename to Projects/Machine-Learning/Plugins/Learning-Engines/Low-Frequency.json diff --git a/Projects/Foundations/Plugins/Learning-Mines/Masters.json b/Projects/Machine-Learning/Plugins/Learning-Mines/Masters.json similarity index 100% rename from Projects/Foundations/Plugins/Learning-Mines/Masters.json rename to Projects/Machine-Learning/Plugins/Learning-Mines/Masters.json diff --git a/Projects/Foundations/Plugins/Learning-Systems/Sandbox.json b/Projects/Machine-Learning/Plugins/Learning-Systems/Sandbox.json similarity index 100% rename from Projects/Foundations/Plugins/Learning-Systems/Sandbox.json rename to Projects/Machine-Learning/Plugins/Learning-Systems/Sandbox.json From 1218ff377da96e05de69ebc226bd186d5509dd19 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 29 Sep 2021 17:03:13 +0200 Subject: [PATCH 30/82] Missing Action Project --- .../Schemas/App-Schema/plugin-api-maps.json | 3 ++- .../Schemas/App-Schema/plugin-data-mines.json | 3 ++- .../Schemas/App-Schema/plugin-file.json | 12 ++++++++---- .../Schemas/App-Schema/plugin-learning-engines.json | 3 ++- .../Schemas/App-Schema/plugin-learning-mines.json | 3 ++- .../Schemas/App-Schema/plugin-learning-systems.json | 3 ++- .../Schemas/App-Schema/plugin-project.json | 3 ++- .../Schemas/App-Schema/plugin-trading-engines.json | 3 ++- .../Schemas/App-Schema/plugin-trading-mines.json | 3 ++- .../Schemas/App-Schema/plugin-trading-systems.json | 3 ++- .../Schemas/App-Schema/plugin-tutorials.json | 3 ++- .../Schemas/App-Schema/plugins.json | 3 ++- .../UI/Function-Libraries/PluginsFunctions.js | 6 +++--- .../UI/Function-Libraries/UiObjectsFromNodes.js | 6 +++--- 14 files changed, 36 insertions(+), 21 deletions(-) diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-api-maps.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-api-maps.json index 207cde2d5..ebe81c9a8 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-api-maps.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-api-maps.json @@ -8,7 +8,8 @@ "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", "relatedUiObject": "API Map", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-data-mines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-data-mines.json index b84e59308..841ace1bc 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-data-mines.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-data-mines.json @@ -10,7 +10,8 @@ "iconPathOn": "data-mine", "iconPathOff": "data-mine", "iconProject": "Data-Mining", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-file.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-file.json index aefb2ba77..96f6a4501 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-file.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-file.json @@ -15,25 +15,29 @@ "propertyToCheckFor": "pluginFilePosition", "actionFunction": "payload.executeAction", "label": "Add Plugin File Position", - "relatedUiObject": "Plugin File Position" + "relatedUiObject": "Plugin File Position", + "actionProject": "Foundations" }, { "action": "Enable Saving With Workspace", "actionFunction": "payload.executeAction", "label": "Enable Saving With Workspace", - "relatedUiObject": "Plugin File" + "relatedUiObject": "Plugin File", + "actionProject": "Community-Plugins" }, { "action": "Disable Saving With Workspace", "actionFunction": "payload.executeAction", "label": "Disable Saving With Workspace", - "relatedUiObject": "Plugin File" + "relatedUiObject": "Plugin File", + "actionProject": "Community-Plugins" }, { "action": "Save Plugin", "actionFunction": "payload.executeAction", "label": "Save Plugin", - "relatedUiObject": "Plugin File" + "relatedUiObject": "Plugin File", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-engines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-engines.json index 024892155..810b34ef9 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-engines.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-engines.json @@ -10,7 +10,8 @@ "iconPathOn": "learning-engine", "iconPathOff": "learning-engine", "iconProject": "Machine-Learning", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-mines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-mines.json index b807e879a..db072d708 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-mines.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-mines.json @@ -10,7 +10,8 @@ "iconPathOn": "learning-mine", "iconPathOff": "learning-mine", "iconProject": "Machine-Learning", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-systems.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-systems.json index f1279f14d..56f236216 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-systems.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-systems.json @@ -10,7 +10,8 @@ "iconPathOn": "learning-system", "iconPathOff": "learning-system", "iconProject": "Machine-Learning", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-project.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-project.json index b4f39f5c6..2ba4668f7 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-project.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-project.json @@ -13,7 +13,8 @@ "action": "Add Missing Plugin Types", "label": "Add Missing Plugin Types", "relatedUiObject": "Plugins", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-engines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-engines.json index 695977ab2..0c19d38a4 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-engines.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-engines.json @@ -10,7 +10,8 @@ "iconPathOn": "trading-engine", "iconPathOff": "trading-engine", "iconProject": "Algorithmic-Trading", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-mines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-mines.json index a1c864624..9ca446ab8 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-mines.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-mines.json @@ -10,7 +10,8 @@ "iconPathOn": "trading-mine", "iconPathOff": "trading-mine", "iconProject": "Algorithmic-Trading", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-systems.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-systems.json index c79a28a2e..0195fd6fe 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-systems.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-systems.json @@ -10,7 +10,8 @@ "iconPathOn": "trading-system", "iconPathOff": "trading-system", "iconProject": "Algorithmic-Trading", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugin-tutorials.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-tutorials.json index f2338a322..bd34dc710 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugin-tutorials.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-tutorials.json @@ -9,7 +9,8 @@ "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", "relatedUiObject": "Tutorial", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugins.json b/Projects/Community-Plugins/Schemas/App-Schema/plugins.json index 8f68f4ba4..7ec46df76 100644 --- a/Projects/Community-Plugins/Schemas/App-Schema/plugins.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugins.json @@ -8,7 +8,8 @@ "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", "relatedUiObject": "Plugin Project", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", diff --git a/Projects/Community-Plugins/UI/Function-Libraries/PluginsFunctions.js b/Projects/Community-Plugins/UI/Function-Libraries/PluginsFunctions.js index d2c010698..a13088a57 100644 --- a/Projects/Community-Plugins/UI/Function-Libraries/PluginsFunctions.js +++ b/Projects/Community-Plugins/UI/Function-Libraries/PluginsFunctions.js @@ -125,7 +125,7 @@ function newPluginsFunctionLibraryPluginsFunctions() { UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Learning-Mines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Mines', 'Learning Mine', 'Foundations') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Mines', 'Learning Mine', 'Machine-Learning') } } @@ -141,7 +141,7 @@ function newPluginsFunctionLibraryPluginsFunctions() { UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Learning-Systems', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Systems', 'Learning System', 'Foundations') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Systems', 'Learning System', 'Machine-Learning') } } @@ -157,7 +157,7 @@ function newPluginsFunctionLibraryPluginsFunctions() { UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Learning-Engines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Engines', 'Learning Engine', 'Foundations') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Engines', 'Learning Engine', 'Machine-Learning') } } diff --git a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js index 25d6fb185..3b4ad930c 100644 --- a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js +++ b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js @@ -84,9 +84,6 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { totalPlugin = totalPlugin + project.pluginTradingEngines.pluginFiles.length pluginAllTheseFiles(project.pluginTradingEngines.pluginFiles, 'Trading-Engines') } - /* - Foundations Plugin Types - */ if (project.pluginLearningMines !== undefined) { totalPlugin = totalPlugin + project.pluginLearningMines.pluginFiles.length pluginAllTheseFiles(project.pluginLearningMines.pluginFiles, 'Learning-Mines') @@ -99,6 +96,9 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { totalPlugin = totalPlugin + project.pluginLearningEngines.pluginFiles.length pluginAllTheseFiles(project.pluginLearningEngines.pluginFiles, 'Learning-Engines') } + /* + Foundations Plugin Types + */ if (project.pluginTutorials !== undefined) { totalPlugin = totalPlugin + project.pluginTutorials.pluginFiles.length pluginAllTheseFiles(project.pluginTutorials.pluginFiles, 'Tutorials') From c2bd990c9d79a9673aca0c3c1558cb3ba423ef54 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 29 Sep 2021 19:32:07 +0200 Subject: [PATCH 31/82] Bug Fixed with Action Project --- Projects/Foundations/UI/Function-Libraries/ActionSwitch.js | 2 +- .../Machine-Learning/Schemas/App-Schema/learning-mine.json | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js index e66088a46..9ac877f93 100644 --- a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js @@ -101,7 +101,7 @@ function newFoundationsActionSwitch() { break case 'Add UI Object': { - UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(action.node, action.relatedNodeType, action.rootNodes) + UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(action.node, action.relatedNodeType, action.rootNodes, action.project) } break case 'Add Missing Children': diff --git a/Projects/Machine-Learning/Schemas/App-Schema/learning-mine.json b/Projects/Machine-Learning/Schemas/App-Schema/learning-mine.json index 24b9b91bb..989b24cdc 100644 --- a/Projects/Machine-Learning/Schemas/App-Schema/learning-mine.json +++ b/Projects/Machine-Learning/Schemas/App-Schema/learning-mine.json @@ -21,6 +21,7 @@ "action": "Add UI Object", "label": "Add Plotter", "relatedUiObject": "Plotter", + "relatedUiObjectProject": "Foundations", "actionFunction": "payload.executeAction", "actionProject": "Foundations" }, @@ -56,7 +57,7 @@ "name": "plotters", "type": "array", "childType": "Plotter", - "project": "Algorithmic-Trading" + "project": "Foundations" } ] } \ No newline at end of file From 36c26570ac9a7369eb43b83c59426eb66ef85b34 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 29 Sep 2021 19:47:35 +0200 Subject: [PATCH 32/82] Update Getting-Started-Tutorials.json --- .../Workspaces/Getting-Started-Tutorials.json | 369 +++++++++++++++--- 1 file changed, 310 insertions(+), 59 deletions(-) diff --git a/Projects/Foundations/Plugins/Workspaces/Getting-Started-Tutorials.json b/Projects/Foundations/Plugins/Workspaces/Getting-Started-Tutorials.json index a6eb574dc..4640f55fb 100644 --- a/Projects/Foundations/Plugins/Workspaces/Getting-Started-Tutorials.json +++ b/Projects/Foundations/Plugins/Workspaces/Getting-Started-Tutorials.json @@ -744,17 +744,17 @@ "id": "588e6946-31d9-4389-8cf2-37715795ba4d" }, "referenceParentCombinedNodePath": [ - [ - "Getting Started Tutorials", - "Workspace" - ], [ "New Data-Mining Project", - "Data-Mining Project" + "Data-Mining Project", + "Data-Mining", + "c80ac0bd-1c21-4e7c-b4b8-020e212bd6f4" ], [ "Data-Mining", - "Project Definition" + "Project Definition", + "Foundations", + "588e6946-31d9-4389-8cf2-37715795ba4d" ] ] } @@ -790,7 +790,7 @@ "projectLearningTasks": [ { "type": "Project Learning Tasks", - "name": "Foundations", + "name": "Machine-Learning", "project": "Foundations", "exchangeLearningTasks": [ { @@ -806,17 +806,17 @@ "id": "aa592e1f-24db-41c7-a5e7-67723812fbce", "savedPayload": { "position": { - "x": 25839.356993272086, - "y": 29987.688294073963 + "x": 25897.356993272086, + "y": 29983.688294073963 }, "targetPosition": { - "x": 25689.356993272086, - "y": 30247.495915209296 + "x": 25747.356993272086, + "y": 30243.495915209296 }, "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 @@ -867,12 +867,12 @@ "id": "598be123-5912-4b2c-857d-aee0667c620b", "savedPayload": { "position": { - "x": 25689.356993272086, - "y": 30247.495915209296 + "x": 25747.356993272086, + "y": 30243.495915209296 }, "targetPosition": { - "x": 25539.356993272086, - "y": 30507.30353634463 + "x": 25597.356993272086, + "y": 30503.30353634463 }, "floatingObject": { "isPinned": false, @@ -916,17 +916,17 @@ "id": "7619d28e-1012-4d41-9d65-75d44e0b42b4", "savedPayload": { "position": { - "x": 25539.356993272086, - "y": 30507.30353634463 + "x": 25597.356993272086, + "y": 30503.30353634463 }, "targetPosition": { - "x": 25389.356993272086, - "y": 30767.11115747996 + "x": 25447.356993272086, + "y": 30763.11115747996 }, "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 3, "distanceToParent": 3, "arrangementStyle": 0 @@ -936,21 +936,21 @@ }, "referenceParent": { "type": "Project Definition", - "name": "Foundations", - "id": "a2a04e12-604e-43f8-a986-1b8ca3b043cb" + "name": "Machine-Learning", + "id": "b15d5bbb-0433-40c3-bdd7-3d2aa0ddc389" }, "referenceParentCombinedNodePath": [ [ - "New Foundations Project", - "Foundations Project", - "Foundations", - "cf9f8b3b-77c6-43c6-b01f-95cf366a91f6" + "New Machine-Learning Project", + "Machine-Learning Project", + "Machine-Learning", + "949164da-b9f8-4e0a-8482-f1fd06a22cd0" ], [ - "Foundations", + "Machine-Learning", "Project Definition", "Foundations", - "a2a04e12-604e-43f8-a986-1b8ca3b043cb" + "b15d5bbb-0433-40c3-bdd7-3d2aa0ddc389" ] ] } @@ -1703,17 +1703,17 @@ "id": "159d6c95-233b-4d79-8fe0-b1d75d40f90b" }, "referenceParentCombinedNodePath": [ - [ - "Getting Started Tutorials", - "Workspace" - ], [ "New Algorithmic-Trading Project", - "Algorithmic-Trading Project" + "Algorithmic-Trading Project", + "Algorithmic-Trading", + "96734230-bb91-4527-b2a9-e2f16eb0be96" ], [ "Algorithmic-Trading", - "Project Definition" + "Project Definition", + "Foundations", + "159d6c95-233b-4d79-8fe0-b1d75d40f90b" ] ] } @@ -10732,7 +10732,7 @@ "floatingObject": { "isPinned": true, "isFrozen": false, - "isCollapsed": true, + "isCollapsed": false, "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 @@ -57998,7 +57998,7 @@ "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 @@ -58101,8 +58101,8 @@ "id": "9e34391d-8a7f-465d-aaae-d1aab31d27af", "savedPayload": { "position": { - "x": 37514.19161419073, - "y": 10951.638658800908 + "x": 37536.75434110439, + "y": 10920.994621131626 }, "targetPosition": { "x": 37284.378281255034, @@ -58129,8 +58129,8 @@ "id": "005d0fc0-5d81-4607-856b-32bcb1665b64", "savedPayload": { "position": { - "x": 37336.472734555115, - "y": 11054.244701798609 + "x": 37409.0027851556, + "y": 11031.691974501302 }, "targetPosition": { "x": 37284.378281255034, @@ -58157,8 +58157,8 @@ "id": "bddb8fdb-f325-4615-a828-9935d37583ad", "savedPayload": { "position": { - "x": 37134.378281255034, - "y": 11018.609997030277 + "x": 37241.68382977305, + "y": 11055.748808459226 }, "targetPosition": { "x": 37284.378281255034, @@ -58185,8 +58185,8 @@ "id": "d6649bf0-8e12-456a-a2d0-a7d4617f6843", "savedPayload": { "position": { - "x": 37002.47049501926, - "y": 10861.408418892646 + "x": 37087.92006107145, + "y": 10985.527248201222 }, "targetPosition": { "x": 37284.378281255034, @@ -58213,8 +58213,8 @@ "id": "e72188be-7474-4a0d-85c1-413810bfa807", "savedPayload": { "position": { - "x": 37002.47049501926, - "y": 10656.196332897245 + "x": 36996.530389170686, + "y": 10843.322142947374 }, "targetPosition": { "x": 37284.378281255034, @@ -58241,8 +58241,8 @@ "id": "5614b71b-9e5f-42b0-a6fb-6322564623ea", "savedPayload": { "position": { - "x": 37134.378281255034, - "y": 10498.994754759615 + "x": 36996.530389170686, + "y": 10674.282608842517 }, "targetPosition": { "x": 37284.378281255034, @@ -58269,8 +58269,8 @@ "id": "624a4851-e3d8-411f-8ac3-b1418516f30d", "savedPayload": { "position": { - "x": 37336.472734555115, - "y": 10463.360049991283 + "x": 37087.92006107145, + "y": 10532.077503588669 }, "targetPosition": { "x": 37284.378281255034, @@ -58297,8 +58297,8 @@ "id": "b41eaa84-a3bc-44fc-8199-48cc117cbd27", "savedPayload": { "position": { - "x": 37514.19161419073, - "y": 10565.966092988983 + "x": 37241.68382977305, + "y": 10461.855943330665 }, "targetPosition": { "x": 37284.378281255034, @@ -58316,6 +58316,202 @@ "isRunning": false } } + }, + { + "type": "Plugin Project", + "name": "Machine-Learning", + "config": "{\"codeName\":\"Machine-Learning\"}", + "project": "Community-Plugins", + "pluginLearningMines": { + "type": "Plugin Learning Mines", + "name": "New Plugin Learning Mines", + "project": "Community-Plugins", + "pluginFiles": [], + "id": "691b8eec-79db-42b9-9ca4-d22176ecabdb", + "savedPayload": { + "position": { + "x": 37304.16353127587, + "y": 10204.82785978866 + }, + "targetPosition": { + "x": 37409.0027851556, + "y": 10485.91277728859 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginLearningSystems": { + "type": "Plugin Learning Systems", + "name": "New Plugin Learning Systems", + "project": "Community-Plugins", + "pluginFiles": [], + "id": "99f881d1-74f5-487e-8e2a-4ed83101ce42", + "savedPayload": { + "position": { + "x": 37533.62728905617, + "y": 10213.023178682233 + }, + "targetPosition": { + "x": 37409.0027851556, + "y": 10485.91277728859 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginLearningEngines": { + "type": "Plugin Learning Engines", + "name": "New Plugin Learning Engines", + "project": "Community-Plugins", + "pluginFiles": [], + "id": "1594d693-040c-4762-9c19-ce3212bdddae", + "savedPayload": { + "position": { + "x": 37690.08770265553, + "y": 10381.07352340886 + }, + "targetPosition": { + "x": 37409.0027851556, + "y": 10485.91277728859 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "0c2a59f9-362c-4a72-b9ff-e49dd7c26e7e", + "savedPayload": { + "position": { + "x": 37409.0027851556, + "y": 10485.91277728859 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Foundations", + "config": "{\"codeName\":\"Foundations\"}", + "project": "Community-Plugins", + "pluginTutorials": { + "type": "Plugin Tutorials", + "name": "New Plugin Tutorials", + "project": "Community-Plugins", + "pluginFiles": [], + "id": "cab27915-c4e9-44c7-94d6-e3d20ed0e382", + "savedPayload": { + "position": { + "x": 37522.47976635727, + "y": 10296.949928903363 + }, + "targetPosition": { + "x": 37536.75434110439, + "y": 10596.610130658266 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginApiMaps": { + "type": "Plugin API Maps", + "name": "New Plugin API Maps", + "project": "Community-Plugins", + "pluginFiles": [], + "id": "7ad3f24a-38e4-4f33-a7e1-0d06121c09d0", + "savedPayload": { + "position": { + "x": 37803.40497570086, + "y": 10734.07808717649 + }, + "targetPosition": { + "x": 37536.75434110439, + "y": 10596.610130658266 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "b5c1cb14-d645-4ca5-b34b-553646f65cf4", + "savedPayload": { + "position": { + "x": 37536.75434110439, + "y": 10596.610130658266 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } } ], "id": "bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6", @@ -58600,12 +58796,12 @@ "id": "cf9f8b3b-77c6-43c6-b01f-95cf366a91f6", "savedPayload": { "position": { - "x": 4320.75, - "y": 30833.453560371516 + "x": 4260.875, + "y": 40334.982972136226 }, "targetPosition": { - "x": 4320.75, - "y": 30833.453560371516 + "x": 4260.875, + "y": 40334.982972136226 }, "floatingObject": { "isPinned": true, @@ -62370,11 +62566,11 @@ "referenceParent": { "type": "Workspace", "name": "Getting-Started-Tutorials", - "id": "ba8d157b-86e8-43e6-900d-97909ca0048b" + "id": "c6f0d16a-c053-4794-9066-0fbed2ad370d" }, "referenceParentCombinedNodePath": [ [ - "Getting Started Tutorials", + "Getting-Started-Tutorials", "Workspace" ] ] @@ -69973,6 +70169,61 @@ "isRunning": false } } + }, + { + "type": "Machine-Learning Project", + "name": "New Machine-Learning Project", + "project": "Machine-Learning", + "projectDefinition": { + "type": "Project Definition", + "name": "Machine-Learning", + "config": "{ \n \"codeName\": \"Machine-Learning\"\n}", + "project": "Foundations", + "id": "b15d5bbb-0433-40c3-bdd7-3d2aa0ddc389", + "savedPayload": { + "position": { + "x": 4587.75, + "y": 30875.953560371516 + }, + "targetPosition": { + "x": 4287.75, + "y": 30875.953560371516 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "949164da-b9f8-4e0a-8482-f1fd06a22cd0", + "savedPayload": { + "position": { + "x": 4287.75, + "y": 30875.953560371516 + }, + "targetPosition": { + "x": 4287.75, + "y": 30875.953560371516 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } } ] } \ No newline at end of file From 77624f63c710275f3e02047ba45f57042fe56a83 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 30 Sep 2021 10:30:09 +0200 Subject: [PATCH 33/82] My Workspaces folder moved --- Environment.js | 2 +- EnvironmentForDebug.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Environment.js b/Environment.js index 46b8073f9..a042eaf5b 100644 --- a/Environment.js +++ b/Environment.js @@ -11,7 +11,7 @@ exports.newEnvironment = function () { PATH_TO_PROJECT_SCHEMA: './Projects/ProjectsSchema.json', PATH_TO_CLIENT: './Platform', PATH_TO_DEFAULT_WORKSPACE: './Projects/Foundations/Plugins/Workspaces', - PATH_TO_MY_WORKSPACES: './My-Workspaces', + PATH_TO_MY_WORKSPACES: './Platform/My-Workspaces', PATH_TO_FONTS: './Platform/WebServer/Fonts' } diff --git a/EnvironmentForDebug.js b/EnvironmentForDebug.js index 4bc261afd..5d7671aa7 100644 --- a/EnvironmentForDebug.js +++ b/EnvironmentForDebug.js @@ -16,7 +16,7 @@ exports.newEnvironment = function () { PATH_TO_CLIENT: './Platform', PATH_TO_DESKTOP: './Desktop', PATH_TO_DEFAULT_WORKSPACE: './Projects/Foundations/Plugins/Workspaces', - PATH_TO_MY_WORKSPACES: './My-Workspaces', + PATH_TO_MY_WORKSPACES: './Platform/My-Workspaces', PATH_TO_FONTS: './Platform/WebServer/Fonts' } From c82a2b96abd9501613cdb0398e0057107712fe8f Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 30 Sep 2021 10:44:44 +0200 Subject: [PATCH 34/82] Actions moved to Education Project --- .../UI/Function-Libraries/ActionSwitch.js | 26 +++++++++++++ .../UI/Function-Libraries/ActionSwitch.js | 26 +++++++++++++ .../Schemas/App-Schema/tutorial-step.json | 4 +- .../Schemas/App-Schema/tutorial-topic.json | 4 +- .../Schemas/App-Schema/tutorial.json | 6 +-- .../UI/Function-Libraries/ActionSwitch.js | 38 +++++++++++++++++-- .../UI/Function-Libraries/ActionSwitch.js | 36 +----------------- .../UI/Function-Libraries/ActionSwitch.js | 26 +++++++++++++ 8 files changed, 121 insertions(+), 45 deletions(-) create mode 100644 Projects/Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js create mode 100644 Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js create mode 100644 Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js diff --git a/Projects/Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js b/Projects/Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js new file mode 100644 index 000000000..03bf636ca --- /dev/null +++ b/Projects/Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js @@ -0,0 +1,26 @@ +function newEducationActionSwitch() { + + let thisObject = { + executeAction: executeAction, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function finalize() { + + } + + function initialize() { + /* Nothing to initialize since a Function Library does not hold any state. */ + } + + async function executeAction(action) { + switch (action.name) { + case 'Action Name': { + // Example: return UI.projects.foundations.functionLibraries.onFocus.getNodeThatIsOnFocus(action.node) + } + } + } +} diff --git a/Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js b/Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js new file mode 100644 index 000000000..03bf636ca --- /dev/null +++ b/Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js @@ -0,0 +1,26 @@ +function newEducationActionSwitch() { + + let thisObject = { + executeAction: executeAction, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function finalize() { + + } + + function initialize() { + /* Nothing to initialize since a Function Library does not hold any state. */ + } + + async function executeAction(action) { + switch (action.name) { + case 'Action Name': { + // Example: return UI.projects.foundations.functionLibraries.onFocus.getNodeThatIsOnFocus(action.node) + } + } + } +} diff --git a/Projects/Education/Schemas/App-Schema/tutorial-step.json b/Projects/Education/Schemas/App-Schema/tutorial-step.json index cc05ff412..8f64be60d 100644 --- a/Projects/Education/Schemas/App-Schema/tutorial-step.json +++ b/Projects/Education/Schemas/App-Schema/tutorial-step.json @@ -3,7 +3,7 @@ "menuItems": [ { "action": "Play Tutorial Step", - "actionProject": "Foundations", + "actionProject": "Education", "label": "Play", "iconPathOn": "play", "iconPathOff": "play", @@ -11,7 +11,7 @@ }, { "action": "Resume Tutorial Step", - "actionProject": "Foundations", + "actionProject": "Education", "label": "Resume", "iconPathOn": "resume", "iconPathOff": "resume", diff --git a/Projects/Education/Schemas/App-Schema/tutorial-topic.json b/Projects/Education/Schemas/App-Schema/tutorial-topic.json index 5c68799a9..90d9a08fe 100644 --- a/Projects/Education/Schemas/App-Schema/tutorial-topic.json +++ b/Projects/Education/Schemas/App-Schema/tutorial-topic.json @@ -3,7 +3,7 @@ "menuItems": [ { "action": "Play Tutorial Topic", - "actionProject": "Foundations", + "actionProject": "Education", "label": "Play", "iconPathOn": "play", "iconPathOff": "play", @@ -11,7 +11,7 @@ }, { "action": "Resume Tutorial Topic", - "actionProject": "Foundations", + "actionProject": "Education", "label": "Resume", "iconPathOn": "resume", "iconPathOff": "resume", diff --git a/Projects/Education/Schemas/App-Schema/tutorial.json b/Projects/Education/Schemas/App-Schema/tutorial.json index c0d67ff91..bba92c9f3 100644 --- a/Projects/Education/Schemas/App-Schema/tutorial.json +++ b/Projects/Education/Schemas/App-Schema/tutorial.json @@ -3,7 +3,7 @@ "menuItems": [ { "action": "Play Tutorial", - "actionProject": "Foundations", + "actionProject": "Education", "label": "Play", "iconPathOn": "play", "iconPathOff": "play", @@ -11,7 +11,7 @@ }, { "action": "Resume Tutorial", - "actionProject": "Foundations", + "actionProject": "Education", "label": "Resume", "iconPathOn": "resume", "iconPathOff": "resume", @@ -40,7 +40,7 @@ }, { "action": "Reset Tutorial Progress", - "actionProject": "Foundations", + "actionProject": "Education", "askConfirmation": true, "confirmationLabel": "Confirm to Reset", "label": "Reset Tutorial Progress", diff --git a/Projects/Education/UI/Function-Libraries/ActionSwitch.js b/Projects/Education/UI/Function-Libraries/ActionSwitch.js index 03bf636ca..329bb4a35 100644 --- a/Projects/Education/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Education/UI/Function-Libraries/ActionSwitch.js @@ -18,9 +18,41 @@ function newEducationActionSwitch() { async function executeAction(action) { switch (action.name) { - case 'Action Name': { - // Example: return UI.projects.foundations.functionLibraries.onFocus.getNodeThatIsOnFocus(action.node) - } + case 'Play Tutorial': + { + UI.projects.education.spaces.tutorialSpace.playTutorial(action.node) + } + break + case 'Play Tutorial Topic': + { + UI.projects.education.spaces.tutorialSpace.playTutorialTopic(action.node) + } + break + case 'Play Tutorial Step': + { + UI.projects.education.spaces.tutorialSpace.playTutorialStep(action.node) + } + break + case 'Resume Tutorial': + { + UI.projects.education.spaces.tutorialSpace.resumeTutorial(action.node) + } + break + case 'Resume Tutorial Topic': + { + UI.projects.education.spaces.tutorialSpace.resumeTutorialTopic(action.node) + } + break + case 'Resume Tutorial Step': + { + UI.projects.education.spaces.tutorialSpace.resumeTutorialStep(action.node) + } + break + case 'Reset Tutorial Progress': + { + UI.projects.education.spaces.tutorialSpace.resetTutorialProgress(action.node) + } + break } } } diff --git a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js index 9ac877f93..6177ceb46 100644 --- a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js @@ -538,41 +538,7 @@ function newFoundationsActionSwitch() { UI.projects.foundations.functionLibraries.chartingSpaceFunctions.addMissingProjectDashboards(action.node, action.rootNodes) } break - case 'Play Tutorial': - { - UI.projects.education.spaces.tutorialSpace.playTutorial(action.node) - } - break - case 'Play Tutorial Topic': - { - UI.projects.education.spaces.tutorialSpace.playTutorialTopic(action.node) - } - break - case 'Play Tutorial Step': - { - UI.projects.education.spaces.tutorialSpace.playTutorialStep(action.node) - } - break - case 'Resume Tutorial': - { - UI.projects.education.spaces.tutorialSpace.resumeTutorial(action.node) - } - break - case 'Resume Tutorial Topic': - { - UI.projects.education.spaces.tutorialSpace.resumeTutorialTopic(action.node) - } - break - case 'Resume Tutorial Step': - { - UI.projects.education.spaces.tutorialSpace.resumeTutorialStep(action.node) - } - break - case 'Reset Tutorial Progress': - { - UI.projects.education.spaces.tutorialSpace.resetTutorialProgress(action.node) - } - break + case 'Send Webhook Test Message': { UI.projects.foundations.functionLibraries.webhookFunctions.sendTestMessage(action.node, action.callBackFunction) diff --git a/Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js b/Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js new file mode 100644 index 000000000..03bf636ca --- /dev/null +++ b/Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js @@ -0,0 +1,26 @@ +function newEducationActionSwitch() { + + let thisObject = { + executeAction: executeAction, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function finalize() { + + } + + function initialize() { + /* Nothing to initialize since a Function Library does not hold any state. */ + } + + async function executeAction(action) { + switch (action.name) { + case 'Action Name': { + // Example: return UI.projects.foundations.functionLibraries.onFocus.getNodeThatIsOnFocus(action.node) + } + } + } +} From 68bb87936a06aeb20b8ff06e421e2f56284e80e8 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 30 Sep 2021 10:49:08 +0200 Subject: [PATCH 35/82] Actions Moved to Machine-Learning --- .../App-Schema/back-learning-session.json | 6 ++++-- .../App-Schema/live-learning-session.json | 6 ++++-- .../UI/Function-Libraries/ActionSwitch.js | 15 --------------- .../UI/Function-Libraries/ActionSwitch.js | 18 +++++++++++++++--- 4 files changed, 23 insertions(+), 22 deletions(-) diff --git a/Projects/Foundations/Schemas/App-Schema/back-learning-session.json b/Projects/Foundations/Schemas/App-Schema/back-learning-session.json index ab1db3ae2..a2aa63be7 100644 --- a/Projects/Foundations/Schemas/App-Schema/back-learning-session.json +++ b/Projects/Foundations/Schemas/App-Schema/back-learning-session.json @@ -15,7 +15,8 @@ "secondaryIcon": "stop", "iconPathOn": "run", "iconPathOff": "run", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Machine-Learning" }, { "action": "Resume Learning Session", @@ -31,7 +32,8 @@ "secondaryIcon": "stop", "iconPathOn": "resume", "iconPathOff": "resume", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Machine-Learning" }, { "action": "Configure", diff --git a/Projects/Foundations/Schemas/App-Schema/live-learning-session.json b/Projects/Foundations/Schemas/App-Schema/live-learning-session.json index 84bafb5d8..0f470182a 100644 --- a/Projects/Foundations/Schemas/App-Schema/live-learning-session.json +++ b/Projects/Foundations/Schemas/App-Schema/live-learning-session.json @@ -15,7 +15,8 @@ "secondaryIcon": "stop", "iconPathOn": "run", "iconPathOff": "run", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Machine-Learning" }, { "action": "Resume Learning Session", @@ -31,7 +32,8 @@ "secondaryIcon": "stop", "iconPathOn": "resume", "iconPathOff": "resume", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Machine-Learning" }, { "action": "Configure", diff --git a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js index 6177ceb46..174d4f483 100644 --- a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js @@ -559,21 +559,6 @@ function newFoundationsActionSwitch() { UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.stopSession(action.node, action.callBackFunction) } break - case 'Run Learning Session': - { - UI.projects.machineLearning.functionLibraries.learningSessionFunctions.runSession(action.node, false, action.callBackFunction) - } - break - case 'Resume Learning Session': - { - UI.projects.machineLearning.functionLibraries.learningSessionFunctions.runSession(action.node, true, action.callBackFunction) - } - break - case 'Stop Learning Session': - { - UI.projects.machineLearning.functionLibraries.learningSessionFunctions.stopSession(action.node, action.callBackFunction) - } - break case 'Run Super Action': { UI.projects.foundations.functionLibraries.superScriptsFunctions.runSuperScript(action.node, action.rootNodes) diff --git a/Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js b/Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js index 03bf636ca..e417e8bf5 100644 --- a/Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js @@ -18,9 +18,21 @@ function newEducationActionSwitch() { async function executeAction(action) { switch (action.name) { - case 'Action Name': { - // Example: return UI.projects.foundations.functionLibraries.onFocus.getNodeThatIsOnFocus(action.node) - } + case 'Run Learning Session': + { + UI.projects.machineLearning.functionLibraries.learningSessionFunctions.runSession(action.node, false, action.callBackFunction) + } + break + case 'Resume Learning Session': + { + UI.projects.machineLearning.functionLibraries.learningSessionFunctions.runSession(action.node, true, action.callBackFunction) + } + break + case 'Stop Learning Session': + { + UI.projects.machineLearning.functionLibraries.learningSessionFunctions.stopSession(action.node, action.callBackFunction) + } + break } } } From 0eb238551c3fe209090ef141188cf59bcba35387 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 30 Sep 2021 11:00:56 +0200 Subject: [PATCH 36/82] More actions moved out from Foundations to their projects --- .../UI/Function-Libraries/ActionSwitch.js | 18 +++++++++-- .../UI/Function-Libraries/ActionSwitch.js | 18 +++++++++-- .../App-Schema/backtesting-session.json | 6 ++-- .../data-mine-data-dependencies.json | 3 +- .../App-Schema/forward-testing-session.json | 6 ++-- .../App-Schema/live-trading-session.json | 6 ++-- .../App-Schema/paper-trading-session.json | 6 ++-- .../App-Schema/process-dependencies.json | 3 +- .../Schemas/App-Schema/process-output.json | 3 +- .../UI/Function-Libraries/ActionSwitch.js | 30 ------------------- 10 files changed, 52 insertions(+), 47 deletions(-) diff --git a/Projects/Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js b/Projects/Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js index 03bf636ca..bbbfa98a0 100644 --- a/Projects/Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js @@ -18,9 +18,21 @@ function newEducationActionSwitch() { async function executeAction(action) { switch (action.name) { - case 'Action Name': { - // Example: return UI.projects.foundations.functionLibraries.onFocus.getNodeThatIsOnFocus(action.node) - } + case 'Run Trading Session': + { + UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.runSession(action.node, false, action.callBackFunction) + } + break + case 'Resume Trading Session': + { + UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.runSession(action.node, true, action.callBackFunction) + } + break + case 'Stop Trading Session': + { + UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.stopSession(action.node, action.callBackFunction) + } + break } } } diff --git a/Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js b/Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js index 03bf636ca..b9e671c27 100644 --- a/Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js @@ -18,9 +18,21 @@ function newEducationActionSwitch() { async function executeAction(action) { switch (action.name) { - case 'Action Name': { - // Example: return UI.projects.foundations.functionLibraries.onFocus.getNodeThatIsOnFocus(action.node) - } + case 'Add All Output Datasets': + { + UI.projects.dataMining.functionLibraries.mineFunctions.addAllOutputDatasets(action.node) + } + break + case 'Add All Data Dependencies': + { + UI.projects.dataMining.functionLibraries.mineFunctions.addAllDataDependencies(action.node) + } + break + case 'Add All Data Mine Dependencies': + { + UI.projects.dataMining.functionLibraries.mineFunctions.addAllDataMineDataDependencies(action.node, action.rootNodes) + } + break } } } diff --git a/Projects/Foundations/Schemas/App-Schema/backtesting-session.json b/Projects/Foundations/Schemas/App-Schema/backtesting-session.json index ec1c618a6..f71d6bd28 100644 --- a/Projects/Foundations/Schemas/App-Schema/backtesting-session.json +++ b/Projects/Foundations/Schemas/App-Schema/backtesting-session.json @@ -15,7 +15,8 @@ "secondaryIcon": "stop", "iconPathOn": "run", "iconPathOff": "run", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Resume Trading Session", @@ -31,7 +32,8 @@ "secondaryIcon": "stop", "iconPathOn": "resume", "iconPathOff": "resume", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Configure", diff --git a/Projects/Foundations/Schemas/App-Schema/data-mine-data-dependencies.json b/Projects/Foundations/Schemas/App-Schema/data-mine-data-dependencies.json index 3c441323c..b4a3af275 100644 --- a/Projects/Foundations/Schemas/App-Schema/data-mine-data-dependencies.json +++ b/Projects/Foundations/Schemas/App-Schema/data-mine-data-dependencies.json @@ -14,7 +14,8 @@ "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", "relatedUiObject": "Data Dependency", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Data-Mining" }, { "action": "Delete UI Object", diff --git a/Projects/Foundations/Schemas/App-Schema/forward-testing-session.json b/Projects/Foundations/Schemas/App-Schema/forward-testing-session.json index 794f179a6..8a3c088d8 100644 --- a/Projects/Foundations/Schemas/App-Schema/forward-testing-session.json +++ b/Projects/Foundations/Schemas/App-Schema/forward-testing-session.json @@ -15,7 +15,8 @@ "secondaryIcon": "stop", "iconPathOn": "run", "iconPathOff": "run", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Resume Trading Session", @@ -31,7 +32,8 @@ "secondaryIcon": "stop", "iconPathOn": "resume", "iconPathOff": "resume", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Configure", diff --git a/Projects/Foundations/Schemas/App-Schema/live-trading-session.json b/Projects/Foundations/Schemas/App-Schema/live-trading-session.json index 6dfac97d8..d76898c43 100644 --- a/Projects/Foundations/Schemas/App-Schema/live-trading-session.json +++ b/Projects/Foundations/Schemas/App-Schema/live-trading-session.json @@ -15,7 +15,8 @@ "secondaryIcon": "stop", "iconPathOn": "run", "iconPathOff": "run", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Resume Trading Session", @@ -31,7 +32,8 @@ "secondaryIcon": "stop", "iconPathOn": "resume", "iconPathOff": "resume", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Configure", diff --git a/Projects/Foundations/Schemas/App-Schema/paper-trading-session.json b/Projects/Foundations/Schemas/App-Schema/paper-trading-session.json index 591fca594..88f5ff479 100644 --- a/Projects/Foundations/Schemas/App-Schema/paper-trading-session.json +++ b/Projects/Foundations/Schemas/App-Schema/paper-trading-session.json @@ -15,7 +15,8 @@ "secondaryIcon": "stop", "iconPathOn": "run", "iconPathOff": "run", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Resume Trading Session", @@ -31,7 +32,8 @@ "secondaryIcon": "stop", "iconPathOn": "resume", "iconPathOff": "resume", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Configure", diff --git a/Projects/Foundations/Schemas/App-Schema/process-dependencies.json b/Projects/Foundations/Schemas/App-Schema/process-dependencies.json index 6d625bc17..d1602b730 100644 --- a/Projects/Foundations/Schemas/App-Schema/process-dependencies.json +++ b/Projects/Foundations/Schemas/App-Schema/process-dependencies.json @@ -20,7 +20,8 @@ "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", "relatedUiObject": "Data Mine Data Dependencies", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Data-Mining" }, { "action": "Add UI Object", diff --git a/Projects/Foundations/Schemas/App-Schema/process-output.json b/Projects/Foundations/Schemas/App-Schema/process-output.json index de970c159..9a558f70f 100644 --- a/Projects/Foundations/Schemas/App-Schema/process-output.json +++ b/Projects/Foundations/Schemas/App-Schema/process-output.json @@ -20,7 +20,8 @@ "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", "relatedUiObject": "Output Dataset", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Data-Mining" }, { "action": "Delete UI Object", diff --git a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js index 174d4f483..333c3ba5a 100644 --- a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js @@ -418,11 +418,6 @@ function newFoundationsActionSwitch() { UI.projects.foundations.functionLibraries.cryptoEcosystemFunctions.uninstallMarket(action.node, action.rootNodes) } break - case 'Add All Output Datasets': - { - UI.projects.dataMining.functionLibraries.mineFunctions.addAllOutputDatasets(action.node) - } - break case 'Add All Data Products': { UI.projects.foundations.functionLibraries.dataStorageFunctions.addAllDataProducts(action.node) @@ -498,16 +493,6 @@ function newFoundationsActionSwitch() { UI.projects.foundations.functionLibraries.dataStorageFunctions.addMissingProjectDataProducts(action.node, action.rootNodes) } break - case 'Add All Data Dependencies': - { - UI.projects.dataMining.functionLibraries.mineFunctions.addAllDataDependencies(action.node) - } - break - case 'Add All Data Mine Dependencies': - { - UI.projects.dataMining.functionLibraries.mineFunctions.addAllDataMineDataDependencies(action.node, action.rootNodes) - } - break case 'Add All Layer Panels': { UI.projects.foundations.functionLibraries.chartingSpaceFunctions.addAllLayerPanels(action.node) @@ -544,21 +529,6 @@ function newFoundationsActionSwitch() { UI.projects.foundations.functionLibraries.webhookFunctions.sendTestMessage(action.node, action.callBackFunction) } break - case 'Run Trading Session': - { - UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.runSession(action.node, false, action.callBackFunction) - } - break - case 'Resume Trading Session': - { - UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.runSession(action.node, true, action.callBackFunction) - } - break - case 'Stop Trading Session': - { - UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.stopSession(action.node, action.callBackFunction) - } - break case 'Run Super Action': { UI.projects.foundations.functionLibraries.superScriptsFunctions.runSuperScript(action.node, action.rootNodes) From b84ad7aae6a3178e840daf9c50ac202a03c603f9 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 30 Sep 2021 11:02:38 +0200 Subject: [PATCH 37/82] Update ActionSwitch.js --- Projects/Foundations/UI/Function-Libraries/ActionSwitch.js | 1 - 1 file changed, 1 deletion(-) diff --git a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js index 333c3ba5a..58f302e07 100644 --- a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js @@ -523,7 +523,6 @@ function newFoundationsActionSwitch() { UI.projects.foundations.functionLibraries.chartingSpaceFunctions.addMissingProjectDashboards(action.node, action.rootNodes) } break - case 'Send Webhook Test Message': { UI.projects.foundations.functionLibraries.webhookFunctions.sendTestMessage(action.node, action.callBackFunction) From 69f6c6c5f37b61a91f7b62be720d031e3e24a7f9 Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Sat, 2 Oct 2021 15:11:34 +0200 Subject: [PATCH 38/82] This is my contribution to Superalgos --- ...p-commands-001-app-contribute-command.json | 57 +++++++++++++-- ...os-005-how-to-contribute-translations.json | 72 ++++++++++++++++--- .../docs-languages-002-docs-in-spanish.json | 4 +- .../contribution-claims.json | 18 ++++- 4 files changed, 132 insertions(+), 19 deletions(-) diff --git a/Projects/Foundations/Schemas/Docs-Topics/A/App/App-Commands/app-commands-001-app-contribute-command.json b/Projects/Foundations/Schemas/Docs-Topics/A/App/App-Commands/app-commands-001-app-contribute-command.json index e7861921b..5482254f4 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/A/App/App-Commands/app-commands-001-app-contribute-command.json +++ b/Projects/Foundations/Schemas/Docs-Topics/A/App/App-Commands/app-commands-001-app-contribute-command.json @@ -9,7 +9,8 @@ { "language": "ES", "text": "Este comando te permite contribuir con trabajo al proyecto. El aporte va al repositorio de Superalgos a través de un Pull Request de tu fork de Superalgos.", - "updated": 1628205171216 + "updated": 1628205171216, + "style": "Definition" } ] }, @@ -17,31 +18,73 @@ { "style": "Text", "text": "This command will send all changes you have made in Docs pages but also on any file within the Superalgos folder (except for My-Workspaces, Data-Storage, and My-Logs folders) to your fork at Github.com. It will also send them from your fork to the main Superalgos Repository. It will do it specifically from the Current Branch to the Contributions Branch mentioned at the footer of this page.", - "updated": 1622028842412 + "updated": 1622028842412, + "translations": [ + { + "language": "ES", + "text": "Este comando envia todos los cambios que hayas hecho en las paginas de documentos pero también de but also en cualquier archivo de la carpeta de Superalgos (a excepción de My-Workspaces, Data-Storage, (Archivo de datos de mi espacio de trabajo) y My-Logs folders (mis carpetas de registros) a tu bifurcación en Github.com. También serán enviados desde tu bifurcación al repositorio principal de Superalgos Lo hará específicamente desde la rama actual a la rama de las contribuciones mencionados al final de ésta página.", + "updated": 1633175695567 + } + ] }, { "style": "Warning", "text": "Never use your Superalgos folder to store personal files, as the whole folder but the few exceptions mentioned above are subject to be sent over the Internet to a public site.", - "updated": 1622029162278 + "updated": 1622029162278, + "translations": [ + { + "language": "ES", + "text": "Nunca utilice su carpeta de Superalgos para almacenar archivos personales, ya que toda la carpeta, salvo las pocas excepciones mencionadas arriba, están sujetas a ser enviadas a través de internet a un sitio público.", + "updated": 1633175880707 + } + ] }, { "style": "Important", "text": "In most cases, contributions must go from the develop branch to the develop branch, or from the plugins-docs branch to the plugins-docs branch, unless you have previously agreed with team members that you will send a contribution from master to master.", - "updated": 1622028905753 + "updated": 1622028905753, + "translations": [ + { + "language": "ES", + "text": "En la mayoría de los casos,, las contribuciones deben ir desde la rama de desarrollo a la rama de desarrollo, o desde la rama de plugins-docs (documentos complementarios) a la rama de plugins-docs, salvo que previamente haya acordado con los miembros del equipo que enviará una contribución de master a master.", + "updated": 1633176160361 + } + ] }, { "style": "Text", "text": "Master is our stable branch and it is very unlikely that we are going to merge contributions there. Instead, all contributions are expected to go to the develop or the plugins-docs branches, where many users are testing that branch every day. Contributions of plugins and Docs may reach the master branch often. Contributions to the develop branch will reach the master branch on the next release.", - "updated": 1622029260459 + "updated": 1622029260459, + "translations": [ + { + "language": "ES", + "text": "Master ( Maestra) es una rama estable y es muy poco porbable que vayamos a emerger contribuciones allí. En cambio todas las contribuciones se espera que vayan a as ramas de desarrollo o de documentos complementarios, donde muchos usuarios están chequeando esa rama cada día. Las contribuciones de enchufes o documentos puede alcanzar a maenudo la rama maestra. Contribuciones a la rama de desarrollo llegará a la rama maestra en la siguiente liberación.", + "updated": 1633176639433 + } + ] }, { "style": "Note", "text": "It is also very unlikely that contributions coming from the master branch will be merged into the develop branch, since that can usually lead to merging conflicts.", - "updated": 1622029116935 + "updated": 1622029116935, + "translations": [ + { + "language": "ES", + "text": "Es también muy poco probable que las contribuciones provenientes de la rama maestra será traída en la rama de desarrollo, ya que ello puede provocar que emergan conflictos.", + "updated": 1633176834093 + } + ] }, { "style": "Success", - "text": "Check the footer of the Docs to verify what branches you are operating with before submitting your contributions!" + "text": "Check the footer of the Docs to verify what branches you are operating with before submitting your contributions!", + "translations": [ + { + "language": "ES", + "text": "Chequear el pie de los documentos par qverificar que en que ramas está operando antes de enviar su contribución", + "updated": 1633176955159 + } + ] }, { "style": "Title", diff --git a/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-005-how-to-contribute-translations.json b/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-005-how-to-contribute-translations.json index 80db348fc..5cb18ef34 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-005-how-to-contribute-translations.json +++ b/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-005-how-to-contribute-translations.json @@ -4,23 +4,51 @@ "type": "How to Contribute Translations", "definition": { "text": "The Docs are originally written in English. Making Superalgos more accessible is a key endeavor to grow the Community and the user base. Translating tutorials and software documentation into languages other than English is of huge value!", - "updated": 1613822257340 + "updated": 1613822257340, + "translations": [ + { + "language": "ES", + "text": "Los Docs (documentos) son originalmente escritos en Ingles. Hacer a Superalgos más accesible es un esfuerzo clave para el crecimiento de la comunidad y la base de usuarios. Traducir tutoriales y documentación del software a otros idiomas que no sean el Inglés es un aporte muy valioso!", + "updated": 1633170996967 + } + ] }, "paragraphs": [ { "style": "Title", "text": "Read About Contributing to the Docs", - "updated": 1613822300139 + "updated": 1613822300139, + "translations": [ + { + "language": "ES", + "text": "Read About Contributing to the Docs (Leer sobre como contribuir a los Docs)", + "updated": 1633171160951 + } + ] }, { "style": "Text", "text": "Translations are a particular case of contributing to the Docs. Please read the How to Contribute to the Docs page first, and come back here for the details about how we deal with translations in particular.", - "updated": 1613822394353 + "updated": 1613822394353, + "translations": [ + { + "language": "ES", + "text": "Las traducciones son un caso particular de contribuir con los documentos. Por favor leer primero la página de como contribuir con los documentos, y regresar aqui para los detalles de como nosotros nos manejamos particularmente con las traducciones.", + "updated": 1633171406067 + } + ] }, { "style": "Title", "text": "About Translations", - "updated": 1613822457097 + "updated": 1613822457097, + "translations": [ + { + "language": "ES", + "text": "About Translations ( Acerca de las traducciones)", + "updated": 1633171444432 + } + ] }, { "style": "Include", @@ -30,22 +58,50 @@ { "style": "Text", "text": "The system stores the content of each Docs Page in a single file, regardless of how many translations may exist for each page.", - "updated": 1613822896070 + "updated": 1613822896070, + "translations": [ + { + "language": "ES", + "text": "El sistema guarda el contenido de cada pagina de los Documentos en un solo archivo, independientemente de cuantas traducciones existan por cada página.", + "updated": 1633171834036 + } + ] }, { "style": "Text", "text": "Actually, translations exist at the level of each paragraph. This means that, for each paragraph in a page, there may be as many translations as there are supported languages.", - "updated": 1613825539396 + "updated": 1613825539396, + "translations": [ + { + "language": "ES", + "text": "Actualmente, existen al nivel de cada párrafo. Esto significa que, por cada párrafo de la página, puede haber tantas traducciones como lenguages de soporte hayan.", + "updated": 1633171706597 + } + ] }, { "style": "Success", "text": "The above doesn't affect your work directly, but it is worth noting because it means that many contributors may be working on the same page at any point in time. Hence the need to constantly update and to submit contributions frequently.", - "updated": 1613823174025 + "updated": 1613823174025, + "translations": [ + { + "language": "ES", + "text": "Lo mencionado no afecta su trabajo directamente,pero es bueno tenerlo en cuenta ya que significa que muchos contribuyentes pueden estar trabajando la misma página al mismo tiempo. He aqui la necesidad de actualizar constantemente y de solicitar la contribución a menudo.", + "updated": 1633172414535 + } + ] }, { "style": "Title", "text": "Best Practices", - "updated": 1613824072677 + "updated": 1613824072677, + "translations": [ + { + "language": "ES", + "text": "Best Practices (Las mejores prácticas)", + "updated": 1633172460565 + } + ] }, { "style": "List", diff --git a/Projects/Foundations/Schemas/Docs-Topics/D/Docs/Docs-Languages/docs-languages-002-docs-in-spanish.json b/Projects/Foundations/Schemas/Docs-Topics/D/Docs/Docs-Languages/docs-languages-002-docs-in-spanish.json index 9f37df345..08c871762 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/D/Docs/Docs-Languages/docs-languages-002-docs-in-spanish.json +++ b/Projects/Foundations/Schemas/Docs-Topics/D/Docs/Docs-Languages/docs-languages-002-docs-in-spanish.json @@ -8,8 +8,8 @@ "translations": [ { "language": "ES", - "text": "Si bien la documentación esta originalmente escrita en Inglés, el sistema permite a cualquier usuario buscar contenido en su idioma nativo, siempre y cuando otros usuarios hayan contribuído traducciones de los artículos existentes escritos en el idioma por defecto que es el idioma Inglés.", - "updated": 1609831843644, + "text": "Si bien la documentación esta originalmente escrita en Inglés, el sistema permite a cualquier usuario buscar contenido en su idioma nativo, siempre y cuando otros usuarios hayan contribuído traducciones de los artículos existentes escritos en el idioma por defecto que es el idioma Inglés. Advertencia!!! Los documentos de Superalgos y de otros proyectos integrados están escritos originariamente en Inglés. El sistema permite a los usuarios buscar y navegar en páginas en toros idiomas también , siempre que algunos usuarios hayan contribuido con las correspondientes traduccciones. Por favor actualice esta traucción.", + "updated": 1633180141328, "style": "Definition" } ] diff --git a/Projects/Governance/Schemas/Docs-Concepts/C/Contribution/Contribution-Claims/contribution-claims.json b/Projects/Governance/Schemas/Docs-Concepts/C/Contribution/Contribution-Claims/contribution-claims.json index 6789ecf8e..c9a91b3ed 100644 --- a/Projects/Governance/Schemas/Docs-Concepts/C/Contribution/Contribution-Claims/contribution-claims.json +++ b/Projects/Governance/Schemas/Docs-Concepts/C/Contribution/Contribution-Claims/contribution-claims.json @@ -2,12 +2,26 @@ "type": "Contribution Claims", "definition": { "text": "The term Contribution Claims is a generalization of the concept of claims and may refer to any or all of the existing types, namely Asset Contribution Claim, Feature Contribution Claim, and Position Contribution Claim nodes.", - "updated": 1630351499915 + "updated": 1630351499915, + "translations": [ + { + "language": "ES", + "text": "El término Contribution Claims ( declaración de contribución) es una generalización del concepto reclamo y puede referirse a cualquiera o a todos los tipos existentes, a saber Asset Contribution Claim (declaración de contribución de activos), Feature Contribution Claim ( declaración de contribución de funciones), and Position Contribution Claim nodes (declaraciónde contribución de posición de nodos).", + "updated": 1633179306733 + } + ] }, "paragraphs": [ { "style": "Text", - "text": "Right click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use docs.save to save your changes and app.contribute to send it to the main repository." + "text": "Right click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use docs.save to save your changes and app.contribute to send it to the main repository.", + "translations": [ + { + "language": "ES", + "text": "Cliquear botón derecho y editar para entrar en el modo edición y cambiar este texto. ENTER para escribir parrafos nuevos. ESC para salir del modo edición. Entonces puede escribir docs.save arriba y ENTER para guardar los cambios y app.contribute ENTER para enviarlos al repositorio principal.", + "updated": 1633179602447 + } + ] } ] } \ No newline at end of file From 22d4ad532d611acccaf96af76e845176efcf42f0 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 3 Oct 2021 11:29:00 +0200 Subject: [PATCH 39/82] Bug Fixed with Time Frame Filters --- Projects/Foundations/UI/Function-Libraries/TaskFunctions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js b/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js index 178194514..bed053755 100644 --- a/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js +++ b/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js @@ -110,10 +110,10 @@ function newFoundationsFunctionLibraryTaskFunctions() { let taskLightingPath = '->Task->' + 'Sensor Bot Instance->' + 'API Data Fetcher Bot Instance->' + - 'Indicator Bot Instance->Time Frames Filter->' + + 'Indicator Bot Instance->' + 'Trading Bot Instance->' + 'Learning Bot Instance->' + - 'Sensor Process Instance->API Data Fetcher Process Instance->Indicator Process Instance->Trading Process Instance->Learning Process Instance->' + + 'Sensor Process Instance->Time Frames Filter->API Data Fetcher Process Instance->Indicator Process Instance->Trading Process Instance->Learning Process Instance->' + 'Execution Started Event->' + 'Key Reference->Exchange Account Key->' + 'Task Manager->' + From 894ccc72dba557c0ae15530cbce0128216c0936b Mon Sep 17 00:00:00 2001 From: prepheadrus <83468174+prepheadrus@users.noreply.github.com> Date: Sun, 3 Oct 2021 16:30:41 +0300 Subject: [PATCH 40/82] This is my contribution to Superalgos --- ...os-006-tutorial-step-expand-that-node.json | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-006-tutorial-step-expand-that-node.json b/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-006-tutorial-step-expand-that-node.json index b20c5a59f..1b09f412b 100644 --- a/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-006-tutorial-step-expand-that-node.json +++ b/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-006-tutorial-step-expand-that-node.json @@ -4,7 +4,7 @@ "type": "Tutorial Step - Expand That Node!", "definition": { "icon": { - "project": "Foundations", + "project": "Foundations", "name": "expand-structure-of-nodes" }, "text": "Each node features a menu. The button on the bottom-left expands and collapses the structure of nodes below the current node.", @@ -30,7 +30,13 @@ { "language": "FR", "text": "Chaque nœud dispose d'un menu. Le bouton situé en bas à gauche permet de développer et de réduire la structure des nœuds situés sous le nœud actuel.", - "updated": 1623951244249 + "updated": 1623951244249, + "style": "Definition" + }, + { + "language": "TR", + "text": "Her düğümde bir menü bulunur. Sol altta üzerinde \"+\" simgesinin bulunduğu buton, mevcut düğümü genişletir ya da daraltır. Böylece düğümün altındaki öğelere ulaşabilirsiniz.", + "updated": 1633267521331 } ] }, @@ -60,7 +66,13 @@ { "language": "FR", "text": "Allez-y et cliquez sur le bouton d'expansion !", - "updated": 1623951533708 + "updated": 1623951533708, + "style": "Callout" + }, + { + "language": "TR", + "text": "Devam edin ve genişlet düğmesine tıklayın!", + "updated": 1633267545525 } ] }, @@ -89,7 +101,13 @@ { "language": "FR", "text": "Le noeud Tutorial contient plusieurs ramifications, et celles-ci possedent a leur tour plusieurs autres ramifications. C'est pourquoi il s'agit d'une hiérarchie !", - "updated": 1623951690741 + "updated": 1623951690741, + "style": "Text" + }, + { + "language": "TR", + "text": "Öğretici (Tutorial) düğümün birkaç çocuğu vardır ve bunların birkaç çocuğu daha vardır.", + "updated": 1633267652469 } ] }, @@ -118,7 +136,13 @@ { "language": "FR", "text": "Les représentations visuelles structurées de l'information sont au cœur de la manière dont Superalgos gère la complexité qui sous-tend les opérations de trading flexibles et évolutives.", - "updated": 1623951745486 + "updated": 1623951745486, + "style": "Note" + }, + { + "language": "TR", + "text": "Bilginin yapılandırılmış görsel temsilleri, Superalgos'un esnek ve ölçeklenebilir ticaret operasyonlarının arkasındaki karmaşıklığı nasıl yönettiğinin merkezinde yer alır.", + "updated": 1633267689476 } ] } From 76c191c7a8905e74a13f4b7877e19e8f283844fe Mon Sep 17 00:00:00 2001 From: prepheadrus <83468174+prepheadrus@users.noreply.github.com> Date: Sun, 3 Oct 2021 16:42:30 +0300 Subject: [PATCH 41/82] This is my contribution to Superalgos --- ...-007-tutorial-step-lets-go-for-a-ride.json | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-007-tutorial-step-lets-go-for-a-ride.json b/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-007-tutorial-step-lets-go-for-a-ride.json index e66cc1b7e..211dff4a8 100644 --- a/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-007-tutorial-step-lets-go-for-a-ride.json +++ b/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-007-tutorial-step-lets-go-for-a-ride.json @@ -32,6 +32,11 @@ "text": "Avant de vous montrer le reste du menu, jetons un coup d'œil à une autre hiérarchie : le réseau.", "updated": 1623951418764, "style": "Definition" + }, + { + "language": "TR", + "text": "Menünün geri kalanını göstermeden önce, başka bir hiyerarşiye bir göz atalım: \"Ağ.\"(Lan Network)", + "updated": 1633268337360 } ] }, @@ -63,6 +68,11 @@ "text": "Le Network hiérarchie réseau est la salle de contrôle du système. C'est là que vous contrôlez vos Data Tasks, les Testing Trading Tasks, et les Production Trading Tasks.", "updated": 1623952138963, "style": "Text" + }, + { + "language": "TR", + "text": "Ağ hiyerarşisi, sistemin kontrol odasıdır. Burası Veri Görevlerinizi (Data Task), Ticaret Görevlerini Test Etme (Testing Trading Tasks) ve Ticaret Görevlerinizi (Production Trading Tasks) kontrol ettiğiniz yerdir. ", + "updated": 1633268272360 } ] }, @@ -93,6 +103,11 @@ "text": "Élargissez la hiérarchie et jetez un coup d'œil à l'intérieur !", "updated": 1623952177269, "style": "Callout" + }, + { + "language": "TR", + "text": "Düğümü genişletin ve içeriye bir göz atın!", + "updated": 1633268461684 } ] }, @@ -124,6 +139,11 @@ "text": "Voyez les nœuds que j'ai mentionnés plus tôt ? Cool ! Nous sommes ici pour commencer votre toute première opération de minage d'informations.", "updated": 1623952241074, "style": "Text" + }, + { + "language": "TR", + "text": "Daha önce bahsettiğim düğümleri görüyor musunuz? Güzel! İlk veri madenciliği operasyonunuzu başlatmak için buradayız.", + "updated": 1633268493855 } ] }, @@ -154,6 +174,11 @@ "text": "Mais avant de commencer, j'ai une petite question pour vous : accédez-vous au Client a distance?", "updated": 1623952297046, "style": "Note" + }, + { + "language": "TR", + "text": "Ancak başlamadan önce size kısa bir sorum var: İstemciye uzaktan erişiyor musunuz?", + "updated": 1633268516400 } ] } From 65358f6404a2ab75ebc5e1af9f96f0eb217da658 Mon Sep 17 00:00:00 2001 From: prepheadrus <83468174+prepheadrus@users.noreply.github.com> Date: Sun, 3 Oct 2021 16:48:18 +0300 Subject: [PATCH 42/82] This is my contribution to Superalgos --- ...me-to-superalgos-007-tutorial-step-lets-go-for-a-ride.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-007-tutorial-step-lets-go-for-a-ride.json b/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-007-tutorial-step-lets-go-for-a-ride.json index 211dff4a8..3d307e6f4 100644 --- a/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-007-tutorial-step-lets-go-for-a-ride.json +++ b/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-007-tutorial-step-lets-go-for-a-ride.json @@ -71,8 +71,8 @@ }, { "language": "TR", - "text": "Ağ hiyerarşisi, sistemin kontrol odasıdır. Burası Veri Görevlerinizi (Data Task), Ticaret Görevlerini Test Etme (Testing Trading Tasks) ve Ticaret Görevlerinizi (Production Trading Tasks) kontrol ettiğiniz yerdir. ", - "updated": 1633268272360 + "text": "Ağ hiyerarşisi, sistemin kontrol odasıdır.Burası Veri Görevlerinizi ( Data Task ), Ticaret Görevlerini Test Etme ( Testing Trading Tasks ) ve Ticaret Görevlerinizi ( Production Trading Tasks ) kontrol ettiğiniz yerdir.", + "updated": 1633268830564 } ] }, From 62a41aeb31e7963ccb7026a87587448e36de5c6d Mon Sep 17 00:00:00 2001 From: gitforkgit Date: Sun, 3 Oct 2021 19:56:50 +0200 Subject: [PATCH 43/82] User Profile gitforkgit --- .../Plugins/User-Profiles/gitforkgit.json | 557 ++++++++++++++++++ 1 file changed, 557 insertions(+) create mode 100644 Projects/Governance/Plugins/User-Profiles/gitforkgit.json diff --git a/Projects/Governance/Plugins/User-Profiles/gitforkgit.json b/Projects/Governance/Plugins/User-Profiles/gitforkgit.json new file mode 100644 index 000000000..ac648a61e --- /dev/null +++ b/Projects/Governance/Plugins/User-Profiles/gitforkgit.json @@ -0,0 +1,557 @@ +{ + "type": "User Profile", + "name": "gitforkgit", + "config": "{\"signature\":{\"message\":\"gitforkgit\",\"messageHash\":\"0xc415d393ce27788f580950585603adc754cd6f01038ec5ade1522847e6d71f4b\",\"v\":\"0x1c\",\"r\":\"0x15ecb0cca464934bd3109e8026e4bf2e47bdbb0267090f1764463f96a3eccdc5\",\"s\":\"0x7cbf5e1ac42e965dac0e985e5e9293e197ecb5d50c9e3416a4ac902e85341b6a\",\"signature\":\"0x15ecb0cca464934bd3109e8026e4bf2e47bdbb0267090f1764463f96a3eccdc57cbf5e1ac42e965dac0e985e5e9293e197ecb5d50c9e3416a4ac902e85341b6a1c\"},\"codeName\":\"gitforkgit\"}", + "project": "Governance", + "tokenPowerSwitch": { + "type": "Token Power Switch", + "name": "New Token Power Switch", + "config": "{}", + "project": "Governance", + "tokenPowerSwitch": [], + "onboardingPrograms": { + "type": "Onboarding Programs", + "name": "New Onboarding Programs", + "config": "{\n \"percentage\": 0\n}", + "project": "Governance", + "airdropProgram": { + "type": "Airdrop Program", + "name": "New Airdrop Program", + "config": "{}", + "project": "Governance", + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "067a4281-671a-449a-9b72-14c42cae1ae8", + "savedPayload": { + "position": { + "x": 13483.333333333334, + "y": 11470.577136594007 + }, + "targetPosition": { + "x": 13633.333333333334, + "y": 11730.384757729338 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "68045aea-e5ec-4e9f-8cd7-e5008a86412c", + "savedPayload": { + "position": { + "x": 13633.333333333334, + "y": 11730.384757729338 + }, + "targetPosition": { + "x": 13783.333333333334, + "y": 11990.192378864669 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "githubProgram": { + "type": "Github Program", + "name": "New Github Program", + "config": "{}", + "project": "Governance", + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "da3f58c5-3bb3-455b-9544-550dee2d9fbc", + "savedPayload": { + "position": { + "x": 14383.333333333334, + "y": 11990.192378864669 + }, + "targetPosition": { + "x": 14083.333333333334, + "y": 11990.192378864669 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "ccd566d0-4fa9-4be0-bb81-179e6303522b", + "savedPayload": { + "position": { + "x": 14083.333333333334, + "y": 11990.192378864669 + }, + "targetPosition": { + "x": 13783.333333333334, + "y": 11990.192378864669 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "bdb856e9-eafc-40f8-87fe-46b95c680ca9", + "savedPayload": { + "position": { + "x": 13783.333333333334, + "y": 11990.192378864669 + }, + "targetPosition": { + "x": 13633.333333333334, + "y": 12250 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "communityBuildingPrograms": { + "type": "Community Building Programs", + "name": "New Community Building Programs", + "config": "{}", + "project": "Governance", + "referralProgram": { + "type": "Referral Program", + "name": "New Referral Program", + "config": "{}", + "project": "Governance", + "userReferrers": [ + { + "type": "User Referrer", + "name": "", + "config": "{}", + "project": "Governance", + "id": "982253cd-6526-43ab-be70-b7bf7ee92f51", + "savedPayload": { + "position": { + "x": 13893.140954468665, + "y": 12100 + }, + "targetPosition": { + "x": 14043.140954468665, + "y": 12359.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "5c2e9a56-5ef7-4076-8749-a40342a041d5", + "savedPayload": { + "position": { + "x": 14302.948575603996, + "y": 12209.807621135331 + }, + "targetPosition": { + "x": 14043.140954468665, + "y": 12359.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensBonus": { + "type": "Tokens Bonus", + "name": "New Tokens Bonus", + "project": "Governance", + "id": "e2493ead-e0c1-4535-a768-c2e002ab3c8d", + "savedPayload": { + "position": { + "x": 14193.140954468665, + "y": 12619.615242270662 + }, + "targetPosition": { + "x": 14043.140954468665, + "y": 12359.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5d6f1757-ea56-4e72-a0d6-009c94c5bc7e", + "savedPayload": { + "position": { + "x": 14043.140954468665, + "y": 12359.807621135331 + }, + "targetPosition": { + "x": 13783.333333333334, + "y": 12509.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "supportProgram": { + "type": "Support Program", + "name": "New Support Program", + "config": "{}", + "project": "Governance", + "userSupporters": [ + { + "type": "User Supporter", + "name": "", + "config": "{}", + "project": "Governance", + "id": "ada671e7-03f8-4565-ac5c-d22e07f02462", + "savedPayload": { + "position": { + "x": 14193.140954468665, + "y": 12619.615242270662 + }, + "targetPosition": { + "x": 13933.333333333334, + "y": 12769.615242270662 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "fff18c7a-cd37-467c-8bdb-a036f2d2a9a0", + "savedPayload": { + "position": { + "x": 14083.333333333334, + "y": 13029.422863405993 + }, + "targetPosition": { + "x": 13933.333333333334, + "y": 12769.615242270662 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensBonus": { + "type": "Tokens Bonus", + "name": "New Tokens Bonus", + "project": "Governance", + "id": "a2ead972-dfc5-495b-8efc-f4aaa9f0e6c0", + "savedPayload": { + "position": { + "x": 13673.525712198003, + "y": 12919.615242270662 + }, + "targetPosition": { + "x": 13933.333333333334, + "y": 12769.615242270662 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5745f70c-0d77-4ad3-9fba-907266217b69", + "savedPayload": { + "position": { + "x": 13933.333333333334, + "y": 12769.615242270662 + }, + "targetPosition": { + "x": 13783.333333333334, + "y": 12509.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "mentorshipProgram": { + "type": "Mentorship Program", + "name": "New Mentorship Program", + "config": "{}", + "project": "Governance", + "userMentors": [], + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "f5ddff6e-0a6a-4d06-9c04-a40d406ca37b", + "savedPayload": { + "position": { + "x": 13523.525712198003, + "y": 12959.807621135331 + }, + "targetPosition": { + "x": 13523.525712198003, + "y": 12659.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensBonus": { + "type": "Tokens Bonus", + "name": "New Tokens Bonus", + "project": "Governance", + "id": "d799c41c-ba6b-42ec-9b5c-17cdb1bca814", + "savedPayload": { + "position": { + "x": 13263.718091062672, + "y": 12509.807621135331 + }, + "targetPosition": { + "x": 13523.525712198003, + "y": 12659.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "2b5206c6-7e49-4bf6-8236-01080242c851", + "savedPayload": { + "position": { + "x": 13523.525712198003, + "y": 12659.807621135331 + }, + "targetPosition": { + "x": 13783.333333333334, + "y": 12509.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "bb518745-f59c-4fb6-a4e0-646ff983f503", + "savedPayload": { + "position": { + "x": 13783.333333333334, + "y": 12509.807621135331 + }, + "targetPosition": { + "x": 13633.333333333334, + "y": 12250 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "1a0104de-bed0-4c64-a273-3a97a7605773", + "savedPayload": { + "position": { + "x": 13633.333333333334, + "y": 12250 + }, + "targetPosition": { + "x": 13333.333333333334, + "y": 12250 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensMined": { + "type": "Tokens Mined", + "name": "New Tokens Mined", + "project": "Governance", + "id": "5595fb56-7fdc-4096-b798-950ad763f8f9", + "savedPayload": { + "position": { + "x": 13033.333333333334, + "y": 12250 + }, + "targetPosition": { + "x": 13333.333333333334, + "y": 12250 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "a600818b-6702-4be1-94ea-46478a914cb4", + "savedPayload": { + "position": { + "x": 13333.333333333334, + "y": 23650 + }, + "targetPosition": { + "x": 13333.333333333334, + "y": 23650 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } +} \ No newline at end of file From 7e4484f0b062799fb55bc9eff2dbf8d4f8f87d21 Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Sun, 3 Oct 2021 20:13:36 +0200 Subject: [PATCH 44/82] This is my contribution to Superalgos --- ...nity-workspaces-001-plugin-workspaces.json | 12 +- ...os-005-how-to-contribute-translations.json | 132 +++++++++++++++--- ...01-community-effort-to-test-exchanges.json | 63 ++++++++- ...ion-043-tutorial-step-placing-plugins.json | 4 +- ...orial-step-non-persistence-of-changes.json | 26 +++- ...-tutorial-step-starting-from-a-plugin.json | 12 +- ...-047-tutorial-step-improving-a-plugin.json | 2 +- 7 files changed, 207 insertions(+), 44 deletions(-) diff --git a/Projects/Foundations/Schemas/Docs-Topics/C/Community/Community-Workspaces/community-workspaces-001-plugin-workspaces.json b/Projects/Foundations/Schemas/Docs-Topics/C/Community/Community-Workspaces/community-workspaces-001-plugin-workspaces.json index cd41f8a84..a030dd605 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/C/Community/Community-Workspaces/community-workspaces-001-plugin-workspaces.json +++ b/Projects/Foundations/Schemas/Docs-Topics/C/Community/Community-Workspaces/community-workspaces-001-plugin-workspaces.json @@ -9,7 +9,8 @@ { "language": "ES", "text": "Superalgos conecta con varios plugin workspaces configurados por la comunidad para facilitar la incorporación de usuarios. Este tema cubre cada uno de ellos y explica su propósito.", - "updated": 1628037130662 + "updated": 1628037130662, + "style": "Definition" } ] }, @@ -17,7 +18,14 @@ { "style": "Text", "text": "Each plugin workspace shipping with Superalgos was built with a specific purpose. ", - "updated": 1616172565179 + "updated": 1616172565179, + "translations": [ + { + "language": "ES", + "text": "Cada plugin workspace incluído en Superalgos ha sido cnstruido para un propósito específico.", + "updated": 1633281831625 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-005-how-to-contribute-translations.json b/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-005-how-to-contribute-translations.json index 5cb18ef34..bd06ddcfe 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-005-how-to-contribute-translations.json +++ b/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-005-how-to-contribute-translations.json @@ -9,7 +9,8 @@ { "language": "ES", "text": "Los Docs (documentos) son originalmente escritos en Ingles. Hacer a Superalgos más accesible es un esfuerzo clave para el crecimiento de la comunidad y la base de usuarios. Traducir tutoriales y documentación del software a otros idiomas que no sean el Inglés es un aporte muy valioso!", - "updated": 1633170996967 + "updated": 1633170996967, + "style": "Definition" } ] }, @@ -22,7 +23,8 @@ { "language": "ES", "text": "Read About Contributing to the Docs (Leer sobre como contribuir a los Docs)", - "updated": 1633171160951 + "updated": 1633171160951, + "style": "Title" } ] }, @@ -34,7 +36,8 @@ { "language": "ES", "text": "Las traducciones son un caso particular de contribuir con los documentos. Por favor leer primero la página de como contribuir con los documentos, y regresar aqui para los detalles de como nosotros nos manejamos particularmente con las traducciones.", - "updated": 1633171406067 + "updated": 1633171406067, + "style": "Text" } ] }, @@ -46,7 +49,8 @@ { "language": "ES", "text": "About Translations ( Acerca de las traducciones)", - "updated": 1633171444432 + "updated": 1633171444432, + "style": "Title" } ] }, @@ -63,7 +67,8 @@ { "language": "ES", "text": "El sistema guarda el contenido de cada pagina de los Documentos en un solo archivo, independientemente de cuantas traducciones existan por cada página.", - "updated": 1633171834036 + "updated": 1633171834036, + "style": "Text" } ] }, @@ -75,7 +80,8 @@ { "language": "ES", "text": "Actualmente, existen al nivel de cada párrafo. Esto significa que, por cada párrafo de la página, puede haber tantas traducciones como lenguages de soporte hayan.", - "updated": 1633171706597 + "updated": 1633171706597, + "style": "Text" } ] }, @@ -87,7 +93,8 @@ { "language": "ES", "text": "Lo mencionado no afecta su trabajo directamente,pero es bueno tenerlo en cuenta ya que significa que muchos contribuyentes pueden estar trabajando la misma página al mismo tiempo. He aqui la necesidad de actualizar constantemente y de solicitar la contribución a menudo.", - "updated": 1633172414535 + "updated": 1633172414535, + "style": "Success" } ] }, @@ -99,68 +106,153 @@ { "language": "ES", "text": "Best Practices (Las mejores prácticas)", - "updated": 1633172460565 + "updated": 1633172460565, + "style": "Title" } ] }, { "style": "List", "text": "As explained in the How to Contribute to the Docs page, you must switch your Contributions Branch and your Current Branch to the develop branch. Remember to restart the app after the switch.", - "updated": 1616762259778 + "updated": 1616762259778, + "translations": [ + { + "language": "ES", + "text": "Como fue explicado en la página de How to Contribute to the Docs, debe cambiar su Contributions Branch (rama de contribución) y su Current Branch (rama actual) a la rama de desarrollo. Recuerde de recomenzar la app luego del cambio.", + "updated": 1633277617230 + } + ] }, { "style": "List", "text": "Make sure your system is up to date running the app.update command.", - "updated": 1616762308286 + "updated": 1616762308286, + "translations": [ + { + "language": "ES", + "text": "Asegúrese de que sus sitema esté actualizado haciendo correr el comando app.update.", + "updated": 1633277826500 + } + ] }, { "style": "List", - "text": "Then, switch to the language you wish to translate to." + "text": "Then, switch to the language you wish to translate to.", + "translations": [ + { + "language": "ES", + "text": "Entonces, cambie el idioma al cual desea traducir.", + "updated": 1633277782209 + } + ] }, { "style": "List", "text": "To translate a paragraph, right-click to edit the content and replace the English text with your translation. That's it!", - "updated": 1613825599051 + "updated": 1613825599051, + "translations": [ + { + "language": "ES", + "text": "Para traducir un párrafo cliquear botón derecho editar el contenido y reemplace e texto en Inglés con su traducción. Eso es!", + "updated": 1633277934174 + } + ] }, { "style": "List", "text": "You may find it easier to write your translations in a separate text editor, where you may use spelling and grammar-checking software. Once you've double-checked your translation, you may come back to Superalgos to replace each paragraph with the translated version.", - "updated": 1613825640442 + "updated": 1613825640442, + "translations": [ + { + "language": "ES", + "text": "Puede encontrar más fácil escribir su traducción en un editor de texto separado, donde puede utilizar corrector ortográfico y gramatical. Ona vez que haya doble chequeado su traducción, puede volver a Superalgos para reemplazar cada parrafo con la versión traducida.", + "updated": 1633278119180 + } + ] }, { "style": "List", "text": "Remember that translations exist at the level of each paragraph. Always make sure that the translation you input matches the correct paragraph. This is important because if a paragraph is updated in the English version, all translations will get a notice that the particular paragraph may be outdated.", - "updated": 1613824142107 + "updated": 1613824142107, + "translations": [ + { + "language": "ES", + "text": "Recuerde que las traducciones existen al nivel de cada párrafo. Siempre asegúrese de que la traducción que introduzca corresponda con el párrafo adecuado. TEsto es impotante porque si el pàrrafo es actualizado en la versión en Inglés, todas las traducciones recibirán un aviso de que ese parrafo en particular puede necesitar actualización.", + "updated": 1633278353289 + } + ] }, { "style": "List", "text": "Participate in the Superalgos Docs Group. Let people know what part of the Docs or which Tutorial you will be working with. This basic coordination will help avoid conflicts when more than one user works on the same pages at the same time.", - "updated": 1616762526615 + "updated": 1616762526615, + "translations": [ + { + "language": "ES", + "text": "Participe en Superalgos Docs Group ( grupo de documentos de superalgos). Permita que la gente sepa que parte de los documentos o que tutoriales va a estar trabajando. Esto coordinación básica ayudará a evitar conflictos cuando más de un usuario trabajan en la misma página al mismo tiempo.", + "updated": 1633278524671 + } + ] }, { "style": "Success", "text": "You may start with the translation of the Docs in [Language] page that you land on after you switch the language.", - "updated": 1613823805871 + "updated": 1613823805871, + "translations": [ + { + "language": "ES", + "text": "Puede comenzar con la traducción de los documentos de la pagina [Language] (idioma) que abra luego de cambiar el idioma.", + "updated": 1633278662035 + } + ] }, { "style": "Title", "text": "Translating Tutorials", - "updated": 1613823828960 + "updated": 1613823828960, + "translations": [ + { + "language": "ES", + "text": "Translating Tutorials Traduciendo tutoriales", + "updated": 1633278676243 + } + ] }, { "style": "Text", "text": "Tutorial pages present certain challenges that we must take into account while translating: the first and foremost is that the space available in the tutorial window is limited. This means that you have to be mindful of the length of the translated text and that you must test each of the tutorial steps to make sure the translation fits the available space.", - "updated": 1613825681579 + "updated": 1613825681579, + "translations": [ + { + "language": "ES", + "text": "Las páginas de los Tutorial presentan ciertos desafíos que debemos tener en cuenta mientras traducimos: el primero y principal es que el espacio disponible en la ventana del tutorial es limitado. Esto significa que debe considerar la extensión del texto traducido y que debe probar cada paso del tutorial para asegurarse que la traducción cabe en el espacio disponible.", + "updated": 1633279006183 + } + ] }, { "style": "Text", "text": "You will notice that if you open the Docs when a tutorial is running, the Docs automatically load the page of the corresponding tutorial step, so that you may edit it. This is quite helpful, as you may translate the page and see how it looks on the tutorial window in real-time.", - "updated": 1613825697215 + "updated": 1613825697215, + "translations": [ + { + "language": "ES", + "text": "Notará que si abre los documentos mientras el tutorial está corriendo, los documentos automáticamente carga l página correspondiente al paso del tutorial, entonces puede editarlo. Esto es de gran ayuda, ya que podrá traducir la página y ver como se ve en la ventanta del tutorial al mismo tiempo.", + "updated": 1633279236805 + } + ] }, { "style": "Important", "text": "However, this is not always the case. Some tutorial steps are configured to close the Docs or the editor, and when you open the Docs manually, the tutorial step page is not loaded automatically. In such cases, you must search for the name of the page — which should match the title of the tutorial step — so that you may access the page manually.", - "updated": 1613825460620 + "updated": 1613825460620, + "translations": [ + { + "language": "ES", + "text": "De todos modos, este no es siempre el caso. Algunos pasos de los tutoriales están configurados para cerrar los dcumentos o el editor, y cuando abre los documentos manualmente, la página del paso del tutorial no se carga automáticamente. En estos casos, deberá buscar la pagina por su nombre — la cual debería coincidir con el titulo del paso en el tutorial — podrá acceder a la página en forma manual.", + "updated": 1633279497908 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/Docs-Topics/T/Tested/Tested-Exchanges/tested-exchanges-001-community-effort-to-test-exchanges.json b/Projects/Foundations/Schemas/Docs-Topics/T/Tested/Tested-Exchanges/tested-exchanges-001-community-effort-to-test-exchanges.json index a8b7f61c1..f955098c4 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/T/Tested/Tested-Exchanges/tested-exchanges-001-community-effort-to-test-exchanges.json +++ b/Projects/Foundations/Schemas/Docs-Topics/T/Tested/Tested-Exchanges/tested-exchanges-001-community-effort-to-test-exchanges.json @@ -4,7 +4,14 @@ "type": "Community Effort to Test Exchanges", "definition": { "text": "This topic covers the results of the Community work testing exchanges. Each page in the topic describes the results of the tests performed on one exchange, and explains whether the exchange is usable or not.", - "updated": 1616010652806 + "updated": 1616010652806, + "translations": [ + { + "language": "ES", + "text": "Este tópico cubre los resultados de los trabajos de testeo de la comunidad en los exchanges. Cada página en el tópico describe el resultados de los testeos realizados en un exchange, y explica si el exchange es utilizable o no.", + "updated": 1633284067216 + } + ] }, "paragraphs": [ { @@ -14,12 +21,26 @@ }, { "style": "Text", - "text": "Superalgos uses the CCXT library to communicate with exchanges. CCXT is an open-source project attempting to standardize access to exchanges APIs." + "text": "Superalgos uses the CCXT library to communicate with exchanges. CCXT is an open-source project attempting to standardize access to exchanges APIs.", + "translations": [ + { + "language": "ES", + "text": "Superalgos utiliza el CCXT library para comunicarse con los exchanges. CCXT es proyecto de código abierto que intenta estandarizar el acceso a las APIs de los exchanges .", + "updated": 1633284193717 + } + ] }, { "style": "Text", "text": "The project lists more than 120 exchanges as \"supported\" and a few dozen exchanges as \"certified\". See the list in the following ink:", - "updated": 1616006648441 + "updated": 1616006648441, + "translations": [ + { + "language": "ES", + "text": "El proyecto lista más de 120 exchanges as \"supported\" and a few dozen exchanges as \"certified\". See the list in the following ink:", + "updated": 1633284228947 + } + ] }, { "style": "Link", @@ -29,12 +50,26 @@ { "style": "Text", "text": "However, it is not clear what exactly is supported nor what is certified. Current experience shows that standardization has still a long way to go.", - "updated": 1616006593509 + "updated": 1616006593509, + "translations": [ + { + "language": "ES", + "text": "De todos modos, no está muy claro exactamente cuales están respaldados y cuales certificados. Experiencias actuales muestran que la estandarización todavía tiene un largo recorrido por delante.", + "updated": 1633284466832 + } + ] }, { "style": "Success", "text": "To know if your preferred exchange is ready to be used in Superalgos, consult the corresponding page in this topic.", - "updated": 1616006719622 + "updated": 1616006719622, + "translations": [ + { + "language": "ES", + "text": "Para saber si su exchange preferido está listo para ser utiliado por Superalgos, consulte la página correspondiente a este tópico.", + "updated": 1633284553628 + } + ] }, { "style": "Title", @@ -44,11 +79,25 @@ { "style": "Text", "text": "If your preferred exchange doesn't show up in this list, it means that it hasn't been tested. You may want to ask in the Develop Group to see if anyone has started tests. ", - "updated": 1616154716371 + "updated": 1616154716371, + "translations": [ + { + "language": "ES", + "text": "Si tu exchange preferido no está incluído en este listado, significa que no ha sido probado. Puede querer preguntar en el Develop Group si alguien ha comenzado con el testeo.", + "updated": 1633284684470 + } + ] }, { "style": "Success", - "text": "If you are a developer, you may want to learn How to Test New Exchanges and help the Community in the quest to expand the list." + "text": "If you are a developer, you may want to learn How to Test New Exchanges and help the Community in the quest to expand the list.", + "translations": [ + { + "language": "ES", + "text": "Si eres un developer, puedes querer aprender How to Test New Exchanges y ayudar a la comunidad en la búsqueda de expandir el listado.", + "updated": 1633284798025 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-043-tutorial-step-placing-plugins.json b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-043-tutorial-step-placing-plugins.json index e86ba0b8c..66410b618 100644 --- a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-043-tutorial-step-placing-plugins.json +++ b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-043-tutorial-step-placing-plugins.json @@ -57,8 +57,8 @@ }, { "language": "ES", - "text": "Nuevos nodos Plugin File se crean para cada plugin in \\Plugins\\Trading-Systems. Puede eliminar los nodos Plugin File no necesitas y conserva los que necesites! Luego, puedes agregar y anclar el nodo Plugin File Position donde deseas colocar el plugin.", - "updated": 1626643680169, + "text": "Nuevos nodos Plugin File se crean para cada plugin in \\Foundations\\Plugins\\Trading-Systems. Puede eliminar los nodos Plugin File que no necesita y conservar los que necesite! Luego, puedes agregar y anclar el nodo Plugin File Position donde deseas colocar la jerarquía del plugin. ", + "updated": 1633282144023, "style": "Text" } ] diff --git a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-044-tutorial-step-non-persistence-of-changes.json b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-044-tutorial-step-non-persistence-of-changes.json index cc90cb9cb..190cf1784 100644 --- a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-044-tutorial-step-non-persistence-of-changes.json +++ b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-044-tutorial-step-non-persistence-of-changes.json @@ -38,8 +38,8 @@ }, { "language": "ES", - "text": "Hierarchies incluidos en el workspace, ya que los plugins no se guardan en el nivel del workspace. Como tal, los cambios realizados en esas jerarquías no persisten. Si deseas modificar un plugin y seguir trabajando con la versión modificada en el futuro, debes clonar o hacer una copia de seguridad del plugin y trabajar en la copia resultante.", - "updated": 1626702533816, + "text": "Las Hierarchies (Jerarquías) colocadas en el workspace como plugins (copias) no se guardan en el workspace por defecto. Como resultado, los cambios realizados en esas jerarquías no persiten, a menos que las salve en forma manual o habilite el guardado automático. ", + "updated": 1633282516205, "style": "Warning" } ] @@ -57,8 +57,8 @@ }, { "language": "ES", - "text": "¡Pasaré por algunos casos de uso específicos en los próximos pasos!", - "updated": 1626702765005, + "text": "Hay dos casos principales para modificar los plugins:", + "updated": 1633282630926, "style": "Text" } ] @@ -66,11 +66,25 @@ { "style": "List", "text": "You wish to modify a plugin to make it your own and keep working with the modified version in the future.", - "updated": 1629897838348 + "updated": 1629897838348, + "translations": [ + { + "language": "ES", + "text": "Desea modificar un plugin para hacer uno propio y continuar trabajando con la versión modificada en el futuro.", + "updated": 1633282732027 + } + ] }, { "style": "List", - "text": "You wish to update and improve a plugin to contribute the improvements to the project." + "text": "You wish to update and improve a plugin to contribute the improvements to the project.", + "translations": [ + { + "language": "ES", + "text": "Desea actualizar y mejorar un plugin para contribuir en el mejoramiento del proyecto.", + "updated": 1633282817838 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-046-tutorial-step-starting-from-a-plugin.json b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-046-tutorial-step-starting-from-a-plugin.json index 04eeef2a6..559d1f7dd 100644 --- a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-046-tutorial-step-starting-from-a-plugin.json +++ b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-046-tutorial-step-starting-from-a-plugin.json @@ -18,8 +18,8 @@ }, { "language": "ES", - "text": "Un caso típico es cuando desea introducir cambios en una estrategia de envío con el sistema para comenzar con una configuración probada.", - "updated": 1626702894193, + "text": "Miremos el primer escenario: un caso típico es cuando desea introducir cambios a una estrategia incluída en el sistema para comenzar con una configuración probada.", + "updated": 1633283150203, "style": "Definition" } ] @@ -38,8 +38,8 @@ }, { "language": "ES", - "text": "Digamos que recién estás comenzando con Superalgos, has hecho algunos tutoriales y estás listo para comenzar a jugar con una estrategia. Deseas comenzar con una estrategia existente e introducir modificaciones menores para comprender mejor cómo funcionan las cosas. La estrategia en cuestión se incluye como plugin en un workspace específico.", - "updated": 1626703032336, + "text": "Digamos que está listo para comenzar a jugar con una estrategia.. Quiere comenzar con una existente o introducir modificaciones para entender como trabajan las cosas. No tiene intensiones de contribuir con los cambios. Solo desea jugar con esto y cambiarlo a su gusto! Entonces, haga lo siguiente:", + "updated": 1633283766269, "style": "Text" } ] @@ -57,8 +57,8 @@ }, { "language": "ES", - "text": "En tales casos, debes eliminar el nodo Plugin File correspondiente a el Trading System y restaurar el archivo original en la carpeta \\Plugins\\Trading-Systems como si fuera un backup: arrastra el archivo y suéltalo en el Design Space!", - "updated": 1626703323868, + "text": "Borre el nodo Plugin File correspondiente al Trading System y restablezca el plugin file original en (\\Plugins\\Trading-Systems folder) como si fuera un a backup: arrastre el archivo y suéltelo en el Design Space! La estrategia ahora vive en el workspace y puede modificarlo y grabarlo.", + "updated": 1633283708150, "style": "Success" } ] diff --git a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-047-tutorial-step-improving-a-plugin.json b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-047-tutorial-step-improving-a-plugin.json index 730af6bbc..06b59af30 100644 --- a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-047-tutorial-step-improving-a-plugin.json +++ b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-047-tutorial-step-improving-a-plugin.json @@ -5,7 +5,7 @@ "definition": { "text": "About the second scenario: let's say you are testing the EMA indicator, found a bug and know how to fix it. You intend to contribute the fix so that everyone benefits from it!", "icon": { - "name": "sensor-bot", + "name": "indicator-bot", "project": "Foundations" }, "updated": 1629909327051, From e43f3aac01e81dca46fee224c69f7e172c3f76a4 Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Sun, 3 Oct 2021 23:28:44 +0200 Subject: [PATCH 45/82] This is my contribution to Superalgos --- ...o-002-establish-and-remove-references.json | 90 ++++++++++++++++--- 1 file changed, 80 insertions(+), 10 deletions(-) diff --git a/Projects/Foundations/Schemas/Docs-Topics/H/How/How-To/how-to-002-establish-and-remove-references.json b/Projects/Foundations/Schemas/Docs-Topics/H/How/How-To/how-to-002-establish-and-remove-references.json index 5055aecdb..3931af158 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/H/How/How-To/how-to-002-establish-and-remove-references.json +++ b/Projects/Foundations/Schemas/Docs-Topics/H/How/How-To/how-to-002-establish-and-remove-references.json @@ -4,7 +4,14 @@ "type": "Establish and Remove References", "definition": { "text": "To establish a reference, right-click on the first node and drag it close to the target node. The remove a reference, use the delink button on the menu.", - "updated": 1609949247846 + "updated": 1609949247846, + "translations": [ + { + "language": "ES", + "text": "Para establecer la referencia, click derecho en el primer nodo y arrástrelo cerca del nodo de destino. Entonces remueva la referencia, use el boton delink en el menú.", + "updated": 1633296472626 + } + ] }, "paragraphs": [ { @@ -14,7 +21,14 @@ }, { "style": "Text", - "text": "When establishing a reference, grey rings show which nodes you may establish the reference with. In case there are multiple nodes that would accept the reference, the one closer to the node where the reference originates is highlighted with a golden ring. Releasing the mouse button establishes the reference with the highlighted node." + "text": "When establishing a reference, grey rings show which nodes you may establish the reference with. In case there are multiple nodes that would accept the reference, the one closer to the node where the reference originates is highlighted with a golden ring. Releasing the mouse button establishes the reference with the highlighted node.", + "translations": [ + { + "language": "ES", + "text": "Cuando esteé estableciendo una referencia, anilos grises muestran con cuales nodos puede establecer la referencia. En caso de que haya muchos nodos que aceptarían la referencia, el nodo que esté más cerca de donde se origina la referencia está destacado con un anillo dorado. Liberando el botón del mouse establece a referencia con el nodo destacado.", + "updated": 1633296500174 + } + ] }, { "style": "Gif", @@ -23,12 +37,26 @@ }, { "style": "Text", - "text": "The reference is visually represented by a faint grey dotted line. Such line is visible only when both ends of the reference are visible." + "text": "The reference is visually represented by a faint grey dotted line. Such line is visible only when both ends of the reference are visible.", + "translations": [ + { + "language": "ES", + "text": "La referencia es visualmente representada por una leve linea de puntos grises. Esta linea es vicible solo cuando ambos extremos de la referencia son visibles.", + "updated": 1633295706095 + } + ] }, { "style": "Text", "text": "To remove a reference or delink two nodes, use the delink button on the node where the reference originates.", - "updated": 1609949517565 + "updated": 1609949517565, + "translations": [ + { + "language": "ES", + "text": "Para remover una referencia o deslinkear dos nodos, use el botón delink button del nodo dondela referencia se origina.", + "updated": 1633295798732 + } + ] }, { "style": "Anchor", @@ -46,7 +74,14 @@ { "style": "Text", "text": "The process is exactly the same. All you need to do is master a few tricks so that you may drag one of the nodes all the way to where the second node is.", - "updated": 1611940896508 + "updated": 1611940896508, + "translations": [ + { + "language": "ES", + "text": "El proceso es exactamente el mismo. Todo lo que necesita es manejar unos pocos trucos para que pueda arrastrar uno de los nodos todo el recorrido hasta donde el segundo nodo está.", + "updated": 1633295934654 + } + ] }, { "style": "Youtube", @@ -56,24 +91,59 @@ { "style": "Text", "text": "These UI tricks may make your life easier:", - "updated": 1611940968078 + "updated": 1611940968078, + "translations": [ + { + "language": "ES", + "text": "Estos UI trucos pueden hacer tu vida más fácil:", + "updated": 1633295979755 + } + ] }, { "style": "List", "text": "Use the design space map as many times as required to find your way from one hierarchy to the other.", - "updated": 1611940996169 + "updated": 1611940996169, + "translations": [ + { + "language": "ES", + "text": "Use el design space map tantas veces como sea necesario para encontrar el camino desde una jeraquía a la otra.", + "updated": 1633296062866 + } + ] }, { "style": "List", - "text": "Pin the node you are going to move across the design space, so that you may drop it at any point to check the design space map for directions." + "text": "Pin the node you are going to move across the design space, so that you may drop it at any point to check the design space map for directions.", + "translations": [ + { + "language": "ES", + "text": "Fije el nodo que va a mover a través del espacio de diseño, para que pueda soltarlo en cualquier punto para chequear las direcciones en el mapa del espacio de diseño.", + "updated": 1633296213030 + } + ] }, { "style": "List", - "text": "Use Ctrl / Command + arrow keys to drag the node across the screen after clicking on it with the mouse. Keep keys pressed and the node flies!" + "text": "Use Ctrl / Command + arrow keys to drag the node across the screen after clicking on it with the mouse. Keep keys pressed and the node flies!", + "translations": [ + { + "language": "ES", + "text": "Use Ctrl / Command + arteclas de flechas para arrastrar el nodo a través dela pantalla despues de clickear en el con el mouse. Mantenga las teclas presionadas y el nodo vuela!", + "updated": 1633296325908 + } + ] }, { "style": "List", - "text": "Remove the pin once the reference is established so that the node goes back to its place." + "text": "Remove the pin once the reference is established so that the node goes back to its place.", + "translations": [ + { + "language": "ES", + "text": "Remueva el ijado ona vez que la referencia sea establecida para que el nodo vuelva a su lugar.", + "updated": 1633296417854 + } + ] } ] } \ No newline at end of file From fc3419e2c1cf9460cba042ea675d777140d408d6 Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Sun, 3 Oct 2021 23:39:45 +0200 Subject: [PATCH 46/82] This is my contribution to Superalgos --- ...al-036-tutorial-step-tokens-dont-move.json | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-036-tutorial-step-tokens-dont-move.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-036-tutorial-step-tokens-dont-move.json index dfa209cb2..0c21aa04f 100644 --- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-036-tutorial-step-tokens-dont-move.json +++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-036-tutorial-step-tokens-dont-move.json @@ -8,18 +8,39 @@ "icon": { "name": "stop", "project": "Foundations" - } + }, + "translations": [ + { + "language": "ES", + "text": "Cuando decimos Token Power Flows, es importante aclarar que los tokens no van a ninguna parte! Es el Token Power el que fluye!", + "updated": 1633296750160 + } + ] }, "paragraphs": [ { "style": "Important", "text": "Tokens in your Governance Address never leave your address! There is zero cost for participating in governance! The balance in your address confers Token Power to your User Profile, and it is this abstraction that flows down the hierarchy, not actual tokens.", - "updated": 1630929379130 + "updated": 1630929379130, + "translations": [ + { + "language": "ES", + "text": "Tokens en su Governance Address nunca se van de su dirección! Hay cero costo por participar en la gobernancia! El balance en su dirección le confiere Token Power a su User Profile, y es esta abstracción lo que fluye hacia abajo en la jerarquia, no tokens reales.", + "updated": 1633297162024 + } + ] }, { "style": "Callout", "text": "Remind me to show you how to play with Token Power Flows before we wrap up the tutorial! But let's get back to Community Building Programs before we lose our way!", - "updated": 1630933419243 + "updated": 1630933419243, + "translations": [ + { + "language": "ES", + "text": "Recuérdame que te muestre icomo jugar con Token Power Flows antes de que embalemos el tutorial! Pero regresemos a Community Building Programs antes de que perdamos el rumbo!", + "updated": 1633296908255 + } + ] } ] } \ No newline at end of file From fed1b8d0ec9e8b5cdbf9cf3d52fa6980255dab7f Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Sun, 3 Oct 2021 23:57:22 +0200 Subject: [PATCH 47/82] This is my contribution to Superalgos --- ...-044-tutorial-step-playing-with-flows.json | 54 ++++++++++++++++--- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-044-tutorial-step-playing-with-flows.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-044-tutorial-step-playing-with-flows.json index 6af3e3190..2c7c26c3f 100644 --- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-044-tutorial-step-playing-with-flows.json +++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-044-tutorial-step-playing-with-flows.json @@ -8,31 +8,73 @@ "icon": { "name": "Programs//delegation-program", "project": "Governance" - } + }, + "translations": [ + { + "language": "ES", + "text": "Casi me olvido! Antes de que se vaya, Voy a darle un curso intensivo para que pueda jugar un poco con algo de Token Power real!", + "updated": 1633297571727 + } + ] }, "paragraphs": [ { "style": "Text", "text": "We're sneaking into the lead developer's User Profile, particularly in his Delegation Program! Your mission: delegate yourself some Token Power so that you can play with the flows within your own profile!", - "updated": 1630931293437 + "updated": 1630931293437, + "translations": [ + { + "language": "ES", + "text": "Estamos espiando en el User Profile del leader de develop, particularlmente en su Delegation Program! la misión: deleguese a si mismo algo de Token Power para que pueda jugar con el flujo dentro de su propio perfil!", + "updated": 1633297853468 + } + ] }, { "style": "Callout", - "text": "Use the User Delegate node on the right to reference your own User Profile!" + "text": "Use the User Delegate node on the right to reference your own User Profile!", + "translations": [ + { + "language": "ES", + "text": "Use el nodo de User Delegate a la derecha para referenciar a su propio User Profile!", + "updated": 1633298180980 + } + ] }, { "style": "List", "text": "You can freely play with other User Profiles.", - "updated": 1630931454654 + "updated": 1630931454654, + "translations": [ + { + "language": "ES", + "text": "Puede libremente jugar con otros User Profiles.", + "updated": 1633297955207 + } + ] }, { "style": "List", "text": "Those profiles don't save with the workspace.", - "updated": 1630931469032 + "updated": 1630931469032, + "translations": [ + { + "language": "ES", + "text": "Esos profiles no se graban en el workspace.", + "updated": 1633298215317 + } + ] }, { "style": "List", - "text": "Even if you submitted them to the repo, they would be rejected by our bot controlling that profiles are uploaded by their owners only." + "text": "Even if you submitted them to the repo, they would be rejected by our bot controlling that profiles are uploaded by their owners only.", + "translations": [ + { + "language": "ES", + "text": "Aunque los someta al repositorio, serían rechazados por nuestro bot controlando que profiles son actualizados por sus dueños unicamente.", + "updated": 1633298152744 + } + ] } ] } \ No newline at end of file From 99b8734417bd7ad8e05b5c6a7c03a829b5465844 Mon Sep 17 00:00:00 2001 From: quantum8 Date: Mon, 4 Oct 2021 09:08:02 +1000 Subject: [PATCH 48/82] Updated user profile again for governance claims --- .../Plugins/User-Profiles/quantum8.json | 152 ++++++------------ 1 file changed, 47 insertions(+), 105 deletions(-) diff --git a/Projects/Governance/Plugins/User-Profiles/quantum8.json b/Projects/Governance/Plugins/User-Profiles/quantum8.json index df45fbe51..7ee935bb5 100644 --- a/Projects/Governance/Plugins/User-Profiles/quantum8.json +++ b/Projects/Governance/Plugins/User-Profiles/quantum8.json @@ -1,7 +1,7 @@ { "type": "User Profile", "name": "quantum8", - "config": "{\n \"signature\": {\n \"message\": \"quantum8\",\n \"messageHash\": \"0x9eb09f3e33aa12ba004cec8f8b825ea0960c0bb2571c93c20e447e56be0f76a3\",\n \"v\": \"0x1b\",\n \"r\": \"0x0c2960da1cec24bc9a59f83a4cfaff7fbc39199c7394698aa58bda25cc2f049f\",\n \"s\": \"0x79ac843019064f1830b0466712f62aa3dcf78f550aee958ac6124fd8fde19ca2\",\n \"signature\": \"0x0c2960da1cec24bc9a59f83a4cfaff7fbc39199c7394698aa58bda25cc2f049f79ac843019064f1830b0466712f62aa3dcf78f550aee958ac6124fd8fde19ca21b\"\n },\n \"codeName\": \"quantum8\"\n}", + "config": "{\"signature\":{\"message\":\"quantum8\",\"messageHash\":\"0x9eb09f3e33aa12ba004cec8f8b825ea0960c0bb2571c93c20e447e56be0f76a3\",\"v\":\"0x1b\",\"r\":\"0x0c2960da1cec24bc9a59f83a4cfaff7fbc39199c7394698aa58bda25cc2f049f\",\"s\":\"0x79ac843019064f1830b0466712f62aa3dcf78f550aee958ac6124fd8fde19ca2\",\"signature\":\"0x0c2960da1cec24bc9a59f83a4cfaff7fbc39199c7394698aa58bda25cc2f049f79ac843019064f1830b0466712f62aa3dcf78f550aee958ac6124fd8fde19ca21b\"},\"codeName\":\"quantum8\"}", "project": "Governance", "tokenPowerSwitch": { "type": "Token Power Switch", @@ -128,11 +128,11 @@ "savedPayload": { "position": { "x": 15606.471656997473, - "y": 12037.867965644036 + "y": 23437.867965644036 }, "targetPosition": { "x": 15394.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, @@ -150,7 +150,7 @@ "communityBuildingPrograms": { "type": "Community Building Programs", "name": "New Community Building Programs", - "config": "{}", + "config": "{\n \"percentage\": 1\n}", "project": "Governance", "referralProgram": { "type": "Referral Program", @@ -258,11 +258,11 @@ "savedPayload": { "position": { "x": 15954.14724377684, - "y": 12100 + "y": 23500 }, "targetPosition": { "x": 15694.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, @@ -312,14 +312,12 @@ "referenceParent": { "type": "User Profile", "name": "Julian-Molina", - "id": "1fd95e41-4b22-48d5-be3a-904c37afcb11" + "id": "b85aaac1-0708-4aec-97f9-bc3cc70e530a" }, "referenceParentCombinedNodePath": [ [ "Julian-Molina", - "User Profile", - "Governance", - "1fd95e41-4b22-48d5-be3a-904c37afcb11" + "User Profile" ] ] } @@ -424,11 +422,11 @@ "savedPayload": { "position": { "x": 15954.14724377684, - "y": 12400 + "y": 23800 }, "targetPosition": { "x": 15694.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, @@ -447,11 +445,11 @@ "savedPayload": { "position": { "x": 15694.33962264151, - "y": 12250 + "y": 23650 }, "targetPosition": { "x": 15394.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, @@ -471,66 +469,10 @@ "name": "New Votes And Claims Programs", "config": "{}", "project": "Governance", - "votingProgram": { - "type": "Voting Program", - "name": "New Voting Program", - "config": "{}", - "project": "Governance", - "votesSwitch": [], - "tokensBonus": { - "type": "Tokens Bonus", - "name": "New Tokens Bonus", - "project": "Governance", - "id": "d448e95d-db4e-45dd-a0f3-adcc3169a128", - "savedPayload": { - "position": { - "x": 16186.027152770916, - "y": 12617.423461417475 - }, - "targetPosition": { - "x": 15896.249404884195, - "y": 12539.77774788672 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "abfe64f3-9fd9-4ff3-8520-841e84472055", - "savedPayload": { - "position": { - "x": 15896.249404884195, - "y": 12539.77774788672 - }, - "targetPosition": { - "x": 15606.471656997473, - "y": 12462.132034355964 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": true, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, "claimsProgram": { "type": "Claims Program", "name": "New Claims Program", - "config": "{}", + "config": "{\n \"percentage\": 99\n}", "project": "Governance", "assetClaimsFolders": [ { @@ -548,12 +490,12 @@ "id": "68121dca-efcb-413c-b2c7-08890be6c36b", "savedPayload": { "position": { - "x": 16203.73261279889, - "y": 13051.909782242685 + "x": 16418.603691353437, + "y": 24074.264068711927 }, "targetPosition": { - "x": 15943.92499166356, - "y": 12901.909782242685 + "x": 16118.603691353437, + "y": 24074.264068711927 }, "floatingObject": { "isPinned": false, @@ -569,7 +511,7 @@ "referenceParent": { "type": "Asset", "name": "quantum.json", - "id": "7c8eaae9-331d-470b-bb24-012daad50c27" + "id": "9ac2e5dc-6b87-43ae-82bc-758669f95074" }, "referenceParentCombinedNodePath": [ [ @@ -595,12 +537,12 @@ "id": "ac8cd464-4ba9-42b3-8ae6-c229f8e26931", "savedPayload": { "position": { - "x": 15943.92499166356, - "y": 12901.909782242685 + "x": 16118.603691353437, + "y": 24074.264068711927 }, "targetPosition": { - "x": 15684.117370528229, - "y": 12751.909782242685 + "x": 15818.603691353437, + "y": 24074.264068711927 }, "floatingObject": { "isPinned": false, @@ -621,7 +563,7 @@ { "type": "Position Claims Folder", "name": "New Position Claims Folder", - "config": "{}", + "config": "{\n \"percentage\": 20\n}", "project": "Governance", "positionClaimsFolders": [], "positionContributionClaims": [ @@ -633,12 +575,12 @@ "id": "c4c0c9fb-bd96-4c75-b9ee-187e7f5cb9b3", "savedPayload": { "position": { - "x": 15839.40879758974, - "y": 13331.465278016127 + "x": 16242.867760065365, + "y": 24498.528137423855 }, "targetPosition": { - "x": 15761.763084058985, - "y": 13041.687530129406 + "x": 16030.7357257094, + "y": 24286.39610306789 }, "floatingObject": { "isPinned": false, @@ -688,12 +630,12 @@ "id": "f0da0682-0041-4766-8650-76b09c4cd6fd", "savedPayload": { "position": { - "x": 15761.763084058985, - "y": 13041.687530129406 + "x": 16030.7357257094, + "y": 24286.39610306789 }, "targetPosition": { - "x": 15684.117370528229, - "y": 12751.909782242685 + "x": 15818.603691353437, + "y": 24074.264068711927 }, "floatingObject": { "isPinned": false, @@ -716,12 +658,12 @@ "id": "8e22e033-836e-4984-944d-2af5a8130f92", "savedPayload": { "position": { - "x": 15534.117370528229, - "y": 13011.717403378016 + "x": 15818.603691353437, + "y": 24374.264068711927 }, "targetPosition": { - "x": 15684.117370528229, - "y": 12751.909782242685 + "x": 15818.603691353437, + "y": 24074.264068711927 }, "floatingObject": { "isPinned": false, @@ -739,12 +681,12 @@ "id": "e38b91df-79f1-457c-b68b-7b6ca9002a1a", "savedPayload": { "position": { - "x": 15684.117370528229, - "y": 12751.909782242685 + "x": 15818.603691353437, + "y": 24074.264068711927 }, "targetPosition": { "x": 15606.471656997473, - "y": 12462.132034355964 + "y": 23862.132034355964 }, "floatingObject": { "isPinned": false, @@ -763,11 +705,11 @@ "savedPayload": { "position": { "x": 15606.471656997473, - "y": 12462.132034355964 + "y": 23862.132034355964 }, "targetPosition": { "x": 15394.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, @@ -786,11 +728,11 @@ "savedPayload": { "position": { "x": 15394.33962264151, - "y": 12250 + "y": 23650 }, "targetPosition": { "x": 15094.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, @@ -813,11 +755,11 @@ "savedPayload": { "position": { "x": 14794.33962264151, - "y": 12250 + "y": 23650 }, "targetPosition": { "x": 15094.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, @@ -836,16 +778,16 @@ "savedPayload": { "position": { "x": 15094.33962264151, - "y": 12250 + "y": 23650 }, "targetPosition": { "x": 15094.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 From 823c920baf46f90fe993869d3a76448d0398fb27 Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Mon, 4 Oct 2021 13:54:04 +0200 Subject: [PATCH 49/82] This is my contribution to Superalgos --- .../Docs-Books/the-governance-project.json | 9 +- ...to-governance-001-governance-overview.json | 171 ++++++++++++++++-- 2 files changed, 160 insertions(+), 20 deletions(-) diff --git a/Projects/Governance/Schemas/Docs-Books/the-governance-project.json b/Projects/Governance/Schemas/Docs-Books/the-governance-project.json index eeb98ace4..3a7be216e 100644 --- a/Projects/Governance/Schemas/Docs-Books/the-governance-project.json +++ b/Projects/Governance/Schemas/Docs-Books/the-governance-project.json @@ -2,7 +2,14 @@ "type": "The Governance Project", "definition": { "text": "The Governance Project is designed as a flexible system that allows the Community to dynamically direct influence in arbitrary directions. It allows governance to evolve with the project. It also encourages permissionless innovation, as Contributors may propose new areas of development and rally the Community to incentivize expansion along new lines.", - "updated": 1624782493205 + "updated": 1624782493205, + "translations": [ + { + "language": "ES", + "text": "El proyecto de gobernanza está diseñado como un sistema flexible que permite a la comunidad dirigir influencias en direcciones arbitrarias en forma dinámica. Esto permite que la gobernanza evolucione con el proyecto. También promueve la innovación sin permiso, ya que los contribuyentes pueden proponer nuevas áreas de desarrollo y movilizar a la comunidad a incentivar la expansión a lo largo de nuevas lineas.", + "updated": 1633344584790 + } + ] }, "paragraphs": [ { diff --git a/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json b/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json index dd916b1ad..765df4065 100644 --- a/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json +++ b/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json @@ -4,37 +4,93 @@ "type": "Governance Overview", "definition": { "text": "Governance of the Superalgos Project is distributed among all members of the Community willing to participate. You may engage in multiple manners, help drive development in the desired directions, and contribute to nurturing a healthy community.", - "updated": 1630424148804 + "updated": 1630424148804, + "translations": [ + { + "language": "ES", + "text": "La gobernanza del proyecto de Superalgos está distribuída entre todos los miembros de la comunidad que estén dispuestos a participar. Puede comprometerse de múltiples maneras, ayudar a dirigir el desarrollo en las direcciones deseadas, y contribuir a nutrir una comunidad saludable.", + "updated": 1633345029161 + } + ] }, "paragraphs": [ { "style": "Text", "text": "To participate in governance, community members leverage their Superalgos SA Token holdings, exerting influence proportional to their Token Power and their Reputation. The combined influence of all token holders participating in governance determines, among other things:", - "updated": 1630065456504 + "updated": 1630065456504, + "translations": [ + { + "language": "ES", + "text": "Para participar en la gobernanza, los miembros de la comunidad apalancan su tenencia de Superalgos SA Token, ejerciendo influencia proporcional a su Token Power y a su Reputation. La inlfuencia combinada de todos los tenedores de token que participan en la gobernancia determinan, entre otras cosas:", + "updated": 1633345582953 + } + ] }, { "style": "List", - "text": "What Positions, Features, Assets, or project-development activities, in general, are incentivized and how." + "text": "What Positions, Features, Assets, or project-development activities, in general, are incentivized and how.", + "translations": [ + { + "language": "ES", + "text": "Que Positions, Features, Assets, o actividades de desarrollo de proyectos, en general, están incentivados y cómo.", + "updated": 1633348402852 + } + ] }, { "style": "List", - "text": "Which Contributors are compensated for which Contributions." + "text": "Which Contributors are compensated for which Contributions.", + "translations": [ + { + "language": "ES", + "text": "Que contribuyentes son pagados por cuales contribuciones.", + "updated": 1633345751024 + } + ] }, { "style": "List", - "text": "What Programs are funded and how." + "text": "What Programs are funded and how.", + "translations": [ + { + "language": "ES", + "text": "Qué programas se financian y cómo", + "updated": 1633345784026 + } + ] }, { "style": "Text", - "text": "You may exert your influence dynamically, as you may redirect your Token Power at any moment. The distribution of Token Power upon each release of the software — tied to the corresponding Superalgos SA Token Distribution Event — determines how tokens allocated to the release are distributed." + "text": "You may exert your influence dynamically, as you may redirect your Token Power at any moment. The distribution of Token Power upon each release of the software — tied to the corresponding Superalgos SA Token Distribution Event — determines how tokens allocated to the release are distributed.", + "translations": [ + { + "language": "ES", + "text": "Puede ejercer su influencia de forma dinámica, ya que puede redirigir su Token Power en cualquier momento. La distribución de Token Power en cada lanzamiento del software — atado al correspondiente Superalgos SA Token Distribution Event — determina cómo se distribuyen los tokens asignados al lanzamiento.", + "updated": 1633345986132 + } + ] }, { "style": "Text", - "text": "The Governance Project is designed as a flexible system that allows the Community to dynamically direct influence in arbitrary directions. It allows governance to evolve with the project. It also encourages permissionless innovation, as Contributors may propose new areas of development and rally the Community to incentivize expansion along new lines." + "text": "The Governance Project is designed as a flexible system that allows the Community to dynamically direct influence in arbitrary directions. It allows governance to evolve with the project. It also encourages permissionless innovation, as Contributors may propose new areas of development and rally the Community to incentivize expansion along new lines.", + "translations": [ + { + "language": "ES", + "text": "El Governance Project está diseñado como un sistema flexible que permite a la comunidad ejercer influencia en direcciones arbitrarias de manera dinámica. Permite que la gobernanza evolucione con el proyecto. también promueve la innovación sin permiso, ya que los Colaboradores pueden proponer nuevas áreas de desarrollo y conducir a la comunidad incentivar expansion a lo largo de lineas nuevas.", + "updated": 1633346387045 + } + ] }, { "style": "Note", - "text": "A Community engaged in governance is crucial for the development of the project, therefore participation is incentivized. In other words, you will earn Superalgos SA Tokens if you take part in the governance of Superalgos." + "text": "A Community engaged in governance is crucial for the development of the project, therefore participation is incentivized. In other words, you will earn Superalgos SA Tokens if you take part in the governance of Superalgos.", + "translations": [ + { + "language": "ES", + "text": "Una comunidad comprometida con la gobernanza es fundamental para el desarrollo del proyecto, por lo tanto se incentiva la participación, en otras palabras, ganará Superalgos SA Tokens si forma parte de la gobernanza de Superalgos.", + "updated": 1633346519203 + } + ] }, { "style": "Title", @@ -42,31 +98,73 @@ }, { "style": "Text", - "text": "The governance system is implemented within Superalgos as the Governance Project, making use of the same visual scripting resources, hierarchical data structures, and concepts such as References that make up the Superalgos paradigm you are familiar with." + "text": "The governance system is implemented within Superalgos as the Governance Project, making use of the same visual scripting resources, hierarchical data structures, and concepts such as References that make up the Superalgos paradigm you are familiar with.", + "translations": [ + { + "language": "ES", + "text": "El sistema de gobernanza se implementa con Superalgos, haciendo uso de los mismos recursos de secuencias de comandos visuale, estructuras de datos jerárquicos, y conceptos tales como referencias que conforman el paradigma de Superalgos con el que está familiarizado.", + "updated": 1633346787559 + } + ] }, { "style": "Text", - "text": "As such, governance does not require the use of smart contracts to enforce immutable rules. On the contrary, in Superalgos, governance is an ever-evolving notion, pretty much like the rest of the project." + "text": "As such, governance does not require the use of smart contracts to enforce immutable rules. On the contrary, in Superalgos, governance is an ever-evolving notion, pretty much like the rest of the project.", + "translations": [ + { + "language": "ES", + "text": "Como tal, la gobernanza no requiere el uso de contratos inteligentes para hacer cumplir reglas inmutables. Por el contrario, en Superalgos, la gobernanza es una noción en constante evolución, muy parecida al resto del proyecto. ", + "updated": 1633346878247 + } + ] }, { "style": "Callout", "text": "This flexibility is a crucial feature that will allow us to evolve the governance system, adapt the game theory behind it, and correct any exploits that bad actors may find over time.", - "updated": 1630424896773 + "updated": 1630424896773, + "translations": [ + { + "language": "ES", + "text": "Esta flexibilidad es una característica crucial que nos permitirá hacer evolucionar el sistema de gobernanza, adaptar la teoría del juego detrás de él y corregir cualquier vulnerabilidad que los malos actores puedan encontrar con el tiempo", + "updated": 1633346945113 + } + ] }, { "style": "Text", "text": "Governance is defined across multiple Governance Workspaces that users may load and contribute to. These workspaces feature the definitions of several hierarchies that determine the relationship of all the concepts affecting governance.", - "updated": 1630424913354 + "updated": 1630424913354, + "translations": [ + { + "language": "ES", + "text": "La gobernanza está definida a través de múltiples Governance Workspaces que los usuarios pueden cargar y contribuir con. Estos espacios de trabajo presentan las definiciones de varias jerarquías que determinan la relación de todos los conceptos que afectan la gobernanza.", + "updated": 1633347120583 + } + ] }, { "style": "Text", "text": "To participate in governance, users must set up and submit a User Profile plugin defining how they intend to exert the influence conferred by their Superalgos SA Token holdings. The influence and participation is defined through different types of programs, votes, and claims.", - "updated": 1629992750219 + "updated": 1629992750219, + "translations": [ + { + "language": "ES", + "text": "Para participar en la gobernanaza, los usuarios deben configurar y enviar un User Profile plugin que define cómo pretenden ejercer la influencia conferida por sus tenencias de Superalgos SA Token. La inlfuencia y participación está definida mediante diferentes tipos de programas, votos y declaraciones.", + "updated": 1633347353982 + } + ] }, { "style": "Text", "text": "The Governance System computes votes and claims in realtime, showing a preview of what the distribution may look like, on the UI.", - "updated": 1630425053320 + "updated": 1630425053320, + "translations": [ + { + "language": "ES", + "text": "El sistema de gobernanza computa los votos y las declaraciones en tiempo real, mostrando una vista previa de lo que la distribucion showing a preview of what the distribution puede parecer, en el UI.", + "updated": 1633347466937 + } + ] }, { "style": "Include", @@ -83,25 +181,60 @@ }, { "style": "Text", - "text": "Because all definitions affecting governance ship as plugins with the software, the process is transparent and auditable. " + "text": "Because all definitions affecting governance ship as plugins with the software, the process is transparent and auditable. ", + "translations": [ + { + "language": "ES", + "text": "Porque las definiciones que afectan a la gobernanza envia como plugin con el software, el proceso es transparente y auditable.", + "updated": 1633347687363 + } + ] }, { "style": "List", "text": "Any user may, at any point, load the corresponding Plugin Workspaces and visualize how influence is being exerted by all Superalgos SA Token holders participating.", - "updated": 1629995410591 + "updated": 1629995410591, + "translations": [ + { + "language": "ES", + "text": "cualquier usuario puede, en cualquier momento, cargar el correspondiente Plugin Workspaces y visualizar and visualizecómo la influencia está siendo ejercida por todos participantes titulares de Superalgos SA Token..", + "updated": 1633347841894 + } + ] }, { "style": "List", - "text": "Any user may verify all metrics managed by the Governance Project in the tables displayed in the Governace Tab." + "text": "Any user may verify all metrics managed by the Governance Project in the tables displayed in the Governace Tab.", + "translations": [ + { + "language": "ES", + "text": "Cualquier usuario puede verificar Any user may verify todas las métricas gestionadas por el Governance Project en las tablas desplegadas en el Governace Tab.", + "updated": 1633347961533 + } + ] }, { "style": "List", - "text": "Any user may run a simulation of the Superalgos SA Token distribution process and verify how tokens allocated to the next release will be distributed." + "text": "Any user may run a simulation of the Superalgos SA Token distribution process and verify how tokens allocated to the next release will be distributed.", + "translations": [ + { + "language": "ES", + "text": "Cualquier usuario puede hacer correr una simulación de el proceso de distribución de Superalgos SA Token y verificar verify cómo se distribuirán los tokens asignados a la próxima versión.", + "updated": 1633348037956 + } + ] }, { "style": "List", "text": "Any user may obtain (from GitHub) and load historical versions of the software, and run a simulation of the Superalgos SA Token Distribution Event to verify how tokens were distributed in past releases. Notice that, in this case, the absolute number of votes may not be valid as token holdings will have varied; however, any user may validate the relative distribution.", - "updated": 1630425087155 + "updated": 1630425087155, + "translations": [ + { + "language": "ES", + "text": "Cualquier usuario puede obtener (mediante GitHub) y cargar versiones históricas del software, y hacer correr una simulación de Superalgos SA Token Distribution Event para verificar como los tokens han sido distribuidos ten lasnzamientos anteriores. Note quet, en este caso, el número absoluto de votos puede no ser válido ya que las tenencias de token habrán variado, de todas maneras, cualquier usuario puede validar la distribución relativa.", + "updated": 1633348350518 + } + ] } ] } \ No newline at end of file From 9941896c4e2236ce173499ec8a951b1c29215e47 Mon Sep 17 00:00:00 2001 From: piyanthak Date: Mon, 4 Oct 2021 21:28:09 +0530 Subject: [PATCH 50/82] Add files via upload --- .../exchanges/binancecoinm.svg | 26 +++++++++++++++++++ .../exchanges/binanceusdm.svg | 26 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 Projects/Foundations/Icons-SVG-Sources/exchanges/binancecoinm.svg create mode 100644 Projects/Foundations/Icons-SVG-Sources/exchanges/binanceusdm.svg diff --git a/Projects/Foundations/Icons-SVG-Sources/exchanges/binancecoinm.svg b/Projects/Foundations/Icons-SVG-Sources/exchanges/binancecoinm.svg new file mode 100644 index 000000000..cd4782893 --- /dev/null +++ b/Projects/Foundations/Icons-SVG-Sources/exchanges/binancecoinm.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + diff --git a/Projects/Foundations/Icons-SVG-Sources/exchanges/binanceusdm.svg b/Projects/Foundations/Icons-SVG-Sources/exchanges/binanceusdm.svg new file mode 100644 index 000000000..cd4782893 --- /dev/null +++ b/Projects/Foundations/Icons-SVG-Sources/exchanges/binanceusdm.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + From 2697689c3cf49526a1a4279c3d9bfb7b70d82c45 Mon Sep 17 00:00:00 2001 From: piyanthak Date: Mon, 4 Oct 2021 21:29:30 +0530 Subject: [PATCH 51/82] Add files via upload --- .../Icons/Crypto-Exchanges/binancecoinm.png | Bin 0 -> 5562 bytes .../Icons/Crypto-Exchanges/binanceusdm.png | Bin 0 -> 5562 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Projects/Foundations/Icons/Crypto-Exchanges/binancecoinm.png create mode 100644 Projects/Foundations/Icons/Crypto-Exchanges/binanceusdm.png diff --git a/Projects/Foundations/Icons/Crypto-Exchanges/binancecoinm.png b/Projects/Foundations/Icons/Crypto-Exchanges/binancecoinm.png new file mode 100644 index 0000000000000000000000000000000000000000..8f4f719523513eee2c3254a187bdc5d36f8e28dc GIT binary patch literal 5562 zcmds5ZFCgX8NM@_;L3-|YB5V7*>!UY)l##75HngXO(<;VF6y#$EsJo?dB#H<-Vp zW#z@CC2Z_W&-4=8xCe`8l}surp84p*yGlkg)_3Z-ys>vK_}lU3+|t^+)0Y-^%}5&j zMCph9em2K_VEf=Tt9~_p$Iwv&8_ONH)z1>{tTn$ocum%uzo@p%)UPv!Hr?s+v_Ako?y4sJCQxJ(8Xg*@trR&sE&K;T&-fnRL!B{igs`~0ic zerNED3<6eChI9DN2+PK?oE%H#SWHmEmys(% zDRy!_$jL1+@Jo?jW+vk#7{HheLMdeMW#yM*qnB_AHm^)uwJ7PE#*9f7q_@f>i?KVb zd~tH;iBD77?;9}fuAM`w55DuJZ%GDN_nZ$IFPLH~i*W|HcI7Be1_ZK@byU>ugwGt& zfLx~Mt8koKzdS=R$2e{d7D-&TkAjD9X3+oVvVZZ!O71Xzc=_&I;4U~$i_Ab=!3%DE z2*L;sbVLz#?GEb{sRNeLoQ1W3vUp=_2a1gyYH zV?@c3iIR{RQG!`yW`JVZ*D2#L#QiN`ob%%wOTC)d$!tk}oV7U4=A8VWTjm?IVt|k` zvif*q*qVL3Iw^36Ja$pPk4m}Uwr$y!>$A!k^4mjQ2&v?N5!uz@l6v=2KyBxAT zI&9sVq(hEq``)gz;m=RI28m0tPyfde<%eQ`{?j7XQ?5LzcYoI6H9Vd&d;L5h9YGLz z;W=ef*mxjfvJ7P>`zhw8n?$ei7~arh1!}mcLeH|hH?jqIFU~#ie_M^;bhICAwuY@^ z#HBses{nH5m*8lQEK{e!Is2`~nk@H=Y{6kX$i#y;tpLTFGUkWmIZ|&kn>au*7ZOVa zSRMdNONIWlSN%em`x#7Dz@!rkqtM(moL!xX zl>mpHG~q@ZiT(YIVtaiFd-;Z_-Q9wf^C0kee<9%iB$8qlPKfR!SlNYB^s0;%KEA@g zNZQa-tpdp$TDb=@9?Sxk)%eidG>{DkNyF{%7zuvk85U}pr5|)Tm$3u)>-pMS5Zs08 zH#r9~{9#W&;YgCZ6(nsSIYlI^K(Z+4zek#yZWIie+Uoy(_GiQNn%Z?kqI>r>PcPp& zcUA6GJSxk1tj4f5zx!(Iyd&+`^=HYD?)Z3+k(@+iejEot<))--)I|=!gvXx*lUb7$Cjx^kz>q7b3%=q@&?e3xR=Z~5l z2)UTW7SoGd0I-y4(s-UM!6Iji1LIEhr3n{a?4D)nuDIsbeC>$t>Z}c010AoITOZ0; z9G3T$%}aYE=lYh4(j2es-<+#Ur{5dNoX;=ct3MMyS17)_W394n#OhFE?dfAa`KHys z-TYq5r;ClYW09qUx)Zv1b3m!cP*z7zCmx9bM84*9g&DJF`ic|)o{?r z#&M062FaTn?d%b+7$!@(Zg>()hXjr7u>?<0p(N5?6dro5C%l z*^cfCXRkjTIdvtwChqaV`FeRTbvqIi)jxavnaHVhw)leW*>FoP>#;13e08YE&Uzqe zQTeP?hlh#=vK2_WR7CTfe+*~$Ww&2|YK|=LrQRDSYAV%l>*1^=J2JoTrf5l0{et+r z-H>U#FBIN@EdA0L|Dzo{uI-JwV2sC|XVvB*KbM}*G(Hy!2V?qd$T+W`ITacf!aI`{ zUD?_{IO|-2^K95-X8G7;_ONJ9(EmxLS{xhroBNoX#)!Z0Ds}9@NFe+vq+BB|#UA{} zBSn?!7v`pW^(o2P1PI+vB}>MdQ3#TAE^Nq?#`;s~Do3fH0?>xsd^Als5%8C=IX@5r zN*x09JeWMgqW1cU(uM)X8$v@V())u{%ZTL!3cxvY(|mo(W!kME=>$n3k&FS!KU~hX zu*b@JQRO0%W{^+;SO=1zQpqO&2!)^uBpo2xkBm@=f^0F0#Y4NXvXM#|NQ!2oc0|pN z-I0{OY@!zr9^nt%`fOkw$QGBT8=s1Yo&)`C6kR;jX=~JyP$H(VacCB$zC$g30wTc@-u|lMNxcjD36+Oj=>mK_;le4b!CFxlw<#?iN?u z+-r>zeM*h-)U#8fjVsrm^eRR;t@IuLuMNv0eTJy6f$qVP6`7*u?hVH=K|9@@mV|g- zcd}Hp?UXH3*%EAma;n7E{CAeQ^;=pF@tzXRtulfqQBgDV1YDkzN4FegQrS)y2VPj{ zGSMxrJ4@rL78lu_ZN+%1$L%Oq0b(%dp}!6W!NK?19aYqk^U$P@oF_@@$axIW1&L=a zx+dayWQlb5!V5DC;N~GpH!~ib7j0qgj)<|S;@sNWRFszOTUTctDhM|CcbT7mcw?$H zW2fVx>XxH!{cQ6q;m$rxIsX%_{p_*x`hsIOJbsm1uQJq-a>9a+nc9dd867kA*Suq< z#u&YPs(?A%6=V^21tb;B;jR#$BjxDxD=Fs&c_$C$Gk7Ntt*jsMBOE0X~}48Q;%8DK!hHadAQAY(EhrDV(v zAdIt-0m+RS#EcOb-vB72iGgw65*M#ik&X@>2B2 a8hh!!E#uM$j;v<*8<#&JZ~e{gC;tfqu?e>T literal 0 HcmV?d00001 diff --git a/Projects/Foundations/Icons/Crypto-Exchanges/binanceusdm.png b/Projects/Foundations/Icons/Crypto-Exchanges/binanceusdm.png new file mode 100644 index 0000000000000000000000000000000000000000..8f4f719523513eee2c3254a187bdc5d36f8e28dc GIT binary patch literal 5562 zcmds5ZFCgX8NM@_;L3-|YB5V7*>!UY)l##75HngXO(<;VF6y#$EsJo?dB#H<-Vp zW#z@CC2Z_W&-4=8xCe`8l}surp84p*yGlkg)_3Z-ys>vK_}lU3+|t^+)0Y-^%}5&j zMCph9em2K_VEf=Tt9~_p$Iwv&8_ONH)z1>{tTn$ocum%uzo@p%)UPv!Hr?s+v_Ako?y4sJCQxJ(8Xg*@trR&sE&K;T&-fnRL!B{igs`~0ic zerNED3<6eChI9DN2+PK?oE%H#SWHmEmys(% zDRy!_$jL1+@Jo?jW+vk#7{HheLMdeMW#yM*qnB_AHm^)uwJ7PE#*9f7q_@f>i?KVb zd~tH;iBD77?;9}fuAM`w55DuJZ%GDN_nZ$IFPLH~i*W|HcI7Be1_ZK@byU>ugwGt& zfLx~Mt8koKzdS=R$2e{d7D-&TkAjD9X3+oVvVZZ!O71Xzc=_&I;4U~$i_Ab=!3%DE z2*L;sbVLz#?GEb{sRNeLoQ1W3vUp=_2a1gyYH zV?@c3iIR{RQG!`yW`JVZ*D2#L#QiN`ob%%wOTC)d$!tk}oV7U4=A8VWTjm?IVt|k` zvif*q*qVL3Iw^36Ja$pPk4m}Uwr$y!>$A!k^4mjQ2&v?N5!uz@l6v=2KyBxAT zI&9sVq(hEq``)gz;m=RI28m0tPyfde<%eQ`{?j7XQ?5LzcYoI6H9Vd&d;L5h9YGLz z;W=ef*mxjfvJ7P>`zhw8n?$ei7~arh1!}mcLeH|hH?jqIFU~#ie_M^;bhICAwuY@^ z#HBses{nH5m*8lQEK{e!Is2`~nk@H=Y{6kX$i#y;tpLTFGUkWmIZ|&kn>au*7ZOVa zSRMdNONIWlSN%em`x#7Dz@!rkqtM(moL!xX zl>mpHG~q@ZiT(YIVtaiFd-;Z_-Q9wf^C0kee<9%iB$8qlPKfR!SlNYB^s0;%KEA@g zNZQa-tpdp$TDb=@9?Sxk)%eidG>{DkNyF{%7zuvk85U}pr5|)Tm$3u)>-pMS5Zs08 zH#r9~{9#W&;YgCZ6(nsSIYlI^K(Z+4zek#yZWIie+Uoy(_GiQNn%Z?kqI>r>PcPp& zcUA6GJSxk1tj4f5zx!(Iyd&+`^=HYD?)Z3+k(@+iejEot<))--)I|=!gvXx*lUb7$Cjx^kz>q7b3%=q@&?e3xR=Z~5l z2)UTW7SoGd0I-y4(s-UM!6Iji1LIEhr3n{a?4D)nuDIsbeC>$t>Z}c010AoITOZ0; z9G3T$%}aYE=lYh4(j2es-<+#Ur{5dNoX;=ct3MMyS17)_W394n#OhFE?dfAa`KHys z-TYq5r;ClYW09qUx)Zv1b3m!cP*z7zCmx9bM84*9g&DJF`ic|)o{?r z#&M062FaTn?d%b+7$!@(Zg>()hXjr7u>?<0p(N5?6dro5C%l z*^cfCXRkjTIdvtwChqaV`FeRTbvqIi)jxavnaHVhw)leW*>FoP>#;13e08YE&Uzqe zQTeP?hlh#=vK2_WR7CTfe+*~$Ww&2|YK|=LrQRDSYAV%l>*1^=J2JoTrf5l0{et+r z-H>U#FBIN@EdA0L|Dzo{uI-JwV2sC|XVvB*KbM}*G(Hy!2V?qd$T+W`ITacf!aI`{ zUD?_{IO|-2^K95-X8G7;_ONJ9(EmxLS{xhroBNoX#)!Z0Ds}9@NFe+vq+BB|#UA{} zBSn?!7v`pW^(o2P1PI+vB}>MdQ3#TAE^Nq?#`;s~Do3fH0?>xsd^Als5%8C=IX@5r zN*x09JeWMgqW1cU(uM)X8$v@V())u{%ZTL!3cxvY(|mo(W!kME=>$n3k&FS!KU~hX zu*b@JQRO0%W{^+;SO=1zQpqO&2!)^uBpo2xkBm@=f^0F0#Y4NXvXM#|NQ!2oc0|pN z-I0{OY@!zr9^nt%`fOkw$QGBT8=s1Yo&)`C6kR;jX=~JyP$H(VacCB$zC$g30wTc@-u|lMNxcjD36+Oj=>mK_;le4b!CFxlw<#?iN?u z+-r>zeM*h-)U#8fjVsrm^eRR;t@IuLuMNv0eTJy6f$qVP6`7*u?hVH=K|9@@mV|g- zcd}Hp?UXH3*%EAma;n7E{CAeQ^;=pF@tzXRtulfqQBgDV1YDkzN4FegQrS)y2VPj{ zGSMxrJ4@rL78lu_ZN+%1$L%Oq0b(%dp}!6W!NK?19aYqk^U$P@oF_@@$axIW1&L=a zx+dayWQlb5!V5DC;N~GpH!~ib7j0qgj)<|S;@sNWRFszOTUTctDhM|CcbT7mcw?$H zW2fVx>XxH!{cQ6q;m$rxIsX%_{p_*x`hsIOJbsm1uQJq-a>9a+nc9dd867kA*Suq< z#u&YPs(?A%6=V^21tb;B;jR#$BjxDxD=Fs&c_$C$Gk7Ntt*jsMBOE0X~}48Q;%8DK!hHadAQAY(EhrDV(v zAdIt-0m+RS#EcOb-vB72iGgw65*M#ik&X@>2B2 a8hh!!E#uM$j;v<*8<#&JZ~e{gC;tfqu?e>T literal 0 HcmV?d00001 From 7aa52e4ff311c7f59fc39698ae9a40bd1b8894b3 Mon Sep 17 00:00:00 2001 From: piyanthak Date: Mon, 4 Oct 2021 21:36:12 +0530 Subject: [PATCH 52/82] Add files via upload --- .../Plugins/Workspaces/Tested Exchanges.json | 10431 ++++++++++++++++ 1 file changed, 10431 insertions(+) create mode 100644 Projects/Foundations/Plugins/Workspaces/Tested Exchanges.json diff --git a/Projects/Foundations/Plugins/Workspaces/Tested Exchanges.json b/Projects/Foundations/Plugins/Workspaces/Tested Exchanges.json new file mode 100644 index 000000000..7797b00fa --- /dev/null +++ b/Projects/Foundations/Plugins/Workspaces/Tested Exchanges.json @@ -0,0 +1,10431 @@ +{ + "type": "Workspace", + "name": "Tested Exchanges", + "config": "{\n \"docsLanguage\": \"EN\",\n \"contributionsBranch\": \"develop\"\n}", + "rootNodes": [ + { + "type": "LAN Network", + "name": "My LAN Network", + "project": "Foundations", + "lanNetworkNodes": [ + { + "type": "LAN Network Node", + "name": "My Computer", + "config": "{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}", + "project": "Foundations", + "dataTasks": { + "type": "Data Tasks", + "name": "New Data Tasks", + "project": "Foundations", + "projectDataTasks": [], + "id": "40af91d9-431c-4b7d-addc-aed37bc2f3fe", + "savedPayload": { + "position": { + "x": 25089.356993272086, + "y": 30767.11115747996 + }, + "targetPosition": { + "x": 25239.356993272086, + "y": 31026.918778615294 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "learningTasks": { + "type": "Learning Tasks", + "name": "New Learning Tasks", + "project": "Foundations", + "projectLearningTasks": [], + "id": "0818dfbe-61ea-40b8-8544-bee25d7f45be", + "savedPayload": { + "position": { + "x": 25389.356993272086, + "y": 30767.11115747996 + }, + "targetPosition": { + "x": 25239.356993272086, + "y": 31026.918778615294 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "testingTradingTasks": { + "type": "Testing Trading Tasks", + "name": "New Testing Trading Tasks", + "project": "Foundations", + "projectTradingTasks": [], + "id": "8117db0a-e418-4f56-8fe4-fda2ddac1cbb", + "savedPayload": { + "position": { + "x": 25539.356993272086, + "y": 31026.918778615294 + }, + "targetPosition": { + "x": 25239.356993272086, + "y": 31026.918778615294 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "productionTradingTasks": { + "type": "Production Trading Tasks", + "name": "New Production Trading Tasks", + "project": "Foundations", + "projectTradingTasks": [], + "id": "673caa5f-511d-4688-9305-e5f0f0f780cd", + "savedPayload": { + "position": { + "x": 25389.356993272086, + "y": 31286.726399750627 + }, + "targetPosition": { + "x": 25239.356993272086, + "y": 31026.918778615294 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "dataStorage": { + "type": "Data Storage", + "name": "New Data Storage", + "project": "Foundations", + "dataMinesData": { + "type": "Data Mines Data", + "name": "New Data Mines Data", + "project": "Foundations", + "projectDataProducts": [], + "id": "32e7c122-fa5a-4d00-9d71-d54e890e32de", + "savedPayload": { + "position": { + "x": 25070.19913560607, + "y": 31588.15985816277 + }, + "targetPosition": { + "x": 25109.356993272086, + "y": 31290.726399750627 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tradingMinesData": { + "type": "Trading Mines Data", + "name": "New Trading Mines Data", + "project": "Foundations", + "projectTradingProducts": [], + "id": "e4e268f3-a677-4f90-90a1-d87244e647e5", + "savedPayload": { + "position": { + "x": 24959.356993272086, + "y": 31550.53402088596 + }, + "targetPosition": { + "x": 25109.356993272086, + "y": 31290.726399750627 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "learningMinesData": { + "type": "Learning Mines Data", + "name": "New Learning Mines Data", + "project": "Foundations", + "projectLearningProducts": [], + "id": "2845a687-becc-4c3b-bc79-b2293ba876ba", + "savedPayload": { + "position": { + "x": 24871.350991184714, + "y": 31473.354828453244 + }, + "targetPosition": { + "x": 25109.356993272086, + "y": 31290.726399750627 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "e2697759-6038-4943-b90c-5a68651ff9a8", + "savedPayload": { + "position": { + "x": 25089.356993272086, + "y": 31286.726399750627 + }, + "targetPosition": { + "x": 25239.356993272086, + "y": 31026.918778615294 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "d" + } + } + }, + "id": "e452cf65-2b2b-44f2-9e67-bdd9d3c008e4", + "savedPayload": { + "position": { + "x": 25239.356993272086, + "y": 31026.918778615294 + }, + "targetPosition": { + "x": 24939.356993272086, + "y": 31026.918778615294 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "" + } + } + } + ], + "id": "3c165071-7558-4708-9999-8ffe71d346b1", + "savedPayload": { + "position": { + "x": 24939.356993272086, + "y": 31026.918778615294 + }, + "targetPosition": { + "x": 24939.356993272086, + "y": 31026.918778615294 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "s" + } + } + }, + { + "type": "Crypto Ecosystem", + "name": "My Crypto Ecosystem", + "project": "Foundations", + "cryptoExchanges": [ + { + "type": "Crypto Exchanges", + "name": "Tested", + "project": "Foundations", + "exchanges": [ + { + "type": "Crypto Exchange", + "name": "Binance", + "config": "{\n \"codeName\": \"binance\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"EUR\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "Bitcoin", + "config": "{ \n\"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "5f5e4a94-5090-47d4-8883-cc2325d20bfa", + "savedPayload": { + "position": { + "x": 18606.497829264816, + "y": 29451.09637134722 + }, + "targetPosition": { + "x": 18947.58510468027, + "y": 29744.625706422376 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "Tether", + "config": "{\n \"codeName\": \"USDT\"\n}", + "project": "Foundations", + "id": "f110bfa0-bd5b-469b-a940-4524c8688136", + "savedPayload": { + "position": { + "x": 19031.245327903584, + "y": 29302.470793467397 + }, + "targetPosition": { + "x": 18947.58510468027, + "y": 29744.625706422376 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "95d2c30f-215b-486e-8119-f4eac0279575", + "savedPayload": { + "position": { + "x": 18947.58510468027, + "y": 29744.625706422376 + }, + "targetPosition": { + "x": 19096.210682560097, + "y": 30169.37320506114 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "E" + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "code": "{ \n\"codeName\": \"Write here the code name of the Market here.\"\n}", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDT", + "config": "{ \n\"codeName\": \"BTC/USDT\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "Bitcoin", + "project": "Foundations", + "id": "1017b30d-de1b-4212-991e-9fd0a5b6c814", + "savedPayload": { + "position": { + "x": 19570.366270989212, + "y": 28916.346310993984 + }, + "targetPosition": { + "x": 19486.7060477659, + "y": 29358.501223948962 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Bitcoin", + "id": "5f5e4a94-5090-47d4-8883-cc2325d20bfa" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Binance", + "Crypto Exchange", + "Foundations", + "61ef0b8d-de6e-4e76-bdd5-996836760a4b" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "95d2c30f-215b-486e-8119-f4eac0279575" + ], + [ + "Bitcoin", + "Asset", + "Foundations", + "5f5e4a94-5090-47d4-8883-cc2325d20bfa" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "Tether", + "project": "Foundations", + "id": "705c4a67-787a-48cd-a3dc-3a557438bf0b", + "savedPayload": { + "position": { + "x": 19780.235382841056, + "y": 29017.413948533507 + }, + "targetPosition": { + "x": 19486.7060477659, + "y": 29358.501223948962 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Tether", + "id": "f110bfa0-bd5b-469b-a940-4524c8688136" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Binance", + "Crypto Exchange", + "Foundations", + "61ef0b8d-de6e-4e76-bdd5-996836760a4b" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "95d2c30f-215b-486e-8119-f4eac0279575" + ], + [ + "Tether", + "Asset", + "Foundations", + "f110bfa0-bd5b-469b-a940-4524c8688136" + ] + ] + } + }, + "id": "9a867bf0-a71d-445c-b99a-75b60bbdce09", + "savedPayload": { + "position": { + "x": 19486.7060477659, + "y": 29358.501223948962 + }, + "targetPosition": { + "x": 19291.458365163, + "y": 29763.93721450505 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "2fd80894-900e-44ac-a1a7-56c14124f7a1", + "savedPayload": { + "position": { + "x": 19291.458365163, + "y": 29763.93721450505 + }, + "targetPosition": { + "x": 19096.210682560097, + "y": 30169.37320506114 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "61ef0b8d-de6e-4e76-bdd5-996836760a4b", + "savedPayload": { + "position": { + "x": 19507.63719375129, + "y": 30789.529786102317 + }, + "targetPosition": { + "x": 19331.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "" + }, + "tutorial": { + "status": "Done" + } + } + }, + { + "type": "Crypto Exchange", + "name": "Binance US", + "config": "{\n \"codeName\": \"binanceus\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"EUR\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "Bitcoin", + "config": "{ \n\"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "5f600d91-40e6-43cc-82b0-586c5c422077", + "savedPayload": { + "position": { + "x": 19512.947331594303, + "y": 30307.95713652808 + }, + "targetPosition": { + "x": 19435.301618063546, + "y": 30597.7348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "Tether", + "config": "{ \n\"codeName\": \"USDT\"\n}", + "project": "Foundations", + "id": "d9a04ff0-c729-490c-84d1-d5d5a0397989", + "savedPayload": { + "position": { + "x": 19725.079365950267, + "y": 30520.089170884043 + }, + "targetPosition": { + "x": 19435.301618063546, + "y": 30597.7348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "8b0d5d47-de2c-4770-976d-14a006ac25e7", + "savedPayload": { + "position": { + "x": 19435.301618063546, + "y": 30597.7348844148 + }, + "targetPosition": { + "x": 19223.169583707582, + "y": 30809.866918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "E" + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "code": "{ \n\"codeName\": \"Write here the code name of the Market here.\"\n}", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDT", + "config": "{ \n\"codeName\": \"BTC/USDT\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "Bitcoin", + "project": "Foundations", + "id": "0f7ece91-d8ef-4c4b-be95-59fb64b5eaf9", + "savedPayload": { + "position": { + "x": 20112.947331594303, + "y": 30732.221205240006 + }, + "targetPosition": { + "x": 19823.169583707582, + "y": 30809.866918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Bitcoin", + "id": "5f600d91-40e6-43cc-82b0-586c5c422077" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Binance US", + "Crypto Exchange", + "Foundations", + "d763fdb6-bfe0-4fd2-9b1f-0a12ead4098b" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "8b0d5d47-de2c-4770-976d-14a006ac25e7" + ], + [ + "Bitcoin", + "Asset", + "Foundations", + "5f600d91-40e6-43cc-82b0-586c5c422077" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "Tether", + "project": "Foundations", + "id": "a8005fb7-1737-43af-882c-3183f2e94f41", + "savedPayload": { + "position": { + "x": 20112.947331594303, + "y": 30887.51263230152 + }, + "targetPosition": { + "x": 19823.169583707582, + "y": 30809.866918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Tether", + "id": "d9a04ff0-c729-490c-84d1-d5d5a0397989" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Binance US", + "Crypto Exchange", + "Foundations", + "d763fdb6-bfe0-4fd2-9b1f-0a12ead4098b" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "8b0d5d47-de2c-4770-976d-14a006ac25e7" + ], + [ + "Tether", + "Asset", + "Foundations", + "d9a04ff0-c729-490c-84d1-d5d5a0397989" + ] + ] + } + }, + "id": "6af7c681-a924-4e65-a8aa-a45589e12bde", + "savedPayload": { + "position": { + "x": 19823.169583707582, + "y": 30809.866918770764 + }, + "targetPosition": { + "x": 19523.169583707582, + "y": 30809.866918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "95f252bb-4047-4bfa-8c93-66618b64d419", + "savedPayload": { + "position": { + "x": 19523.169583707582, + "y": 30809.866918770764 + }, + "targetPosition": { + "x": 19223.169583707582, + "y": 30809.866918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "d763fdb6-bfe0-4fd2-9b1f-0a12ead4098b", + "savedPayload": { + "position": { + "x": 19616.61857295209, + "y": 30939.529786102317 + }, + "targetPosition": { + "x": 19331.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "" + } + } + }, + { + "type": "Crypto Exchange", + "name": "Luno", + "config": "{\n \"codeName\": \"luno\",\n \"API\": [\n {\n \"method\": \"fetch_ohlcv\",\n \"useFetchTradesForFetchOHLCVs\": true,\n \"maxTradesPerFetch\": 100,\n \"limit\": 200,\n \"rateLimit\": 1100\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"EUR\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "Bitcoin", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "ac9cd2e1-566d-4bf9-83b2-a60403442302", + "savedPayload": { + "position": { + "x": 20145.241273554842, + "y": 31042.366918770764 + }, + "targetPosition": { + "x": 19885.43365241951, + "y": 31192.366918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "ZAR", + "config": "{\n \"codeName\": \"ZAR\"\n}", + "project": "Foundations", + "id": "0aefdb7b-972c-4c98-90cd-23317f2bd51f", + "savedPayload": { + "position": { + "x": 20145.241273554842, + "y": 31342.366918770764 + }, + "targetPosition": { + "x": 19885.43365241951, + "y": 31192.366918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "ac60a01f-74b1-41f2-93f4-5b7d5cc2b2ad", + "savedPayload": { + "position": { + "x": 19885.43365241951, + "y": 31192.366918770764 + }, + "targetPosition": { + "x": 19585.43365241951, + "y": 31192.366918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "E" + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "code": "{ \n\"codeName\": \"Write here the code name of the Market here.\"\n}", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/ZAR", + "config": "{\n \"codeName\": \"BTC/ZAR\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "Bitcoin", + "project": "Foundations", + "id": "29b5f490-2015-4039-8123-f29aa76d2546", + "savedPayload": { + "position": { + "x": 20269.50534226677, + "y": 31766.63098748269 + }, + "targetPosition": { + "x": 20009.697721131437, + "y": 31616.63098748269 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Bitcoin", + "id": "ac9cd2e1-566d-4bf9-83b2-a60403442302" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Luno", + "Crypto Exchange", + "Foundations", + "d4a66325-9be9-4855-8cf4-89a5795e30b6" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "ac60a01f-74b1-41f2-93f4-5b7d5cc2b2ad" + ], + [ + "Bitcoin", + "Asset", + "Foundations", + "ac9cd2e1-566d-4bf9-83b2-a60403442302" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "ZAR", + "project": "Foundations", + "id": "6dffe17d-bbd1-424e-afba-9717386ae271", + "savedPayload": { + "position": { + "x": 20159.697721131437, + "y": 31876.438608618024 + }, + "targetPosition": { + "x": 20009.697721131437, + "y": 31616.63098748269 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "ZAR", + "id": "0aefdb7b-972c-4c98-90cd-23317f2bd51f" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Luno", + "Crypto Exchange", + "Foundations", + "d4a66325-9be9-4855-8cf4-89a5795e30b6" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "ac60a01f-74b1-41f2-93f4-5b7d5cc2b2ad" + ], + [ + "ZAR", + "Asset", + "Foundations", + "0aefdb7b-972c-4c98-90cd-23317f2bd51f" + ] + ] + } + }, + "id": "06796c17-169b-4815-969c-d33baca2b0ef", + "savedPayload": { + "position": { + "x": 20009.697721131437, + "y": 31616.63098748269 + }, + "targetPosition": { + "x": 19797.565686775473, + "y": 31404.498953126727 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "e13d8073-26f6-4ae4-b612-aea2ec269fed", + "savedPayload": { + "position": { + "x": 19797.565686775473, + "y": 31404.498953126727 + }, + "targetPosition": { + "x": 19585.43365241951, + "y": 31192.366918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "d4a66325-9be9-4855-8cf4-89a5795e30b6", + "savedPayload": { + "position": { + "x": 19616.61857295209, + "y": 31124.939982727283 + }, + "targetPosition": { + "x": 19331.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "" + } + } + }, + { + "type": "Crypto Exchange", + "name": "Kucoin", + "config": "{\n \"codeName\": \"kucoin\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "BTC", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "5ce98b3f-3ec1-412b-acde-186f9a92a5e0", + "savedPayload": { + "position": { + "x": 19835.847296702923, + "y": 31268.271209698505 + }, + "targetPosition": { + "x": 19686.66901239768, + "y": 31283.950479188654 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "Tether", + "config": "{\n \"codeName\": \"USDT\"\n}", + "project": "Foundations", + "id": "b866944c-c23e-4718-9300-1b803b54be5f", + "savedPayload": { + "position": { + "x": 19774.836800241552, + "y": 31405.303028344897 + }, + "targetPosition": { + "x": 19686.66901239768, + "y": 31283.950479188654 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "747af60f-c8b9-4377-aa6c-172d4137ea23", + "savedPayload": { + "position": { + "x": 19686.66901239768, + "y": 31283.950479188654 + }, + "targetPosition": { + "x": 19549.63719375129, + "y": 31222.939982727283 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDT", + "config": "{\n \"codeName\": \"BTC/USDT\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "BTC", + "project": "Foundations", + "id": "69a1674d-6260-4c65-95d5-fbba592737f9", + "savedPayload": { + "position": { + "x": 19788.689847399626, + "y": 32062.358218260728 + }, + "targetPosition": { + "x": 19612.354271711883, + "y": 31819.653119948245 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "BTC", + "id": "5ce98b3f-3ec1-412b-acde-186f9a92a5e0" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Kucoin", + "Crypto Exchange", + "Foundations", + "644efe9c-597a-4ddf-9e28-b33fb3b62d3e" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "747af60f-c8b9-4377-aa6c-172d4137ea23" + ], + [ + "BTC", + "Asset", + "Foundations", + "5ce98b3f-3ec1-412b-acde-186f9a92a5e0" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "Tether", + "project": "Foundations", + "id": "135835f5-a9be-4415-aeef-03500f24b4d1", + "savedPayload": { + "position": { + "x": 19490.333278789145, + "y": 32093.716757241025 + }, + "targetPosition": { + "x": 19612.354271711883, + "y": 31819.653119948245 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Tether", + "id": "b866944c-c23e-4718-9300-1b803b54be5f" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Kucoin", + "Crypto Exchange", + "Foundations", + "644efe9c-597a-4ddf-9e28-b33fb3b62d3e" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "747af60f-c8b9-4377-aa6c-172d4137ea23" + ], + [ + "Tether", + "Asset", + "Foundations", + "b866944c-c23e-4718-9300-1b803b54be5f" + ] + ] + } + }, + "id": "4b37ca8d-e4b2-49f4-b326-7bdf785ad482", + "savedPayload": { + "position": { + "x": 19612.354271711883, + "y": 31819.653119948245 + }, + "targetPosition": { + "x": 19580.995732731586, + "y": 31521.296551337764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "c75f7d97-9dc2-4d3e-89eb-f8a3d5f16368", + "savedPayload": { + "position": { + "x": 19580.995732731586, + "y": 31521.296551337764 + }, + "targetPosition": { + "x": 19549.63719375129, + "y": 31222.939982727283 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "644efe9c-597a-4ddf-9e28-b33fb3b62d3e", + "savedPayload": { + "position": { + "x": 19507.63719375129, + "y": 31274.939982727283 + }, + "targetPosition": { + "x": 19331.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "e3879d63-6f8f-41a3-8ac3-0349c4361722", + "savedPayload": { + "position": { + "x": 19331.301618063546, + "y": 31032.2348844148 + }, + "targetPosition": { + "x": 18731.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchanges", + "name": "Untested", + "project": "Foundations", + "exchanges": [ + { + "type": "Crypto Exchange", + "name": "ACX", + "config": "{ \n\"codeName\": \"acx\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "ebcb522b-ae58-46d2-9d82-a9b0beec3976", + "savedPayload": { + "position": { + "x": 17935.64382962515, + "y": 31014.23747069523 + }, + "targetPosition": { + "x": 17912.64382962515, + "y": 30954.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "b2649588-27c6-442c-b179-f6d8817188b3", + "savedPayload": { + "position": { + "x": 17954.64382962515, + "y": 31004.23747069523 + }, + "targetPosition": { + "x": 17912.64382962515, + "y": 30954.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "e9c21b2d-de21-43b5-8b48-51367a8c981c", + "savedPayload": { + "position": { + "x": 18753.577927624592, + "y": 30676.17948886613 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "AOFEX", + "config": "{ \n\"codeName\": \"aofex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "623ef91b-04c0-4bd5-ac0d-b32c809be3ea", + "savedPayload": { + "position": { + "x": 17973.64382962515, + "y": 30923.23747069523 + }, + "targetPosition": { + "x": 17950.64382962515, + "y": 30994.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "9d0b5855-59a6-4dda-9a4b-33d7a44d582e", + "savedPayload": { + "position": { + "x": 17901.64382962515, + "y": 30994.23747069523 + }, + "targetPosition": { + "x": 17950.64382962515, + "y": 30994.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "c2e9bb45-97c7-47e8-b13c-56946e673c53", + "savedPayload": { + "position": { + "x": 18828.33240465844, + "y": 30666.73580224638 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Bequant", + "config": "{ \n\"codeName\": \"bequant\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "b23c8adf-c880-48fd-b4af-4b4be86cf0e5", + "savedPayload": { + "position": { + "x": 18059.64382962515, + "y": 31101.23747069523 + }, + "targetPosition": { + "x": 17960.64382962515, + "y": 31060.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "523bd94f-68f9-457e-91fd-806c1b95e98d", + "savedPayload": { + "position": { + "x": 18006.64382962515, + "y": 31117.23747069523 + }, + "targetPosition": { + "x": 17960.64382962515, + "y": 31060.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "8e928d3e-a2c2-4341-aa2f-b753551c9479", + "savedPayload": { + "position": { + "x": 18903.681028093615, + "y": 30666.73580224638 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Bibox", + "config": "{ \n\"codeName\": \"bibox\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "13c1f22c-9a35-4d3f-b000-c96984fd6a2b", + "savedPayload": { + "position": { + "x": 17995.64382962515, + "y": 31047.23747069523 + }, + "targetPosition": { + "x": 17929.64382962515, + "y": 31003.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "3c6df49d-70c3-468a-bdd8-6768ce6d3a9d", + "savedPayload": { + "position": { + "x": 17916.64382962515, + "y": 31018.23747069523 + }, + "targetPosition": { + "x": 17929.64382962515, + "y": 31003.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "e5f9ee4d-77a3-48ae-b354-b2f6a97d5e47", + "savedPayload": { + "position": { + "x": 18978.435505127465, + "y": 30676.17948886613 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BigONE", + "config": "{ \n\"codeName\": \"bigone\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "3f289513-c1c8-457c-b65a-8cf62b5f5eb5", + "savedPayload": { + "position": { + "x": 17778.64382962515, + "y": 31071.23747069523 + }, + "targetPosition": { + "x": 17839.64382962515, + "y": 31063.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "8b365e73-1cee-496a-921f-121cb628a130", + "savedPayload": { + "position": { + "x": 17798.64382962515, + "y": 31121.23747069523 + }, + "targetPosition": { + "x": 17839.64382962515, + "y": 31063.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "fb9ee540-bf12-4dda-bf87-cb6b58fce649", + "savedPayload": { + "position": { + "x": 19051.416913000998, + "y": 30694.917929526255 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Binance Jersey", + "config": "{ \n\"codeName\": \"binanceje\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "0b979ea9-7a2d-4744-9517-2dfa632dfafc", + "savedPayload": { + "position": { + "x": 17852.64382962515, + "y": 30989.23747069523 + }, + "targetPosition": { + "x": 17933.64382962515, + "y": 30992.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "b9a4497d-20f1-4c61-9a79-444e0fe0ddf4", + "savedPayload": { + "position": { + "x": 17924.64382962515, + "y": 30952.23747069523 + }, + "targetPosition": { + "x": 17933.64382962515, + "y": 30992.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "2782350a-84a2-40ec-87c6-3c8043376a18", + "savedPayload": { + "position": { + "x": 19121.474291315073, + "y": 30722.655607823734 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "bitbank", + "config": "{ \n\"codeName\": \"bitbank\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "eb6b6842-9bf7-450e-baa3-7a87541a1cf6", + "savedPayload": { + "position": { + "x": 17955.64382962515, + "y": 31107.23747069523 + }, + "targetPosition": { + "x": 17941.64382962515, + "y": 31102.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "6353ff56-759f-457d-81f3-fdb8ae5b3e83", + "savedPayload": { + "position": { + "x": 17942.64382962515, + "y": 31183.23747069523 + }, + "targetPosition": { + "x": 17941.64382962515, + "y": 31102.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "6c9a96a7-ed12-4b3e-bb51-306a8da131f5", + "savedPayload": { + "position": { + "x": 19187.502793363426, + "y": 30758.955084002137 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BitBay", + "config": "{ \n\"codeName\": \"bitbay\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "83b4e523-72a7-41ce-9363-fe0c799dcac1", + "savedPayload": { + "position": { + "x": 17861.64382962515, + "y": 30965.23747069523 + }, + "targetPosition": { + "x": 17855.64382962515, + "y": 30961.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "966698f7-8a28-42d7-bb80-f7cd0601e44f", + "savedPayload": { + "position": { + "x": 17823.64382962515, + "y": 31026.23747069523 + }, + "targetPosition": { + "x": 17855.64382962515, + "y": 30961.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "8778eee5-97a2-4f9d-bd25-cd5a64ec6663", + "savedPayload": { + "position": { + "x": 19248.461110225242, + "y": 30803.24389363787 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Bitforex", + "config": "{ \n\"codeName\": \"bitforex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "698e5e38-ad73-4cb6-b7f6-2b69913faff9", + "savedPayload": { + "position": { + "x": 17897.64382962515, + "y": 30956.23747069523 + }, + "targetPosition": { + "x": 17937.64382962515, + "y": 30945.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "f0142bd4-1b63-4d12-a4b7-e150d0da197f", + "savedPayload": { + "position": { + "x": 18020.64382962515, + "y": 31021.23747069523 + }, + "targetPosition": { + "x": 17937.64382962515, + "y": 30945.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "499a5a3b-7871-4c95-9b2e-d58d4d9e2392", + "savedPayload": { + "position": { + "x": 19303.387892828876, + "y": 30854.823575746133 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "bitkk", + "config": "{ \n\"codeName\": \"bitkk\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "efbb916c-780b-447f-a4c2-df68570d4ee1", + "savedPayload": { + "position": { + "x": 17931.64382962515, + "y": 30937.23747069523 + }, + "targetPosition": { + "x": 17951.64382962515, + "y": 30936.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "0d829516-81d9-46a5-9861-7d94cc89455d", + "savedPayload": { + "position": { + "x": 17951.64382962515, + "y": 30912.23747069523 + }, + "targetPosition": { + "x": 17951.64382962515, + "y": 30936.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "ded39740-3c93-4fda-bb9c-6ac75d2109f4", + "savedPayload": { + "position": { + "x": 19351.416913000998, + "y": 30912.88068792786 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BitMart", + "config": "{ \n\"codeName\": \"bitmart\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "10374855-6b4a-460b-9c95-70072ac00315", + "savedPayload": { + "position": { + "x": 17907.64382962515, + "y": 30901.23747069523 + }, + "targetPosition": { + "x": 17834.64382962515, + "y": 30915.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "3aded60c-4061-48ff-ad33-212c965b5c43", + "savedPayload": { + "position": { + "x": 17829.64382962515, + "y": 30925.23747069523 + }, + "targetPosition": { + "x": 17834.64382962515, + "y": 30915.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "c7ed52a7-895b-46f1-a745-35954d8bcfc6", + "savedPayload": { + "position": { + "x": 19391.790724402348, + "y": 30976.499634842316 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BitMax", + "config": "{ \n\"codeName\": \"bitmax\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "8a042d0d-7a7a-4a76-889e-42d8642404f4", + "savedPayload": { + "position": { + "x": 17944.64382962515, + "y": 31046.23747069523 + }, + "targetPosition": { + "x": 17944.64382962515, + "y": 31109.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "0c4fcc48-51e6-4ff2-925f-405cda6d1122", + "savedPayload": { + "position": { + "x": 17898.64382962515, + "y": 31024.23747069523 + }, + "targetPosition": { + "x": 17944.64382962515, + "y": 31109.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "fc6a9048-ab8c-48f9-91ae-6c95c28714b0", + "savedPayload": { + "position": { + "x": 19423.87260790898, + "y": 31044.67710769254 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BitMEX", + "config": "{ \n\"codeName\": \"bitmex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "f7636e2b-354a-4217-894b-5e26eddc0c2a", + "savedPayload": { + "position": { + "x": 17894.64382962515, + "y": 30934.23747069523 + }, + "targetPosition": { + "x": 17910.64382962515, + "y": 30922.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "6eb2ddd1-6d06-456c-b4e0-7df56ba182e6", + "savedPayload": { + "position": { + "x": 17823.64382962515, + "y": 30834.23747069523 + }, + "targetPosition": { + "x": 17910.64382962515, + "y": 30922.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "1e2f1dd0-ebf1-4485-83d8-7723a9e3e714", + "savedPayload": { + "position": { + "x": 19447.15661305321, + "y": 31116.337907004432 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Bit-Z", + "config": "{ \n\"codeName\": \"bitz\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "0a22e02b-7d2e-4955-9cfc-ed7d95f0c9a0", + "savedPayload": { + "position": { + "x": 17751.64382962515, + "y": 31083.23747069523 + }, + "targetPosition": { + "x": 17850.64382962515, + "y": 31073.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "298b45af-b73d-4cd5-848a-97de7b857569", + "savedPayload": { + "position": { + "x": 17944.64382962515, + "y": 31083.23747069523 + }, + "targetPosition": { + "x": 17850.64382962515, + "y": 31073.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "6cc10926-fe41-43be-887b-fa8aba1c7377", + "savedPayload": { + "position": { + "x": 19461.275537164714, + "y": 31190.35189916476 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BTC-Alpha", + "config": "{ \n\"codeName\": \"btcalpha\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "263e3b9c-8fdd-4376-b53b-87f32d0f5898", + "savedPayload": { + "position": { + "x": 17904.64382962515, + "y": 30922.23747069523 + }, + "targetPosition": { + "x": 17883.64382962515, + "y": 30971.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "804603e1-3e0f-4219-a9b7-ee27810d4f07", + "savedPayload": { + "position": { + "x": 17829.64382962515, + "y": 30977.23747069523 + }, + "targetPosition": { + "x": 17883.64382962515, + "y": 30971.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "30e5485f-213b-435b-a670-07b76cfe5cae", + "savedPayload": { + "position": { + "x": 19466.00671637603, + "y": 31265.551839303345 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BTC Markets", + "config": "{ \n\"codeName\": \"btcmarkets\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "fcb3b880-0852-4d93-8714-67373f9dca16", + "savedPayload": { + "position": { + "x": 17911.64382962515, + "y": 31036.23747069523 + }, + "targetPosition": { + "x": 17994.64382962515, + "y": 31033.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "953d8eff-0b2e-4b07-8635-393fddae0c9d", + "savedPayload": { + "position": { + "x": 18025.64382962515, + "y": 31127.23747069523 + }, + "targetPosition": { + "x": 17994.64382962515, + "y": 31033.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "ac2fda42-95ca-404a-8dd2-72bff0ff5a0f", + "savedPayload": { + "position": { + "x": 19461.275537164714, + "y": 31340.75177944193 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Buda", + "config": "{ \n\"codeName\": \"buda\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "27f3573d-e1f0-473f-9bfd-f9198e7240a0", + "savedPayload": { + "position": { + "x": 17945.64382962515, + "y": 30937.23747069523 + }, + "targetPosition": { + "x": 17853.64382962515, + "y": 31005.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "4ddc0981-4e45-42f3-ae11-f5b136b2bc3d", + "savedPayload": { + "position": { + "x": 17783.64382962515, + "y": 31008.23747069523 + }, + "targetPosition": { + "x": 17853.64382962515, + "y": 31005.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "90fe3d74-662e-4fac-aff3-f41990b61ccf", + "savedPayload": { + "position": { + "x": 19447.15661305321, + "y": 31414.76577160226 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BW", + "config": "{ \n\"codeName\": \"bw\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "457616cd-25f9-4ad3-8c18-6331859dd42e", + "savedPayload": { + "position": { + "x": 17890.64382962515, + "y": 31014.23747069523 + }, + "targetPosition": { + "x": 17900.64382962515, + "y": 30965.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "8c1f9aa2-4253-4129-a533-e515644ddb38", + "savedPayload": { + "position": { + "x": 17909.64382962515, + "y": 30970.23747069523 + }, + "targetPosition": { + "x": 17900.64382962515, + "y": 30965.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "d72db90c-d572-4cbb-8348-e3cc485d8e86", + "savedPayload": { + "position": { + "x": 19423.87260790898, + "y": 31486.42657091415 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Bybit", + "config": "{ \n\"codeName\": \"bybit\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "18fdf7c8-03c4-4f81-a88e-de97589765e1", + "savedPayload": { + "position": { + "x": 17803.64382962515, + "y": 31059.23747069523 + }, + "targetPosition": { + "x": 17855.64382962515, + "y": 31007.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "a62b2603-ac6f-4b6e-9541-86daf32027b1", + "savedPayload": { + "position": { + "x": 17847.64382962515, + "y": 31104.23747069523 + }, + "targetPosition": { + "x": 17855.64382962515, + "y": 31007.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "516c3831-456b-4d17-b0a0-6a363ba2ddb2", + "savedPayload": { + "position": { + "x": 19391.790724402348, + "y": 31554.604043764375 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "ByteTrade", + "config": "{ \n\"codeName\": \"bytetrade\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "e7a1e531-5a9e-466e-b98d-672de39eed3a", + "savedPayload": { + "position": { + "x": 18088.64382962515, + "y": 31024.23747069523 + }, + "targetPosition": { + "x": 17991.64382962515, + "y": 30981.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "edafaba7-fd82-4d9f-b3f7-5d1c01c56599", + "savedPayload": { + "position": { + "x": 17941.64382962515, + "y": 30943.23747069523 + }, + "targetPosition": { + "x": 17991.64382962515, + "y": 30981.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "45e2306f-03e8-4d17-a73a-72c11dd14e78", + "savedPayload": { + "position": { + "x": 19351.416913000998, + "y": 31618.22299067883 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "CEX.IO", + "config": "{ \n\"codeName\": \"cex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "9de19f0a-5824-4e42-af00-484b64421dc3", + "savedPayload": { + "position": { + "x": 17890.64382962515, + "y": 31049.23747069523 + }, + "targetPosition": { + "x": 17896.64382962515, + "y": 31076.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "39db01bc-0cea-422f-b9e9-7d84e3f5446d", + "savedPayload": { + "position": { + "x": 17918.64382962515, + "y": 31105.23747069523 + }, + "targetPosition": { + "x": 17896.64382962515, + "y": 31076.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "346bfc30-e32a-453a-bdc6-0ead48221581", + "savedPayload": { + "position": { + "x": 19303.387892828876, + "y": 31676.280102860557 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Coinbase Prime", + "config": "{ \n\"codeName\": \"coinbaseprime\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "73cabd8d-9308-49ed-b544-44f785ee7d38", + "savedPayload": { + "position": { + "x": 17867.64382962515, + "y": 30962.23747069523 + }, + "targetPosition": { + "x": 17922.64382962515, + "y": 30960.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "31bd1360-f0c5-4d70-876a-b152f7cedfd7", + "savedPayload": { + "position": { + "x": 17960.64382962515, + "y": 30864.23747069523 + }, + "targetPosition": { + "x": 17922.64382962515, + "y": 30960.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5a8281db-6ace-4186-8cfb-cd249c4af48b", + "savedPayload": { + "position": { + "x": 19248.461110225242, + "y": 31727.85978496882 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "CoinEx", + "config": "{ \n\"codeName\": \"coinex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "af78f796-60e5-4794-87b8-772c7bc74be1", + "savedPayload": { + "position": { + "x": 18043.64382962515, + "y": 31069.23747069523 + }, + "targetPosition": { + "x": 18000.64382962515, + "y": 31106.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "d351e6d9-36eb-4d0e-aca5-94429bbb23a3", + "savedPayload": { + "position": { + "x": 18094.64382962515, + "y": 31090.23747069523 + }, + "targetPosition": { + "x": 18000.64382962515, + "y": 31106.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "62ad0961-6bdf-4a4a-a340-610816742d0a", + "savedPayload": { + "position": { + "x": 19187.502793363426, + "y": 31772.148594604554 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "COSS", + "config": "{ \n\"codeName\": \"coss\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "e6315232-c6b1-4e25-aade-7bc7ba9ba6ac", + "savedPayload": { + "position": { + "x": 17787.64382962515, + "y": 30984.23747069523 + }, + "targetPosition": { + "x": 17874.64382962515, + "y": 31049.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "b1e8451f-09a2-47b0-add3-cf9c35c487bb", + "savedPayload": { + "position": { + "x": 17829.64382962515, + "y": 31095.23747069523 + }, + "targetPosition": { + "x": 17874.64382962515, + "y": 31049.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "695029de-7f61-45bb-aa4c-c6d51e6369ed", + "savedPayload": { + "position": { + "x": 19121.474291315073, + "y": 31808.448070782957 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "CREX24", + "config": "{ \n\"codeName\": \"crex24\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "c5e12f4a-fb26-40d3-9e70-751b55018e74", + "savedPayload": { + "position": { + "x": 17910.64382962515, + "y": 31024.23747069523 + }, + "targetPosition": { + "x": 17860.64382962515, + "y": 31075.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "00cb629e-bad4-4c6e-8abb-499cad3992f4", + "savedPayload": { + "position": { + "x": 17938.64382962515, + "y": 31054.23747069523 + }, + "targetPosition": { + "x": 17860.64382962515, + "y": 31075.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "07a7ec7c-273e-4675-8d8d-21ab8514a1f0", + "savedPayload": { + "position": { + "x": 19051.416913000998, + "y": 31836.185749080436 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Deribit", + "config": "{ \n\"codeName\": \"deribit\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "f0b2354b-89e3-4eca-b051-664a3b8283f6", + "savedPayload": { + "position": { + "x": 17862.64382962515, + "y": 30844.23747069523 + }, + "targetPosition": { + "x": 17906.64382962515, + "y": 30929.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "4ae1f824-82a8-4796-a2d5-3d2358d8089f", + "savedPayload": { + "position": { + "x": 17912.64382962515, + "y": 31024.23747069523 + }, + "targetPosition": { + "x": 17906.64382962515, + "y": 30929.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "21971815-4248-45df-8e04-20b9a5a83f06", + "savedPayload": { + "position": { + "x": 18978.43550512746, + "y": 31854.92418974056 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "DigiFinex", + "config": "{ \n\"codeName\": \"digifinex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "e583c93e-9a44-4e0d-acb7-56d7e00a555a", + "savedPayload": { + "position": { + "x": 17954.64382962515, + "y": 30992.23747069523 + }, + "targetPosition": { + "x": 17996.64382962515, + "y": 31033.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "8917c7c0-b420-4d4f-a35a-c0fc6870f0de", + "savedPayload": { + "position": { + "x": 18052.64382962515, + "y": 30972.23747069523 + }, + "targetPosition": { + "x": 17996.64382962515, + "y": 31033.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "b7d56781-0c51-4ec1-95fd-bf4dc8c00352", + "savedPayload": { + "position": { + "x": 18903.681028093615, + "y": 31864.36787636031 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "DSX", + "config": "{ \n\"codeName\": \"dsx\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "d672ab56-cd32-4ff5-8fc5-3733262aeccb", + "savedPayload": { + "position": { + "x": 17916.64382962515, + "y": 31106.23747069523 + }, + "targetPosition": { + "x": 17955.64382962515, + "y": 31011.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "3731a7b5-ba9d-483e-bb41-abf3ae0232c6", + "savedPayload": { + "position": { + "x": 17878.64382962515, + "y": 30946.23747069523 + }, + "targetPosition": { + "x": 17955.64382962515, + "y": 31011.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "4c543abc-7372-4701-bc58-107578d45c25", + "savedPayload": { + "position": { + "x": 18828.332404658442, + "y": 31864.36787636031 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "FCoin", + "config": "{ \n\"codeName\": \"fcoin\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "a97d578c-6d7f-403c-8294-18aacf14abd8", + "savedPayload": { + "position": { + "x": 17893.64382962515, + "y": 30953.23747069523 + }, + "targetPosition": { + "x": 17919.64382962515, + "y": 30948.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "442c3834-482e-4928-9255-8ac859ae012e", + "savedPayload": { + "position": { + "x": 17905.64382962515, + "y": 30896.23747069523 + }, + "targetPosition": { + "x": 17919.64382962515, + "y": 30948.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "6ddedcbd-07cb-4928-91b3-348f47118391", + "savedPayload": { + "position": { + "x": 18753.577927624592, + "y": 31854.92418974056 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "FCoinJP", + "config": "{ \n\"codeName\": \"fcoinjp\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "4a8a9810-6df6-451a-ab26-22bd7e7be85a", + "savedPayload": { + "position": { + "x": 17930.64382962515, + "y": 31129.23747069523 + }, + "targetPosition": { + "x": 17942.64382962515, + "y": 31052.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "138ab40c-18ca-4a11-9709-0baa040873e6", + "savedPayload": { + "position": { + "x": 18007.64382962515, + "y": 31122.23747069523 + }, + "targetPosition": { + "x": 17942.64382962515, + "y": 31052.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "982627ea-df84-4ba9-9219-612fbe1e4276", + "savedPayload": { + "position": { + "x": 18680.59651975106, + "y": 31836.185749080436 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Gate.io", + "config": "{ \n\"codeName\": \"gateio\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "71a15089-9d40-4726-9a41-37d406064164", + "savedPayload": { + "position": { + "x": 17930.64382962515, + "y": 30993.23747069523 + }, + "targetPosition": { + "x": 17880.64382962515, + "y": 31031.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "c025e976-c2c6-49de-81ec-48e2f737b412", + "savedPayload": { + "position": { + "x": 17925.64382962515, + "y": 31053.23747069523 + }, + "targetPosition": { + "x": 17880.64382962515, + "y": 31031.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "c4028289-4cdb-4da0-90e6-5f93328b8e03", + "savedPayload": { + "position": { + "x": 18610.539141436984, + "y": 31808.448070782957 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Gemini", + "config": "{ \n\"codeName\": \"gemini\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "9eb15872-8d15-4086-9920-46909eb5f9e7", + "savedPayload": { + "position": { + "x": 17951.64382962515, + "y": 30901.23747069523 + }, + "targetPosition": { + "x": 17971.64382962515, + "y": 30935.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "a84dcf06-57c6-47d7-97a0-9f03f3af8b34", + "savedPayload": { + "position": { + "x": 18045.64382962515, + "y": 30891.23747069523 + }, + "targetPosition": { + "x": 17971.64382962515, + "y": 30935.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "58bf8247-baef-4ea6-a483-7ed8f0ba5043", + "savedPayload": { + "position": { + "x": 18544.51063938863, + "y": 31772.148594604554 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "HitBTC", + "config": "{ \n\"codeName\": \"hitbtc\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "1632c520-fa79-442f-b33b-430cb1356de6", + "savedPayload": { + "position": { + "x": 17809.64382962515, + "y": 31086.23747069523 + }, + "targetPosition": { + "x": 17880.64382962515, + "y": 31069.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "576d1666-dbd3-4914-9fe2-fa05bdf72eea", + "savedPayload": { + "position": { + "x": 17840.64382962515, + "y": 31148.23747069523 + }, + "targetPosition": { + "x": 17880.64382962515, + "y": 31069.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "8384fa0b-854c-4c23-846e-a5da0179a738", + "savedPayload": { + "position": { + "x": 18483.552322526815, + "y": 31727.85978496882 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "HitBTC", + "config": "{ \n\"codeName\": \"hitbtc2\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "9a29cb9e-ee8d-4315-8532-eef82224b84a", + "savedPayload": { + "position": { + "x": 17838.64382962515, + "y": 30922.23747069523 + }, + "targetPosition": { + "x": 17829.64382962515, + "y": 30949.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "badd79e7-1e21-4dc3-bfa7-8dfb4a6c6267", + "savedPayload": { + "position": { + "x": 17920.64382962515, + "y": 30944.23747069523 + }, + "targetPosition": { + "x": 17829.64382962515, + "y": 30949.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "09c634c2-5aba-49c5-80bc-4fd4175e7f0c", + "savedPayload": { + "position": { + "x": 18428.62553992318, + "y": 31676.280102860557 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Huobi Pro", + "config": "{ \n\"codeName\": \"huobipro\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "86caa38c-5bdf-40e4-b27b-8d8b64319575", + "savedPayload": { + "position": { + "x": 18071.64382962515, + "y": 31171.23747069523 + }, + "targetPosition": { + "x": 17996.64382962515, + "y": 31077.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "001225af-c715-4566-9502-f8f0ac1c4531", + "savedPayload": { + "position": { + "x": 18040.64382962515, + "y": 31019.23747069523 + }, + "targetPosition": { + "x": 17996.64382962515, + "y": 31077.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "967c3914-a76d-4389-9c7e-9c258ae683bd", + "savedPayload": { + "position": { + "x": 18380.59651975106, + "y": 31618.22299067883 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Huobi Russia", + "config": "{ \n\"codeName\": \"huobiru\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "9b7b32d6-a42e-44bb-8065-5aa32b1e844b", + "savedPayload": { + "position": { + "x": 17980.64382962515, + "y": 31034.23747069523 + }, + "targetPosition": { + "x": 17957.64382962515, + "y": 31088.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "8d74201c-33cd-4e12-8920-b08d0ef97572", + "savedPayload": { + "position": { + "x": 17992.64382962515, + "y": 31105.23747069523 + }, + "targetPosition": { + "x": 17957.64382962515, + "y": 31088.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "6f97bb5c-8d85-43ee-86a1-33e22cdfbb5e", + "savedPayload": { + "position": { + "x": 18340.22270834971, + "y": 31554.604043764375 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "KKEX", + "config": "{ \n\"codeName\": \"kkex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "daa4e07a-1cd8-4d92-8004-2eabfaa62f77", + "savedPayload": { + "position": { + "x": 17924.64382962515, + "y": 31038.23747069523 + }, + "targetPosition": { + "x": 17987.64382962515, + "y": 31073.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "cb64951f-d984-4f51-a751-166a316084f3", + "savedPayload": { + "position": { + "x": 17945.64382962515, + "y": 31156.23747069523 + }, + "targetPosition": { + "x": 17987.64382962515, + "y": 31073.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "16ae95ce-796f-4f2b-942c-f98dcbf9cf4b", + "savedPayload": { + "position": { + "x": 18308.140824843078, + "y": 31486.42657091415 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "LBank", + "config": "{ \n\"codeName\": \"lbank\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "def3f9d0-f09e-4e09-8b6d-a4c322a4384b", + "savedPayload": { + "position": { + "x": 17877.64382962515, + "y": 31024.23747069523 + }, + "targetPosition": { + "x": 17838.64382962515, + "y": 31032.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "53eac3c1-96d6-4cb1-b54d-f3f174eaf733", + "savedPayload": { + "position": { + "x": 17764.64382962515, + "y": 31036.23747069523 + }, + "targetPosition": { + "x": 17838.64382962515, + "y": 31032.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "cb2558d6-dab0-4f35-b83f-7cfc161b3d4f", + "savedPayload": { + "position": { + "x": 18284.85681969885, + "y": 31414.76577160226 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Mercado Bitcoin", + "config": "{ \n\"codeName\": \"mercado\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "83ab2c39-e844-496f-bebb-7b8607428902", + "savedPayload": { + "position": { + "x": 17849.64382962515, + "y": 31081.23747069523 + }, + "targetPosition": { + "x": 17849.64382962515, + "y": 30986.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "d69e722e-c71a-462a-8bbd-d3482d0eab21", + "savedPayload": { + "position": { + "x": 17771.64382962515, + "y": 30887.23747069523 + }, + "targetPosition": { + "x": 17849.64382962515, + "y": 30986.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5002072e-145c-4aeb-a611-3e0e4c60ee5d", + "savedPayload": { + "position": { + "x": 18270.737895587343, + "y": 31340.75177944193 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "OKCoin", + "config": "{ \n\"codeName\": \"okcoin\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "1e4dd5c8-0545-4698-8695-c985880243a3", + "savedPayload": { + "position": { + "x": 17921.64382962515, + "y": 31043.23747069523 + }, + "targetPosition": { + "x": 17967.64382962515, + "y": 30969.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "0e188cae-9764-4963-a78b-e5d7ef272522", + "savedPayload": { + "position": { + "x": 18005.64382962515, + "y": 30891.23747069523 + }, + "targetPosition": { + "x": 17967.64382962515, + "y": 30969.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "1f860b4b-2893-4a51-8649-19c47d494a37", + "savedPayload": { + "position": { + "x": 18266.00671637603, + "y": 31265.551839303345 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "OKEX", + "config": "{ \n\"codeName\": \"okex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "7f618566-3d10-4c3c-90b2-7541a5146eeb", + "savedPayload": { + "position": { + "x": 17770.64382962515, + "y": 31094.23747069523 + }, + "targetPosition": { + "x": 17847.64382962515, + "y": 31102.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "21205576-5d12-452c-814f-eb56182162ae", + "savedPayload": { + "position": { + "x": 17794.64382962515, + "y": 31173.23747069523 + }, + "targetPosition": { + "x": 17847.64382962515, + "y": 31102.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "aa0edec0-8b27-4f94-abce-1e437ce5aba6", + "savedPayload": { + "position": { + "x": 18270.737895587343, + "y": 31190.35189916476 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "RightBTC", + "config": "{ \n\"codeName\": \"rightbtc\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "ade372e9-5070-4fa9-843e-57732c4106c3", + "savedPayload": { + "position": { + "x": 17999.64382962515, + "y": 30964.23747069523 + }, + "targetPosition": { + "x": 17991.64382962515, + "y": 30935.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "b63d440e-4501-475c-b8a6-2b9a144e32a1", + "savedPayload": { + "position": { + "x": 17984.64382962515, + "y": 30901.23747069523 + }, + "targetPosition": { + "x": 17991.64382962515, + "y": 30935.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "c20cd9e1-52a0-4d17-b90c-e9d5b63315ce", + "savedPayload": { + "position": { + "x": 18284.85681969885, + "y": 31116.337907004432 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "STEX", + "config": "{ \n\"codeName\": \"stex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "f1d65161-4922-4a1e-ac98-df1a842347a7", + "savedPayload": { + "position": { + "x": 17872.64382962515, + "y": 31001.23747069523 + }, + "targetPosition": { + "x": 17892.64382962515, + "y": 31092.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "c313b2c6-6154-4a9a-b826-fd99cc500cd9", + "savedPayload": { + "position": { + "x": 17888.64382962515, + "y": 31186.23747069523 + }, + "targetPosition": { + "x": 17892.64382962515, + "y": 31092.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "0ea23137-3c65-4de1-9772-6ac1b65196e8", + "savedPayload": { + "position": { + "x": 18308.140824843078, + "y": 31044.67710769254 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "TideBit", + "config": "{ \n\"codeName\": \"tidebit\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "c92318bd-8b2d-489b-b8e8-cf30fb63286e", + "savedPayload": { + "position": { + "x": 17981.64382962515, + "y": 31021.23747069523 + }, + "targetPosition": { + "x": 17978.64382962515, + "y": 31048.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "83bca3ec-fc1c-435c-b5fe-b1cf92463fd1", + "savedPayload": { + "position": { + "x": 18051.64382962515, + "y": 31072.23747069523 + }, + "targetPosition": { + "x": 17978.64382962515, + "y": 31048.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5563c310-701a-4c1e-8155-87c08c927ce3", + "savedPayload": { + "position": { + "x": 18340.22270834971, + "y": 30976.499634842316 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "TimeX", + "config": "{ \n\"codeName\": \"timex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "5c004b5f-eec4-414f-8d01-d9b3fddeee9e", + "savedPayload": { + "position": { + "x": 17892.64382962515, + "y": 30973.23747069523 + }, + "targetPosition": { + "x": 17949.64382962515, + "y": 30914.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "59a33add-d0e9-4ae1-8a01-f1e0ed09cb61", + "savedPayload": { + "position": { + "x": 17911.64382962515, + "y": 30878.23747069523 + }, + "targetPosition": { + "x": 17949.64382962515, + "y": 30914.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "27d69fa7-b561-4986-8c0d-1b374e7e1bf1", + "savedPayload": { + "position": { + "x": 18380.59651975106, + "y": 30912.88068792786 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "TOP.Q", + "config": "{ \n\"codeName\": \"topq\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "eafef6a3-eed2-470e-a15c-aa4c10001cd2", + "savedPayload": { + "position": { + "x": 17818.64382962515, + "y": 31115.23747069523 + }, + "targetPosition": { + "x": 17847.64382962515, + "y": 31105.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "2d5eb813-ceb6-40cd-8682-7205596bb8b5", + "savedPayload": { + "position": { + "x": 17759.64382962515, + "y": 31188.23747069523 + }, + "targetPosition": { + "x": 17847.64382962515, + "y": 31105.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "8fdf13d8-e8d2-4ef4-8b34-f492a25d753a", + "savedPayload": { + "position": { + "x": 18428.62553992318, + "y": 30854.823575746133 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Upbit", + "config": "{ \n\"codeName\": \"upbit\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "f456fec2-cee6-4f0c-b865-1188088879c9", + "savedPayload": { + "position": { + "x": 17919.64382962515, + "y": 30973.23747069523 + }, + "targetPosition": { + "x": 17991.64382962515, + "y": 30980.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "947c1ca0-bff9-4372-b153-40054e29b705", + "savedPayload": { + "position": { + "x": 17921.64382962515, + "y": 31014.23747069523 + }, + "targetPosition": { + "x": 17991.64382962515, + "y": 30980.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "74e57ecd-3394-42b4-b2c4-6f216f7e41db", + "savedPayload": { + "position": { + "x": 18483.552322526815, + "y": 30803.24389363787 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "WhiteBit", + "config": "{ \n\"codeName\": \"whitebit\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "c16eae45-a568-4b2e-b064-4431bdf34c24", + "savedPayload": { + "position": { + "x": 17767.64382962515, + "y": 30899.23747069523 + }, + "targetPosition": { + "x": 17834.64382962515, + "y": 30950.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "dfdf793f-4ba6-4215-a325-323c0f223553", + "savedPayload": { + "position": { + "x": 17920.64382962515, + "y": 31004.23747069523 + }, + "targetPosition": { + "x": 17834.64382962515, + "y": 30950.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "467ece1e-d1d0-4a11-ae7a-d0e22cd4eba5", + "savedPayload": { + "position": { + "x": 18544.51063938863, + "y": 30758.955084002137 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "ZB", + "config": "{ \n\"codeName\": \"zb\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "db206cbd-a587-4e8e-acbe-6581ad3b5cc4", + "savedPayload": { + "position": { + "x": 17855.64382962515, + "y": 31027.23747069523 + }, + "targetPosition": { + "x": 17861.64382962515, + "y": 30951.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "1dd658c5-7755-44b7-85f0-9bcd787762a0", + "savedPayload": { + "position": { + "x": 17789.64382962515, + "y": 31044.23747069523 + }, + "targetPosition": { + "x": 17861.64382962515, + "y": 30951.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "07df07e8-39a8-4fbc-a0c8-150f20b6ac59", + "savedPayload": { + "position": { + "x": 18610.539141436984, + "y": 30722.655607823734 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "51f64e29-e3ab-4683-a5de-f397fbf94260", + "savedPayload": { + "position": { + "x": 18824.00671637603, + "y": 31317.551839303345 + }, + "targetPosition": { + "x": 18731.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchanges", + "name": "Testing Queue", + "project": "Foundations", + "exchanges": [], + "id": "895ce4b1-4890-4216-89ba-a012181d2546", + "savedPayload": { + "position": { + "x": 18488.596519751063, + "y": 31208.570460102543 + }, + "targetPosition": { + "x": 18731.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchanges", + "name": "Failed OHLCVs Tests", + "project": "Foundations", + "exchanges": [], + "id": "467bc99c-1273-483a-909f-c21e5d728512", + "savedPayload": { + "position": { + "x": 18488.596519751063, + "y": 30855.899308727057 + }, + "targetPosition": { + "x": 18731.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchanges", + "name": "Trading Tests Pending", + "project": "Foundations", + "exchanges": [ + { + "type": "Crypto Exchange", + "name": "Bitfinex", + "config": "{\n \"codeName\": \"bitfinex\",\n \"API\": [\n {\n \"rateLimit\": 999\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "Bitcoin", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "fa6fb871-10ad-4b25-ba74-b37d6a9a3025", + "savedPayload": { + "position": { + "x": 19651.24733491461, + "y": 30138.234951669678 + }, + "targetPosition": { + "x": 19709.481620062677, + "y": 30355.56826258472 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "Tether", + "config": "{\n \"codeName\": \"USDT\"\n}", + "project": "Foundations", + "id": "2de2fe8f-a38b-4778-8e24-d318888c629f", + "savedPayload": { + "position": { + "x": 19868.58064582965, + "y": 30196.469236817746 + }, + "targetPosition": { + "x": 19709.481620062677, + "y": 30355.56826258472 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "33508b53-2769-4f3d-8c98-9fa37e5cbf5b", + "savedPayload": { + "position": { + "x": 19709.481620062677, + "y": 30355.56826258472 + }, + "targetPosition": { + "x": 19593.013049766545, + "y": 30790.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDT", + "config": "{\n \"codeName\": \"BTC/USDT\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "Bitcoin", + "project": "Foundations", + "id": "de06f331-5653-4539-acf4-603fa7f6b30d", + "savedPayload": { + "position": { + "x": 20597.435913172543, + "y": 29950.5234527118 + }, + "targetPosition": { + "x": 20372.435913172543, + "y": 30340.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Bitcoin", + "id": "fa6fb871-10ad-4b25-ba74-b37d6a9a3025" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Bitfinex", + "Crypto Exchange", + "Foundations", + "6c076027-683d-4778-8a6a-e60984980fdf" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "33508b53-2769-4f3d-8c98-9fa37e5cbf5b" + ], + [ + "Bitcoin", + "Asset", + "Foundations", + "fa6fb871-10ad-4b25-ba74-b37d6a9a3025" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "Tether", + "project": "Foundations", + "id": "5108ee82-6b9f-4067-9a57-5b29647a26bc", + "savedPayload": { + "position": { + "x": 20822.435913172543, + "y": 30340.2348844148 + }, + "targetPosition": { + "x": 20372.435913172543, + "y": 30340.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Tether", + "id": "2de2fe8f-a38b-4778-8e24-d318888c629f" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Bitfinex", + "Crypto Exchange", + "Foundations", + "6c076027-683d-4778-8a6a-e60984980fdf" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "33508b53-2769-4f3d-8c98-9fa37e5cbf5b" + ], + [ + "Tether", + "Asset", + "Foundations", + "2de2fe8f-a38b-4778-8e24-d318888c629f" + ] + ] + } + }, + "id": "b0230cdf-6725-4d65-b633-390272cfb6c5", + "savedPayload": { + "position": { + "x": 20372.435913172543, + "y": 30340.2348844148 + }, + "targetPosition": { + "x": 19982.724481469544, + "y": 30565.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "4d4ad5a1-81a7-4f92-83db-99f57ce261bb", + "savedPayload": { + "position": { + "x": 19982.724481469544, + "y": 30565.2348844148 + }, + "targetPosition": { + "x": 19593.013049766545, + "y": 30790.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "6c076027-683d-4778-8a6a-e60984980fdf", + "savedPayload": { + "position": { + "x": 18595.88492669602, + "y": 30552.0835150272 + }, + "targetPosition": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Bittrex", + "config": "{\n \"codeName\": \"bittrex\",\n \"API\": [\n {\n \"method\": \"fetch_ohlcv\",\n \"limit\": 2\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "BTC", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "41164633-9a2a-4123-88f0-7f9acb42d68a", + "savedPayload": { + "position": { + "x": 19682.021594969836, + "y": 29990.84101042175 + }, + "targetPosition": { + "x": 19705.57277527916, + "y": 30440.22430106131 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "USDT", + "config": "{\n \"codeName\": \"USDT\"\n}", + "project": "Foundations", + "id": "fab49590-9900-4352-a8dc-e464471f8def", + "savedPayload": { + "position": { + "x": 20082.9745308546, + "y": 30195.136735304546 + }, + "targetPosition": { + "x": 19705.57277527916, + "y": 30440.22430106131 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "88d4ef94-f030-42df-9115-69d9611317b1", + "savedPayload": { + "position": { + "x": 19705.57277527916, + "y": 30440.22430106131 + }, + "targetPosition": { + "x": 19501.277050396366, + "y": 30841.177236946074 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDT", + "config": "{\n \"codeName\": \"BTC/USDT\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "BTC", + "project": "Foundations", + "id": "fc48c4e5-ca22-4343-862b-297182111709", + "savedPayload": { + "position": { + "x": 20658.336687923493, + "y": 30228.646770543794 + }, + "targetPosition": { + "x": 20357.227915062005, + "y": 30563.061942008622 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "BTC", + "id": "41164633-9a2a-4123-88f0-7f9acb42d68a" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Bittrex", + "Crypto Exchange", + "Foundations", + "f598f002-8fc5-491f-888e-07d017ea83c6" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "88d4ef94-f030-42df-9115-69d9611317b1" + ], + [ + "BTC", + "Asset", + "Foundations", + "41164633-9a2a-4123-88f0-7f9acb42d68a" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "USDT", + "project": "Foundations", + "id": "9b0a49d7-b6df-4489-bbdf-b2cb19f585cd", + "savedPayload": { + "position": { + "x": 20797.39433539222, + "y": 30656.622202876613 + }, + "targetPosition": { + "x": 20357.227915062005, + "y": 30563.061942008622 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "USDT", + "id": "fab49590-9900-4352-a8dc-e464471f8def" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Bittrex", + "Crypto Exchange", + "Foundations", + "f598f002-8fc5-491f-888e-07d017ea83c6" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "88d4ef94-f030-42df-9115-69d9611317b1" + ], + [ + "USDT", + "Asset", + "Foundations", + "fab49590-9900-4352-a8dc-e464471f8def" + ] + ] + } + }, + "id": "f1770733-f08a-4d8d-a64b-b569ee2a4d7b", + "savedPayload": { + "position": { + "x": 20357.227915062005, + "y": 30563.061942008622 + }, + "targetPosition": { + "x": 19929.252482729185, + "y": 30702.11958947735 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "7fe8234d-9a39-4b28-bf98-43b4fdb57ee5", + "savedPayload": { + "position": { + "x": 19929.252482729185, + "y": 30702.11958947735 + }, + "targetPosition": { + "x": 19501.277050396366, + "y": 30841.177236946074 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "f598f002-8fc5-491f-888e-07d017ea83c6", + "savedPayload": { + "position": { + "x": 18687.809566454165, + "y": 30479.615972269745 + }, + "targetPosition": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Coinbase Pro", + "config": "{\n \"codeName\": \"coinbasepro\",\n \"API\": [\n {\n \"method\": \"fetch_ohlcv\",\n \"limit\": 300\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "BTC", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "ee182378-a852-48d9-970a-d1741fa24003", + "savedPayload": { + "position": { + "x": 19711.51778640455, + "y": 30712.469203190307 + }, + "targetPosition": { + "x": 19682.40064383052, + "y": 30821.135858647827 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "USDC", + "config": "{\n \"codeName\": \"USDC\"\n}", + "project": "Foundations", + "id": "a4229bf5-90b6-4590-90f4-fdec3cd60df9", + "savedPayload": { + "position": { + "x": 19791.06729928804, + "y": 30792.018716073795 + }, + "targetPosition": { + "x": 19682.40064383052, + "y": 30821.135858647827 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "5e970185-b876-4d70-af88-e4944e992801", + "savedPayload": { + "position": { + "x": 19682.40064383052, + "y": 30821.135858647827 + }, + "targetPosition": { + "x": 19523.301618063546, + "y": 30980.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDC", + "config": "{ \n\"codeName\": \"Type the name of the market\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "BTC", + "project": "Foundations", + "id": "b6375bea-7164-4e45-89cb-80a1ec275c52", + "savedPayload": { + "position": { + "x": 20813.013049766545, + "y": 30755.2348844148 + }, + "targetPosition": { + "x": 20423.301618063546, + "y": 30980.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "BTC", + "id": "ee182378-a852-48d9-970a-d1741fa24003" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Coinbase Pro", + "Crypto Exchange", + "Foundations", + "23ec7356-eed9-4a26-ace4-f21ae0d1e43e" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "5e970185-b876-4d70-af88-e4944e992801" + ], + [ + "BTC", + "Asset", + "Foundations", + "ee182378-a852-48d9-970a-d1741fa24003" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "USDC", + "project": "Foundations", + "id": "bb8913af-3d8c-4d31-af21-457d5d6ab9cc", + "savedPayload": { + "position": { + "x": 20813.013049766545, + "y": 31205.2348844148 + }, + "targetPosition": { + "x": 20423.301618063546, + "y": 30980.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "USDC", + "id": "a4229bf5-90b6-4590-90f4-fdec3cd60df9" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Coinbase Pro", + "Crypto Exchange", + "Foundations", + "23ec7356-eed9-4a26-ace4-f21ae0d1e43e" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "5e970185-b876-4d70-af88-e4944e992801" + ], + [ + "USDC", + "Asset", + "Foundations", + "a4229bf5-90b6-4590-90f4-fdec3cd60df9" + ] + ] + } + }, + "id": "cbabed50-b6b1-4f1b-b750-0f802bd36f6e", + "savedPayload": { + "position": { + "x": 20423.301618063546, + "y": 30980.2348844148 + }, + "targetPosition": { + "x": 19973.301618063546, + "y": 30980.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "f84cdb3e-86c4-4b6c-bba4-678d71440ee0", + "savedPayload": { + "position": { + "x": 19973.301618063546, + "y": 30980.2348844148 + }, + "targetPosition": { + "x": 19523.301618063546, + "y": 30980.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "23ec7356-eed9-4a26-ace4-f21ae0d1e43e", + "savedPayload": { + "position": { + "x": 18800.468987657674, + "y": 30447.842729406315 + }, + "targetPosition": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "FTX", + "config": "{\n \"codeName\": \"ftx\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"EUR\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "Bitcoin", + "config": "{ \n\"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "51d196fb-b457-49f7-bae2-b0ef554154a3", + "savedPayload": { + "position": { + "x": 19285.301618063546, + "y": 30915.927263279467 + }, + "targetPosition": { + "x": 19435.301618063546, + "y": 31175.7348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "USD", + "config": "{\n \"codeName\": \"USD\"\n}", + "project": "Foundations", + "id": "85b644de-4b78-486d-a689-5db24484bf33", + "savedPayload": { + "position": { + "x": 19585.301618063546, + "y": 30915.927263279467 + }, + "targetPosition": { + "x": 19435.301618063546, + "y": 31175.7348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "7c0b83f3-d4f6-457a-881f-9cd73f293d1c", + "savedPayload": { + "position": { + "x": 19435.301618063546, + "y": 31175.7348844148 + }, + "targetPosition": { + "x": 19435.301618063546, + "y": 31475.7348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "E" + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "code": "{ \n\"codeName\": \"Write here the code name of the Market here.\"\n}", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USD", + "config": "{\n \"codeName\": \"BTC/USD\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "Bitcoin", + "project": "Foundations", + "id": "6b882b1c-d15c-4499-aa93-9f80e3ccb59a", + "savedPayload": { + "position": { + "x": 20009.565686775473, + "y": 30791.66319456754 + }, + "targetPosition": { + "x": 19859.565686775473, + "y": 31051.470815702873 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Bitcoin", + "id": "51d196fb-b457-49f7-bae2-b0ef554154a3" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "FTX", + "Crypto Exchange", + "Foundations", + "b3e7f4de-1ca4-442f-8898-cb7397dc45d3" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "7c0b83f3-d4f6-457a-881f-9cd73f293d1c" + ], + [ + "Bitcoin", + "Asset", + "Foundations", + "51d196fb-b457-49f7-bae2-b0ef554154a3" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "USD", + "project": "Foundations", + "id": "6eada284-7adc-4eda-9448-7165704e350e", + "savedPayload": { + "position": { + "x": 20119.373307910806, + "y": 30901.470815702873 + }, + "targetPosition": { + "x": 19859.565686775473, + "y": 31051.470815702873 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "USD", + "id": "85b644de-4b78-486d-a689-5db24484bf33" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "FTX", + "Crypto Exchange", + "Foundations", + "b3e7f4de-1ca4-442f-8898-cb7397dc45d3" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "7c0b83f3-d4f6-457a-881f-9cd73f293d1c" + ], + [ + "USD", + "Asset", + "Foundations", + "85b644de-4b78-486d-a689-5db24484bf33" + ] + ] + } + }, + "id": "f4814fb1-d09a-45ad-8352-c0743b3a8558", + "savedPayload": { + "position": { + "x": 19859.565686775473, + "y": 31051.470815702873 + }, + "targetPosition": { + "x": 19647.43365241951, + "y": 31263.602850058836 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "f8c75d46-aa08-4579-a4a3-ea797f70944d", + "savedPayload": { + "position": { + "x": 19647.43365241951, + "y": 31263.602850058836 + }, + "targetPosition": { + "x": 19435.301618063546, + "y": 31475.7348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "b3e7f4de-1ca4-442f-8898-cb7397dc45d3", + "savedPayload": { + "position": { + "x": 18916.71181468851, + "y": 30461.60097463771 + }, + "targetPosition": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "" + } + } + }, + { + "type": "Crypto Exchange", + "name": "Kraken", + "config": "{ \n\"codeName\": \"kraken\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{\n \"addMissingAssetsFilter\": {\n \"quotedAsset\": \"USDT\"\n }\n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "BTC", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "a18c644d-3d51-413e-8abe-dd7698c2d03a", + "savedPayload": { + "position": { + "x": 19564.91960434743, + "y": 31467.40024970227 + }, + "targetPosition": { + "x": 19453.382057442876, + "y": 31482.084446327026 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "USDT", + "config": "{\n \"codeName\": \"USDT\"\n}", + "project": "Foundations", + "id": "e45ae556-e162-4d1f-ac5e-f8245d3d7f70", + "savedPayload": { + "position": { + "x": 19521.86771820636, + "y": 31571.33669710979 + }, + "targetPosition": { + "x": 19453.382057442876, + "y": 31482.084446327026 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "2a7dfb85-9179-4c30-9b63-072adaa7b317", + "savedPayload": { + "position": { + "x": 19453.382057442876, + "y": 31482.084446327026 + }, + "targetPosition": { + "x": 19245.509162627837, + "y": 31395.98067404488 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDT", + "config": "{\n \"codeName\": \"USDT/BTC\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "BTC", + "project": "Foundations", + "id": "94349e75-3c40-4a66-bc82-61460105e591", + "savedPayload": { + "position": { + "x": 19946.933254887477, + "y": 32501.414896358965 + }, + "targetPosition": { + "x": 19589.92425175642, + "y": 32227.47225330504 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "BTC", + "id": "a18c644d-3d51-413e-8abe-dd7698c2d03a" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Kraken", + "Crypto Exchange", + "Foundations", + "793d2f4a-3315-4c18-abad-f4d74c83ac4f" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "2a7dfb85-9179-4c30-9b63-072adaa7b317" + ], + [ + "BTC", + "Asset", + "Foundations", + "a18c644d-3d51-413e-8abe-dd7698c2d03a" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "USDT", + "project": "Foundations", + "id": "4759c142-6e8c-4ce2-8b5c-c783f630bb3b", + "savedPayload": { + "position": { + "x": 19531.187465257397, + "y": 32673.622440923256 + }, + "targetPosition": { + "x": 19589.92425175642, + "y": 32227.47225330504 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "USDT", + "id": "e45ae556-e162-4d1f-ac5e-f8245d3d7f70" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Kraken", + "Crypto Exchange", + "Foundations", + "793d2f4a-3315-4c18-abad-f4d74c83ac4f" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "2a7dfb85-9179-4c30-9b63-072adaa7b317" + ], + [ + "USDT", + "Asset", + "Foundations", + "e45ae556-e162-4d1f-ac5e-f8245d3d7f70" + ] + ] + } + }, + "id": "71f99544-bf86-49e7-8896-5f96f875f262", + "savedPayload": { + "position": { + "x": 19589.92425175642, + "y": 32227.47225330504 + }, + "targetPosition": { + "x": 19417.71670719213, + "y": 31811.72646367496 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "07267ef1-f15a-43cb-94f6-c13075c3ba61", + "savedPayload": { + "position": { + "x": 19417.71670719213, + "y": 31811.72646367496 + }, + "targetPosition": { + "x": 19245.509162627837, + "y": 31395.98067404488 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "793d2f4a-3315-4c18-abad-f4d74c83ac4f", + "savedPayload": { + "position": { + "x": 19018.841130875084, + "y": 30518.796139846247 + }, + "targetPosition": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Binance Futures USDⓈ-M", + "config": "{\n \"codeName\": \"binanceusdm\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "BTC", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "e05c6048-8062-4e1e-acec-441d643fd399", + "savedPayload": { + "position": { + "x": 19121.640264699694, + "y": 30031.959544495705 + }, + "targetPosition": { + "x": 19184.01377194502, + "y": 30325.403824715846 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "Tether", + "config": "{\n \"codeName\": \"USDT\"\n}", + "project": "Foundations", + "id": "d66e5b53-78e9-455f-8841-6bf62d2c36bf", + "savedPayload": { + "position": { + "x": 19406.95721958824, + "y": 30124.664642808188 + }, + "targetPosition": { + "x": 19184.01377194502, + "y": 30325.403824715846 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "b9f1342a-acb6-41fc-a4bf-ef13463f01ae", + "savedPayload": { + "position": { + "x": 19184.01377194502, + "y": 30325.403824715846 + }, + "targetPosition": { + "x": 19091.30867363254, + "y": 30610.72077960439 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDT", + "config": "{ \n\"codeName\": \"Type the name of the market\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "BTC", + "project": "Foundations", + "id": "a0ec8f79-8af8-4dfc-8a86-1c88a59bf74e", + "savedPayload": { + "position": { + "x": 19789.304298650066, + "y": 30086.725309377038 + }, + "targetPosition": { + "x": 19625.91258814556, + "y": 30338.326479760664 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "BTC", + "id": "e05c6048-8062-4e1e-acec-441d643fd399" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges" + ], + [ + "Binance Futures USDⓈ-M", + "Crypto Exchange" + ], + [ + "New Exchange Assets", + "Exchange Assets" + ], + [ + "BTC", + "Asset" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "Tether", + "project": "Foundations", + "id": "12ce7888-9873-41fb-922e-21512a6e63b0", + "savedPayload": { + "position": { + "x": 19925.50144857193, + "y": 30354.027266633548 + }, + "targetPosition": { + "x": 19625.91258814556, + "y": 30338.326479760664 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Tether", + "id": "d66e5b53-78e9-455f-8841-6bf62d2c36bf" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges" + ], + [ + "Binance Futures USDⓈ-M", + "Crypto Exchange" + ], + [ + "New Exchange Assets", + "Exchange Assets" + ], + [ + "Tether", + "Asset" + ] + ] + } + }, + "id": "a5015bce-68d3-4059-8c0c-4655958e7305", + "savedPayload": { + "position": { + "x": 19625.91258814556, + "y": 30338.326479760664 + }, + "targetPosition": { + "x": 19358.61063088905, + "y": 30474.523629682528 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "670bf7eb-d21c-471c-931d-ffa624eddf93", + "savedPayload": { + "position": { + "x": 19358.61063088905, + "y": 30474.523629682528 + }, + "targetPosition": { + "x": 19091.30867363254, + "y": 30610.72077960439 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeAccounts": { + "type": "Exchange Accounts", + "name": "New Exchange Accounts", + "project": "Foundations", + "userAccounts": [ + { + "type": "User Account", + "name": "New User Account", + "project": "Foundations", + "userAssets": { + "type": "User Assets", + "name": "New User Assets", + "project": "Foundations", + "assets": [], + "id": "d52fe9fe-e4d5-4dc0-a690-6b34d9403a9e", + "savedPayload": { + "position": { + "x": 19955.38686362977, + "y": 30733.75746898403 + }, + "targetPosition": { + "x": 19661.94258340963, + "y": 30796.130976229357 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "userKeys": { + "type": "User Keys", + "name": "New User Keys", + "project": "Foundations", + "keys": [ + { + "type": "Exchange Account Key", + "name": "New Exchange Account Key", + "config": "{\n \"codeName\": \"DOUBLE_CLICK_ON_THIS_STRING_TO_SELECT_IT_XXX_DELETE_IT_AND_PASTE_YOUR_EXCHANGE_API_PUBLIC_KEY\",\n \"secret\": \"REPLACE_THIS_STRING_WITH_YOUR_API_KEY_SECRET\",\n \"uid\": \"REPLACE_THIS_STRING_WITH_YOUR_UID_IF_NECESSARY\",\n \"password\": \"REPLACE_THIS_STRING_WITH_YOUR_PASSWORD_IF_NECESSARY\"\n}", + "project": "Foundations", + "id": "3fa1ffa7-f802-4e9d-a735-21a3c71529e7", + "savedPayload": { + "position": { + "x": 20063.420947224946, + "y": 31242.017871515793 + }, + "targetPosition": { + "x": 19862.681765317287, + "y": 31019.074423872575 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "7389704c-900f-4c31-8364-8959fdc080a5", + "savedPayload": { + "position": { + "x": 19862.681765317287, + "y": 31019.074423872575 + }, + "targetPosition": { + "x": 19661.94258340963, + "y": 30796.130976229357 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5ccfec54-f7b2-4e6e-9d36-79b88904d517", + "savedPayload": { + "position": { + "x": 19661.94258340963, + "y": 30796.130976229357 + }, + "targetPosition": { + "x": 19376.625628521084, + "y": 30703.425877916874 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "9e42052a-2c5c-4958-8d30-2389375084a3", + "savedPayload": { + "position": { + "x": 19376.625628521084, + "y": 30703.425877916874 + }, + "targetPosition": { + "x": 19091.30867363254, + "y": 30610.72077960439 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "7a10f447-a426-4c2b-911c-0a1f5a57ea56", + "savedPayload": { + "position": { + "x": 19091.30867363254, + "y": 30610.72077960439 + }, + "targetPosition": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Binance Futures COINM", + "config": "{\n \"codeName\": \"binancecoinm\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "BTC", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "d887b805-f5d0-4891-a269-48fdf45daa2a", + "savedPayload": { + "position": { + "x": 19372.586988642666, + "y": 30200.281938858705 + }, + "targetPosition": { + "x": 19317.916330995024, + "y": 30495.258411127892 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "New Asset", + "config": "{\n \"codeName\": \"USD\"\n}", + "project": "Foundations", + "id": "4cfa0b52-31eb-47be-91d2-7ae695945cc4", + "savedPayload": { + "position": { + "x": 19600.708778322678, + "y": 30395.11635335776 + }, + "targetPosition": { + "x": 19317.916330995024, + "y": 30495.258411127892 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "46d101f4-c29a-416e-b3b8-d80d5736ac05", + "savedPayload": { + "position": { + "x": 19317.916330995024, + "y": 30495.258411127892 + }, + "targetPosition": { + "x": 19123.08191649597, + "y": 30723.3802008079 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USD", + "config": "{ \n\"codeName\": \"Type the name of the market\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "BTC", + "project": "Foundations", + "id": "31402052-0118-4227-99af-ddc45cbaf16c", + "savedPayload": { + "position": { + "x": 19968.470173322454, + "y": 30506.38287229374 + }, + "targetPosition": { + "x": 19721.232316735848, + "y": 30676.30474337119 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "BTC", + "id": "d887b805-f5d0-4891-a269-48fdf45daa2a" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges" + ], + [ + "Binance Futures COINM", + "Crypto Exchange" + ], + [ + "New Exchange Assets", + "Exchange Assets" + ], + [ + "BTC", + "Asset" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "", + "project": "Foundations", + "id": "bc38184a-0805-4d3d-8638-9ce2b788a3d8", + "savedPayload": { + "position": { + "x": 19992.007902040805, + "y": 30805.45807241368 + }, + "targetPosition": { + "x": 19721.232316735848, + "y": 30676.30474337119 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "New Asset", + "id": "4cfa0b52-31eb-47be-91d2-7ae695945cc4" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges" + ], + [ + "Binance Futures COINM", + "Crypto Exchange" + ], + [ + "New Exchange Assets", + "Exchange Assets" + ], + [ + "New Asset", + "Asset" + ] + ] + } + }, + "id": "683ec1f4-4cdd-46cd-968c-f00fe603c1eb", + "savedPayload": { + "position": { + "x": 19721.232316735848, + "y": 30676.30474337119 + }, + "targetPosition": { + "x": 19422.15711661591, + "y": 30699.842472089545 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "c66c6d89-1390-4bb8-a3c4-dea1047e656b", + "savedPayload": { + "position": { + "x": 19422.15711661591, + "y": 30699.842472089545 + }, + "targetPosition": { + "x": 19123.08191649597, + "y": 30723.3802008079 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeAccounts": { + "type": "Exchange Accounts", + "name": "New Exchange Accounts", + "project": "Foundations", + "userAccounts": [ + { + "type": "User Account", + "name": "New User Account", + "project": "Foundations", + "userAssets": { + "type": "User Assets", + "name": "New User Assets", + "project": "Foundations", + "assets": [], + "id": "04cb33d6-3f9e-496e-a440-272a9e110562", + "savedPayload": { + "position": { + "x": 19874.30196812517, + "y": 31167.719687453653 + }, + "targetPosition": { + "x": 19579.325495855985, + "y": 31113.04902980601 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "userKeys": { + "type": "User Keys", + "name": "New User Keys", + "project": "Foundations", + "keys": [ + { + "type": "Exchange Account Key", + "name": "New Exchange Account Key", + "config": "{ \n\"codeName\": \"DOUBLE_CLICK_ON_THIS_STRING_TO_SELECT_IT_XXX_DELETE_IT_AND_PASTE_YOUR_EXCHANGE_API_PUBLIC_KEY\",\n\"secret\": \"REPLACE_THIS_STRING_WITH_YOUR_API_KEY_SECRET\"\n,\n\"uid\": \"REPLACE_THIS_STRING_WITH_YOUR_UID_IF_NECESSARY\"\n,\n\"password\": \"REPLACE_THIS_STRING_WITH_YOUR_PASSWORD_IF_NECESSARY\"\n}", + "project": "Foundations", + "id": "1fe1a1d9-41b6-4635-a056-a4beb9787405", + "savedPayload": { + "position": { + "x": 19779.60961139625, + "y": 31678.63392446132 + }, + "targetPosition": { + "x": 19679.467553626117, + "y": 31395.841477133665 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "68177c10-f283-4a62-a242-667e2fc78473", + "savedPayload": { + "position": { + "x": 19679.467553626117, + "y": 31395.841477133665 + }, + "targetPosition": { + "x": 19579.325495855985, + "y": 31113.04902980601 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "7482b0e8-eb18-4d8b-9099-fdaeab1697ff", + "savedPayload": { + "position": { + "x": 19579.325495855985, + "y": 31113.04902980601 + }, + "targetPosition": { + "x": 19351.203706175977, + "y": 30918.214615306955 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "9fb42a2b-dd80-482d-8511-33ee5cd5de4c", + "savedPayload": { + "position": { + "x": 19351.203706175977, + "y": 30918.214615306955 + }, + "targetPosition": { + "x": 19123.08191649597, + "y": 30723.3802008079 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "d955c502-1516-49c2-82b1-28c7ad24c987", + "savedPayload": { + "position": { + "x": 19123.08191649597, + "y": 30723.3802008079 + }, + "targetPosition": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "fb5144e2-035a-4478-9a07-73f24e8193c9", + "savedPayload": { + "position": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "targetPosition": { + "x": 18731.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "signalsProviders": [], + "id": "7217b56c-e854-4c06-8b8a-d5d3c05a153d", + "savedPayload": { + "position": { + "x": 18731.301618063546, + "y": 31032.2348844148 + }, + "targetPosition": { + "x": 18731.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "" + } + } + }, + { + "type": "Charting Space", + "name": "New Charting Space", + "project": "Foundations", + "viewport": { + "type": "Viewport", + "name": "New Viewport", + "config": "{\"zoom\":\"5.00\"}", + "project": "Foundations", + "id": "01713f1d-91b8-44f9-9c5d-a0c12fd09037", + "savedPayload": { + "position": { + "x": 19200.806237131383, + "y": 24983.35640053908 + }, + "targetPosition": { + "x": 18900.806237131383, + "y": 24983.35640053908 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "frame": { + "position": { + "x": -2189.197939162836, + "y": -6992.422473301482 + } + } + } + }, + "projectDashboards": [], + "id": "21d2ec55-9e56-4652-8e96-c7e451262c36", + "savedPayload": { + "position": { + "x": 18900.806237131383, + "y": 24983.35640053908 + }, + "targetPosition": { + "x": 18900.806237131383, + "y": 24983.35640053908 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "c" + } + } + }, + { + "type": "Plugins", + "name": "New Plugins", + "project": "Foundations", + "pluginProjects": [ + { + "type": "Plugin Project", + "name": "Foundations", + "config": "{ \n \"codeName\": \"Foundations\"\n}", + "project": "Foundations", + "pluginDataMines": { + "type": "Plugin Data Mines", + "name": "New Plugin Data Mines", + "project": "Foundations", + "pluginFiles": [ + { + "type": "Plugin File", + "name": "Candles", + "config": "{\"project\":\"Foundations\",\"fileName\":\"Candles\",\"folderName\":\"Data-Mines\",\"nodeType\":\"Data Mine\"}", + "project": "Foundations", + "pluginFilePosition": { + "type": "Plugin File Position", + "name": "Candles", + "project": "Foundations", + "id": "96c943e3-24bb-4484-91f3-577fc8590322", + "savedPayload": { + "position": { + "x": 18826.262986317583, + "y": 18693.545648831718 + }, + "targetPosition": { + "x": 30860.968084630065, + "y": 18305.13122451946 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "a8f57d23-d1d5-46c2-b3db-2de4d39f4ef5", + "savedPayload": { + "position": { + "x": 30860.968084630065, + "y": 18305.13122451946 + }, + "targetPosition": { + "x": 31103.673182942548, + "y": 18481.466800207203 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "cbc3d9be-5e59-45d8-bb0f-4ec82763691d", + "savedPayload": { + "position": { + "x": 31103.673182942548, + "y": 18481.466800207203 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginTradingMines": { + "type": "Plugin Trading Mines", + "name": "New Plugin Trading Mines", + "project": "Foundations", + "pluginFiles": [ + { + "type": "Plugin File", + "name": "Masters", + "config": "{\"project\":\"Foundations\",\"fileName\":\"Masters\",\"folderName\":\"Trading-Mines\",\"nodeType\":\"Trading Mine\"}", + "project": "Foundations", + "pluginFilePosition": { + "type": "Plugin File Position", + "name": "Masters", + "project": "Foundations", + "id": "f9666873-c1d7-429b-b2e5-28557e4e2dc0", + "savedPayload": { + "position": { + "x": 24932.762986317583, + "y": 18730.10151122931 + }, + "targetPosition": { + "x": 31160.968084630065, + "y": 18087.168466117855 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "88ff556b-019f-4d72-a11f-dd0f7000188b", + "savedPayload": { + "position": { + "x": 31160.968084630065, + "y": 18087.168466117855 + }, + "targetPosition": { + "x": 31253.673182942548, + "y": 18372.4854210064 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "8d881813-3ab9-4e8b-ab5a-48dedab2dd19", + "savedPayload": { + "position": { + "x": 31253.673182942548, + "y": 18372.4854210064 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginLearningMines": { + "type": "Plugin Learning Mines", + "name": "New Plugin Learning Mines", + "project": "Foundations", + "pluginFiles": [], + "id": "620d9b2d-8687-4314-a721-00d2d4ae774e", + "savedPayload": { + "position": { + "x": 31439.083379567513, + "y": 18372.4854210064 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginTradingSystems": { + "type": "Plugin Trading Systems", + "name": "New Plugin Trading Systems", + "project": "Foundations", + "pluginFiles": [], + "id": "3569d452-c593-4e54-a356-7ff8c6b519f3", + "savedPayload": { + "position": { + "x": 31589.083379567513, + "y": 18481.466800207203 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginLearningSystems": { + "type": "Plugin Learning Systems", + "name": "New Plugin Learning Systems", + "project": "Foundations", + "pluginFiles": [], + "id": "89b12837-d324-48e1-ab24-06e72a44858b", + "savedPayload": { + "position": { + "x": 31646.37828125503, + "y": 18657.802375894946 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginTradingEngines": { + "type": "Plugin Trading Engines", + "name": "New Plugin Trading Engines", + "project": "Foundations", + "pluginFiles": [ + { + "type": "Plugin File", + "name": "Low-Frequency", + "config": "{\"project\":\"Foundations\",\"fileName\":\"Low-Frequency\",\"folderName\":\"Trading-Engines\",\"nodeType\":\"Trading Engine\"}", + "project": "Foundations", + "pluginFilePosition": { + "type": "Plugin File Position", + "name": "Low-Frequency", + "project": "Foundations", + "id": "956382d3-721e-4124-aece-597b73830f1d", + "savedPayload": { + "position": { + "x": 30913.49357619248, + "y": 24976.559102958174 + }, + "targetPosition": { + "x": 31831.788477879996, + "y": 19010.47352727043 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "4a1a4e3b-6f76-4c92-8bc4-7347154a8757", + "savedPayload": { + "position": { + "x": 31831.788477879996, + "y": 19010.47352727043 + }, + "targetPosition": { + "x": 31589.083379567513, + "y": 18834.13795158269 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "87a28762-63d0-45f7-bd39-9dea436d8244", + "savedPayload": { + "position": { + "x": 31589.083379567513, + "y": 18834.13795158269 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginLearningEngines": { + "type": "Plugin Learning Engines", + "name": "New Plugin Learning Engines", + "project": "Foundations", + "pluginFiles": [], + "id": "9a2cae33-b1d9-4e08-87f9-06ddb82fcce9", + "savedPayload": { + "position": { + "x": 31439.083379567513, + "y": 18943.11933078349 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginTutorials": { + "type": "Plugin Tutorials", + "name": "New Plugin Tutorials", + "project": "Foundations", + "pluginFiles": [], + "id": "d43cd863-57a0-4f8d-a4e8-f1f0bf779a4f", + "savedPayload": { + "position": { + "x": 31253.673182942548, + "y": 18943.11933078349 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginApiMaps": { + "type": "Plugin API Maps", + "name": "New Plugin API Maps", + "project": "Foundations", + "pluginFiles": [], + "id": "39ffa05f-a73b-4d2d-8546-86da5cfecea3", + "savedPayload": { + "position": { + "x": 31103.673182942548, + "y": 18834.13795158269 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "c4e402d7-5228-408c-9d67-379d6ef40bae", + "savedPayload": { + "position": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "targetPosition": { + "x": 31046.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6", + "savedPayload": { + "position": { + "x": 31046.37828125503, + "y": 18657.802375894946 + }, + "targetPosition": { + "x": 31046.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Design Space", + "name": "My Design Space", + "project": "Foundations", + "spaceStyle": { + "type": "Space Style", + "name": "My Space Style", + "config": " {\n \"backgroundColor\": \"UI_COLOR.BLACK\",\n \"node\": {\n \"fontSize\": 16,\n \"imageSize\": 60,\n \"type\": {\n \"fontColor\": \"UI_COLOR.WHITE\"\n },\n \"name\": {\n \"fontColor\": \"UI_COLOR.WHITE\"\n },\n \"menuItem\": {\n \"backgroundColor\": \"UI_COLOR.BLACK\",\n \"fontColor\": \"UI_COLOR.WHITE\",\n \"fontSize\": 14,\n \"imageSize\": 14\n }\n }\n }", + "project": "Foundations", + "id": "fad0e429-f7a7-4b62-a2a5-2ead29b8f695", + "savedPayload": { + "position": { + "x": 25236.875, + "y": 8701.347826086958 + }, + "targetPosition": { + "x": 24936.875, + "y": 8701.347826086958 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "spaceSettings": { + "type": "Space Settings", + "name": "New Space Settings", + "config": "{\n \"node\": {\n \"distancePercentage\": 60,\n \"radiusPercentage\": 85,\n \"massPercentage\": 100,\n \"animationSteps\": 2, \n \"menuItem\": {\n \"widthPercentage\": 100,\n \"heightPercentage\": 60,\n \"radiusPercentage\": 90\n }\n },\n \"physics\": false\n}", + "project": "Foundations", + "id": "05c9d6d5-24c4-4eec-9aca-9668d6486fdd", + "savedPayload": { + "position": { + "x": 24636.875, + "y": 8701.347826086958 + }, + "targetPosition": { + "x": 24936.875, + "y": 8701.347826086958 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "f8485ce5-67f3-4476-b9e2-80994e49c318", + "savedPayload": { + "position": { + "x": 24940.875, + "y": 10717.347826086958 + }, + "targetPosition": { + "x": 24940.875, + "y": 10717.347826086958 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "frame": { + "position": { + "x": 255, + "y": 588.3125 + } + } + } + }, + { + "type": "Foundations Project", + "name": "New Foundations Project", + "project": "Foundations", + "projectDefinition": { + "type": "Project Definition", + "name": "Foundations", + "config": "{ \n \"codeName\": \"Foundations\"\n}", + "project": "Foundations", + "id": "a2a04e12-604e-43f8-a986-1b8ca3b043cb", + "savedPayload": { + "position": { + "x": 19203, + "y": 10733.5 + }, + "targetPosition": { + "x": 18903, + "y": 10733.5 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "spaces": { + "type": "Spaces", + "name": "New Spaces", + "project": "Foundations", + "id": "4d0ee814-4e48-4688-9cc5-7ee03de5192b", + "savedPayload": { + "position": { + "x": 19053, + "y": 10993.307621135331 + }, + "targetPosition": { + "x": 18903, + "y": 10733.5 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "mines": { + "type": "Mines", + "name": "New Mines", + "project": "Foundations", + "id": "b979e3a3-9316-4e5a-831b-c503b4b0e507", + "savedPayload": { + "position": { + "x": 18753, + "y": 10993.307621135331 + }, + "targetPosition": { + "x": 18903, + "y": 10733.5 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "trading": { + "type": "Trading", + "name": "New Trading", + "project": "Foundations", + "id": "7c24591e-b252-4be3-8952-e4da0a52f467", + "savedPayload": { + "position": { + "x": 18603, + "y": 10733.5 + }, + "targetPosition": { + "x": 18903, + "y": 10733.5 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "learning": { + "type": "Learning", + "name": "New Learning", + "project": "Foundations", + "id": "7a0b6167-5554-497a-b150-8886120539c2", + "savedPayload": { + "position": { + "x": 18753, + "y": 10473.692378864669 + }, + "targetPosition": { + "x": 18903, + "y": 10733.5 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "otherHierarchies": { + "type": "Other Hierarchies", + "name": "New Other Hierarchies", + "project": "Foundations", + "id": "0a1ff755-8e0b-4f62-976e-df76c8139c6f", + "savedPayload": { + "position": { + "x": 19053, + "y": 10473.692378864669 + }, + "targetPosition": { + "x": 18903, + "y": 10733.5 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "cf9f8b3b-77c6-43c6-b01f-95cf366a91f6", + "savedPayload": { + "position": { + "x": 18903, + "y": 10733.5 + }, + "targetPosition": { + "x": 18903, + "y": 10733.5 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Trading System", + "name": "New Trading System", + "project": "Foundations", + "tradingStrategies": [ + { + "type": "Trading Strategy", + "name": "New Trading Strategy", + "project": "Foundations", + "triggerStage": { + "type": "Trigger Stage", + "name": "New Trigger Stage", + "project": "Foundations", + "triggerOn": { + "type": "Trigger On Event", + "name": "New Trigger On Event", + "project": "Foundations", + "situations": [ + { + "type": "Situation", + "name": "New Situation", + "project": "Foundations", + "conditions": [ + { + "type": "Condition", + "name": "New Condition", + "project": "Foundations", + "javascriptCode": { + "type": "Javascript Code", + "name": "New Javascript Code", + "code": "// Type your code", + "project": "Foundations", + "id": "64a86fa1-8ce7-4bca-a684-20f8d1126d70", + "savedPayload": { + "position": { + "x": 30720.690987174497, + "y": 30424.038745267728 + }, + "targetPosition": { + "x": 30854.341965802752, + "y": 30492.13732022866 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "e21a0776-acd7-4cb2-9f5f-2bcbfa6e89e0", + "savedPayload": { + "position": { + "x": 30854.341965802752, + "y": 30492.13732022866 + }, + "targetPosition": { + "x": 30987.992944431007, + "y": 30560.23589518959 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "bb7fdf98-25b3-4282-81cc-0658dcf6d484", + "savedPayload": { + "position": { + "x": 30987.992944431007, + "y": 30560.23589518959 + }, + "targetPosition": { + "x": 31121.643923059262, + "y": 30628.334470150523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "announcements": [], + "id": "1f62cb3d-19fa-4717-a113-c0915e8ceaa0", + "savedPayload": { + "position": { + "x": 31121.643923059262, + "y": 30628.334470150523 + }, + "targetPosition": { + "x": 31255.294901687517, + "y": 30696.433045111455 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "triggerOff": { + "type": "Trigger Off Event", + "name": "New Trigger Off Event", + "project": "Foundations", + "situations": [ + { + "type": "Situation", + "name": "New Situation", + "project": "Foundations", + "conditions": [ + { + "type": "Condition", + "name": "New Condition", + "project": "Foundations", + "javascriptCode": { + "type": "Javascript Code", + "name": "New Javascript Code", + "code": "// Type your code", + "project": "Foundations", + "id": "f11bf186-ccfd-4e60-8260-f52cdf898bb4", + "savedPayload": { + "position": { + "x": 31069.884705062545, + "y": 30125.799135334357 + }, + "targetPosition": { + "x": 31116.237254218788, + "y": 30268.45761277863 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "7051b998-d100-48b2-90a4-d5e3f361e334", + "savedPayload": { + "position": { + "x": 31116.237254218788, + "y": 30268.45761277863 + }, + "targetPosition": { + "x": 31162.58980337503, + "y": 30411.116090222906 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "d76e94fb-d895-4634-90f9-667d0367e210", + "savedPayload": { + "position": { + "x": 31162.58980337503, + "y": 30411.116090222906 + }, + "targetPosition": { + "x": 31208.942352531274, + "y": 30553.77456766718 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "announcements": [], + "id": "0d1dc41a-7185-43a8-814e-e6a5300e6a1d", + "savedPayload": { + "position": { + "x": 31208.942352531274, + "y": 30553.77456766718 + }, + "targetPosition": { + "x": 31255.294901687517, + "y": 30696.433045111455 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "takePosition": { + "type": "Take Position Event", + "name": "New Take Position Event", + "project": "Foundations", + "situations": [ + { + "type": "Situation", + "name": "New Situation", + "project": "Foundations", + "conditions": [ + { + "type": "Condition", + "name": "New Condition", + "project": "Foundations", + "javascriptCode": { + "type": "Javascript Code", + "name": "New Javascript Code", + "code": "// Type your code", + "project": "Foundations", + "id": "c8cb9f04-5192-4b0c-b87b-d614ef07ec58", + "savedPayload": { + "position": { + "x": 31527.689201531244, + "y": 30161.829130598435 + }, + "targetPosition": { + "x": 31459.590626570312, + "y": 30295.48010922669 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "3094206b-682a-481a-9b36-5d86eb621ef5", + "savedPayload": { + "position": { + "x": 31459.590626570312, + "y": 30295.48010922669 + }, + "targetPosition": { + "x": 31391.49205160938, + "y": 30429.131087854945 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "7a3d4c6a-147e-4b75-8914-4ca3972ab3d5", + "savedPayload": { + "position": { + "x": 31391.49205160938, + "y": 30429.131087854945 + }, + "targetPosition": { + "x": 31323.39347664845, + "y": 30562.7820664832 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "announcements": [], + "id": "0e1d431a-e1be-439e-9f86-2771f5f3fde4", + "savedPayload": { + "position": { + "x": 31323.39347664845, + "y": 30562.7820664832 + }, + "targetPosition": { + "x": 31255.294901687517, + "y": 30696.433045111455 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "announcements": [], + "id": "f8551c2e-bbb4-4cba-ab56-d7873f725f07", + "savedPayload": { + "position": { + "x": 31255.294901687517, + "y": 30696.433045111455 + }, + "targetPosition": { + "x": 31348, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "openStage": { + "type": "Open Stage", + "name": "New Open Stage", + "config": "{\n\"roundingErrorCorrectionFactor\": 1.01, \n\"absoluteDustInBaseAsset\": 0,\n\"absoluteDustInQuotedAsset\": 0 \n}", + "project": "Foundations", + "initialTargets": { + "type": "Initial Targets", + "name": "New Initial Targets", + "project": "Foundations", + "targetRate": { + "type": "Target Rate", + "name": "New Target Rate", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "c2cc6b16-4d23-4fb5-ba60-a05c6758f6ea", + "savedPayload": { + "position": { + "x": 31284.964286449067, + "y": 30023.69772550875 + }, + "targetPosition": { + "x": 31461.29986213681, + "y": 30266.402823821234 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5febb99a-093e-4ae2-afa8-e28743b302c3", + "savedPayload": { + "position": { + "x": 31461.29986213681, + "y": 30266.402823821234 + }, + "targetPosition": { + "x": 31637.635437824552, + "y": 30509.107922133717 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "targetSizeInBaseAsset": { + "type": "Target Size In Base Asset", + "name": "New Target Size In Base Asset", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "4f17a02a-185b-4c85-b26f-85667100b1a7", + "savedPayload": { + "position": { + "x": 31731.49611684869, + "y": 29916.494917776636 + }, + "targetPosition": { + "x": 31684.565777336622, + "y": 30212.801419955176 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "bba4131a-dd63-490c-97a7-819c484a9a6a", + "savedPayload": { + "position": { + "x": 31684.565777336622, + "y": 30212.801419955176 + }, + "targetPosition": { + "x": 31637.635437824552, + "y": 30509.107922133717 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "targetSizeInQuotedAsset": { + "type": "Target Size In Quoted Asset", + "name": "New Target Size In Quoted Asset", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "f9ae8796-8a5b-421e-b2b1-8741ea1a8cc2", + "savedPayload": { + "position": { + "x": 32123.045634449518, + "y": 30156.43677075823 + }, + "targetPosition": { + "x": 31880.340536137035, + "y": 30332.772346445974 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "19f04a50-0d33-4c0b-a723-1dd922de9b57", + "savedPayload": { + "position": { + "x": 31880.340536137035, + "y": 30332.772346445974 + }, + "targetPosition": { + "x": 31637.635437824552, + "y": 30509.107922133717 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "d41b3907-2ae7-4d87-8b10-f80fc30107d1", + "savedPayload": { + "position": { + "x": 31637.635437824552, + "y": 30509.107922133717 + }, + "targetPosition": { + "x": 31590.705098312483, + "y": 30805.414424312257 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "openExecution": { + "type": "Open Execution", + "name": "New Open Execution", + "project": "Foundations", + "executionAlgorithms": [], + "id": "90f51fa8-874d-460c-9f40-b4c533c0e75f", + "savedPayload": { + "position": { + "x": 31833.410196624965, + "y": 30629.078848624515 + }, + "targetPosition": { + "x": 31590.705098312483, + "y": 30805.414424312257 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "closeStageEvent": { + "type": "Close Stage Event", + "name": "New Close Stage Event", + "project": "Foundations", + "situations": [ + { + "type": "Situation", + "name": "New Situation", + "project": "Foundations", + "conditions": [ + { + "type": "Condition", + "name": "New Condition", + "project": "Foundations", + "javascriptCode": { + "type": "Javascript Code", + "name": "New Javascript Code", + "code": "// Type your code", + "project": "Foundations", + "id": "76f03cf3-14ab-444d-847d-a3d86244236c", + "savedPayload": { + "position": { + "x": 32183.31810266957, + "y": 30899.27510333639 + }, + "targetPosition": { + "x": 32035.1648515803, + "y": 30875.809933580356 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "da3fb954-8ee5-4537-98ef-7ae9a9d18ade", + "savedPayload": { + "position": { + "x": 32035.1648515803, + "y": 30875.809933580356 + }, + "targetPosition": { + "x": 31887.011600491027, + "y": 30852.344763824323 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "230c7c45-dfe4-44cf-96fd-103ccc94c7ec", + "savedPayload": { + "position": { + "x": 31887.011600491027, + "y": 30852.344763824323 + }, + "targetPosition": { + "x": 31738.858349401755, + "y": 30828.87959406829 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "announcements": [], + "id": "9516578c-09f5-4e5a-9512-bd6a972e653b", + "savedPayload": { + "position": { + "x": 31738.858349401755, + "y": 30828.87959406829 + }, + "targetPosition": { + "x": 31590.705098312483, + "y": 30805.414424312257 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "announcements": [], + "id": "a4bc39be-42fd-4439-9397-d4f9b72c86ae", + "savedPayload": { + "position": { + "x": 31590.705098312483, + "y": 30805.414424312257 + }, + "targetPosition": { + "x": 31348, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "manageStage": { + "type": "Manage Stage", + "name": "New Manage Stage", + "project": "Foundations", + "managedStopLoss": { + "type": "Managed Stop Loss", + "name": "New Managed Stop Loss", + "project": "Foundations", + "phases": [ + { + "type": "Phase", + "name": "New Phase", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "2355e7d2-8df6-40ea-89b5-c14871b45a46", + "savedPayload": { + "position": { + "x": 32038.23995122821, + "y": 31205.12338415819 + }, + "targetPosition": { + "x": 31889.061666922968, + "y": 31189.44411466804 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "moveToPhaseEvents": [], + "announcements": [], + "id": "6c14c525-08b9-47ab-a147-10a974ae6ceb", + "savedPayload": { + "position": { + "x": 31889.061666922968, + "y": 31189.44411466804 + }, + "targetPosition": { + "x": 31739.883382617725, + "y": 31173.76484517789 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "b6587a2b-f666-49b8-a613-f0e2364d77ca", + "savedPayload": { + "position": { + "x": 31739.883382617725, + "y": 31173.76484517789 + }, + "targetPosition": { + "x": 31590.705098312483, + "y": 31158.085575687743 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "managedTakeProfit": { + "type": "Managed Take Profit", + "name": "New Managed Take Profit", + "project": "Foundations", + "phases": [ + { + "type": "Phase", + "name": "New Phase", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "ec410d91-2186-4c11-9298-a7e728004bea", + "savedPayload": { + "position": { + "x": 31773.736587696596, + "y": 31569.18103162692 + }, + "targetPosition": { + "x": 31712.726091235225, + "y": 31432.149212980526 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "moveToPhaseEvents": [], + "announcements": [], + "id": "e0f595de-f085-4890-bc73-881928da8d60", + "savedPayload": { + "position": { + "x": 31712.726091235225, + "y": 31432.149212980526 + }, + "targetPosition": { + "x": 31651.715594773854, + "y": 31295.117394334135 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "5ef91d3f-b318-4ff2-9690-d79830001df6", + "savedPayload": { + "position": { + "x": 31651.715594773854, + "y": 31295.117394334135 + }, + "targetPosition": { + "x": 31590.705098312483, + "y": 31158.085575687743 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "announcements": [], + "id": "4e67c91b-a870-48e7-86b6-97d1ffa7df85", + "savedPayload": { + "position": { + "x": 31590.705098312483, + "y": 31158.085575687743 + }, + "targetPosition": { + "x": 31348, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "closeStage": { + "type": "Close Stage", + "name": "New Close Stage", + "config": "{\n\"roundingErrorCorrectionFactor\": 1.01, \n\"absoluteDustInBaseAsset\": 0,\n\"absoluteDustInQuotedAsset\": 0 \n}", + "project": "Foundations", + "initialTargets": { + "type": "Initial Targets", + "name": "New Initial Targets", + "project": "Foundations", + "targetRate": { + "type": "Target Rate", + "name": "New Target Rate", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "ff36b87d-b2af-432d-aad7-9f425d05da30", + "savedPayload": { + "position": { + "x": 31962.12596138647, + "y": 31719.77910877002 + }, + "targetPosition": { + "x": 31676.809006497926, + "y": 31627.074010457538 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "0c4588ed-6aad-4e43-aea2-fd857cdde709", + "savedPayload": { + "position": { + "x": 31676.809006497926, + "y": 31627.074010457538 + }, + "targetPosition": { + "x": 31391.49205160938, + "y": 31534.368912145055 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "targetSizeInBaseAsset": { + "type": "Target Size In Base Asset", + "name": "New Target Size In Base Asset", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "b63cde4a-ffa7-4d55-827e-fdbe25d55f92", + "savedPayload": { + "position": { + "x": 31663.886351453108, + "y": 32068.972826658075 + }, + "targetPosition": { + "x": 31527.689201531244, + "y": 31801.670869401565 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "888c1960-5e4e-40bf-86a5-0733ad54d2d4", + "savedPayload": { + "position": { + "x": 31527.689201531244, + "y": 31801.670869401565 + }, + "targetPosition": { + "x": 31391.49205160938, + "y": 31534.368912145055 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "targetSizeInQuotedAsset": { + "type": "Target Size In Quoted Asset", + "name": "New Target Size In Quoted Asset", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "555c938b-6d6a-43dc-89f2-864738616991", + "savedPayload": { + "position": { + "x": 31206.081854984415, + "y": 32105.002821922146 + }, + "targetPosition": { + "x": 31298.786953296898, + "y": 31819.6858670336 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "a8c951b1-9c11-4f6d-8461-fb935cf062d8", + "savedPayload": { + "position": { + "x": 31298.786953296898, + "y": 31819.6858670336 + }, + "targetPosition": { + "x": 31391.49205160938, + "y": 31534.368912145055 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "f33dc477-014b-4b16-a6bb-0c347f5a4992", + "savedPayload": { + "position": { + "x": 31391.49205160938, + "y": 31534.368912145055 + }, + "targetPosition": { + "x": 31255.294901687517, + "y": 31267.066954888545 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "closeExecution": { + "type": "Close Execution", + "name": "New Close Execution", + "project": "Foundations", + "executionAlgorithms": [], + "id": "b79f9f3f-01e6-417f-b644-825e17427e7c", + "savedPayload": { + "position": { + "x": 31162.589803375035, + "y": 31552.38390977709 + }, + "targetPosition": { + "x": 31255.294901687517, + "y": 31267.066954888545 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "closeStageEvent": { + "type": "Close Stage Event", + "name": "New Close Stage Event", + "project": "Foundations", + "situations": [ + { + "type": "Situation", + "name": "New Situation", + "project": "Foundations", + "conditions": [ + { + "type": "Condition", + "name": "New Condition", + "project": "Foundations", + "javascriptCode": { + "type": "Javascript Code", + "name": "New Javascript Code", + "code": "// Type your code", + "project": "Foundations", + "id": "c6103247-6024-4e7d-81a5-833dc6d8d3ff", + "savedPayload": { + "position": { + "x": 30720.690987174497, + "y": 31539.461254732272 + }, + "targetPosition": { + "x": 30854.341965802752, + "y": 31471.36267977134 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "8655ace0-0cba-4682-aa94-795a3d34ce9a", + "savedPayload": { + "position": { + "x": 30854.341965802752, + "y": 31471.36267977134 + }, + "targetPosition": { + "x": 30987.992944431007, + "y": 31403.26410481041 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "42267582-434d-4698-81d6-7ae8093d9a3a", + "savedPayload": { + "position": { + "x": 30987.992944431007, + "y": 31403.26410481041 + }, + "targetPosition": { + "x": 31121.643923059262, + "y": 31335.165529849477 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "announcements": [], + "id": "8ebc6ab4-56ff-4afc-9741-a5ea2d8495f3", + "savedPayload": { + "position": { + "x": 31121.643923059262, + "y": 31335.165529849477 + }, + "targetPosition": { + "x": 31255.294901687517, + "y": 31267.066954888545 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "announcements": [], + "id": "3baca3ee-6498-4db5-8ba9-d7c9640907cf", + "savedPayload": { + "position": { + "x": 31255.294901687517, + "y": 31267.066954888545 + }, + "targetPosition": { + "x": 31348, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "6b8ed032-1481-4e79-bcfa-b4d572e21df3", + "savedPayload": { + "position": { + "x": 31348, + "y": 30981.75 + }, + "targetPosition": { + "x": 31048, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "dynamicIndicators": { + "type": "Dynamic Indicators", + "name": "New Dynamic Indicators", + "project": "Foundations", + "indicatorFunctions": [ + { + "type": "Indicator Function", + "name": "New Indicator Function", + "config": "{ \n \"codeName\": \"\"\n}", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "3e3301b4-6742-49c8-82d6-20cd3453365f", + "savedPayload": { + "position": { + "x": 30148, + "y": 30981.75 + }, + "targetPosition": { + "x": 30448, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "21cc000a-cdbd-4c02-b1e4-4c4560861792", + "savedPayload": { + "position": { + "x": 30448, + "y": 30981.75 + }, + "targetPosition": { + "x": 30748, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "ec700c19-7aee-4180-bb1f-5493f518e7ee", + "savedPayload": { + "position": { + "x": 30748, + "y": 30981.75 + }, + "targetPosition": { + "x": 31048, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "91a1d0d1-2a1a-45d5-a52b-b2dc5502339f", + "savedPayload": { + "position": { + "x": 31048, + "y": 30981.75 + }, + "targetPosition": { + "x": 31048, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ] +} \ No newline at end of file From c445691bc97714e63611582d74f621177447fbbd Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Mon, 4 Oct 2021 19:58:03 +0200 Subject: [PATCH 53/82] This is my contribution to Superalgos --- ...algos-006-how-to-contribute-tutorials.json | 270 ++++++++++++++++-- 1 file changed, 240 insertions(+), 30 deletions(-) diff --git a/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-006-how-to-contribute-tutorials.json b/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-006-how-to-contribute-tutorials.json index 3403824af..aaaf88ba4 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-006-how-to-contribute-tutorials.json +++ b/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-006-how-to-contribute-tutorials.json @@ -4,13 +4,27 @@ "type": "How to Contribute Tutorials", "definition": { "text": "Tutorials are the ultimate educational resource available in Superalgos, and they play a crucial role during the onboarding of new users. Contributing tutorials is a great way to help the project grow the user base and is highly appreciated!", - "updated": 1617710488028 + "updated": 1617710488028, + "translations": [ + { + "language": "ES", + "text": "Los tutoriales son la última fuente educativa disponible en Superalgos, y juegan un papel crucial durante la introducción de los usuarios nuevos. Contribuir con los tutoriales es un excelente modo de ayudar al proyecto para que su base de usuarios crezca y lo apreciamos muchísimo!", + "updated": 1633370243631 + } + ] }, "paragraphs": [ { "style": "Text", "text": "This page discusses best practices to build and contribute Superalgos tutorials. It doesn't cover the actual mechanics of building tutorials. Instead, it focuses on what is desirable.", - "updated": 1617732597782 + "updated": 1617732597782, + "translations": [ + { + "language": "ES", + "text": "Esta página habla a cerca de las mejores prácticas para construir y contribuir tutoriales de Superalgos. No cubre la mecanica actual de construir tutoriales. en lugar de eso está enfocado en lo que sería deseable.", + "updated": 1633364195196 + } + ] }, { "style": "Title", @@ -20,17 +34,38 @@ { "style": "Text", "text": "At Superalgos, we take pride in the quality of the product we are building. Documentation and tutorials are crucial parts of Superalgos.", - "updated": 1617732636344 + "updated": 1617732636344, + "translations": [ + { + "language": "ES", + "text": "En Superalgos, nosotros nos sentimos orgullosos de la cualidad del producto que estamos construyendo. La documentación y los tutoriales son una parte crucial de Superalgos.", + "updated": 1633364296850 + } + ] }, { "style": "Text", "text": "That said, we understand that it takes time and effort to get to a quality product, thus iterating on early prototypes and implementing early-stage feedback is a good way to achieve the desired quality standards.", - "updated": 1617732666027 + "updated": 1617732666027, + "translations": [ + { + "language": "ES", + "text": "Dicho esto, nosotros entendemos que se requiere de tiempo y esfuerzo para obtener un producto de cualidad por lo tanto, iteractuar sobre los primeros prototipos e implementar la retroalimentación en las primeras etapas es una buena manera de lograr el objetivo deseado de los estándares de cualidad.", + "updated": 1633364481390 + } + ] }, { "style": "Success", "text": "When you build a tutorial for Superalgos, you become the maintainer of the tutorial. It is your responsibility to keep the tutorial up to date with the system, and to implement the feedback users may share! Your tutorial must become the ultimate resource to learn the topics it covers. ", - "updated": 1620645983606 + "updated": 1620645983606, + "translations": [ + { + "language": "ES", + "text": "Cuando construye un tutorial para Superalgos, se convierte en quien mantiene el tutorial. Es su reponsabilidad ,mantener el tutorial actualizado con el sistema, e implementar los comentarios que los usuarios pueden compartir! Su tutorial debe convertirse en la fuente fundamental para aprender el tópico con el cual está relacionado.", + "updated": 1633364765692 + } + ] }, { "style": "Title", @@ -40,7 +75,14 @@ { "style": "Text", "text": "To deliver the best possible experience, a tutorial must be featured in a specific Workspace, and the workspace must be custom-tailored to serve the tutorial. The workspace must be clean and feature the assets required for the learning experience to be optimal. It is best to keep the workspace clean, light, and stripped of unnecessary resources.", - "updated": 1617732813825 + "updated": 1617732813825, + "translations": [ + { + "language": "ES", + "text": "Para ofrecer a mejor experiencia posible, un tutorial debe aparecer en un Workspace, específico y el workspace debe ser personalizado para servir al tutorial. El workspace debe ser limpio y segurar los elementos necesarios para que la experiencia de aprendizaje sea óptima- Es lo mejor mantener el workspace limpio, ligero, y despojado de recursos innecesarios.", + "updated": 1633365163709 + } + ] }, { "style": "Subtitle", @@ -50,16 +92,37 @@ { "style": "Text", "text": "If your tutorial deals with data, it is best to use the same exchange, market, and date ranges already in use in the Getting Started Plugin Workspace tutorials. This way, users will already have the data and can go through the tutorial easier.", - "updated": 1621871223112 + "updated": 1621871223112, + "translations": [ + { + "language": "ES", + "text": "Si el tutorial your tutorial trata con datos,es lo mejor utilizar el mismo exchange, market, y rango de datoss, ya en uso en los tutoriales de Getting Started Plugin Workspace. De este modo, los usuarios ya tendran los dtos y pueden ir a través del tutorial con mayor facilidad.", + "updated": 1633365432578 + } + ] }, { "style": "Note", "text": "If for whatever reason the tutorial must deal with other markets and/or exchanges to deliver the content, then go ahead and ignore the above.", - "updated": 1621871324929 + "updated": 1621871324929, + "translations": [ + { + "language": "ES", + "text": "Si por cualquier razón el tutorial debiera tratar con otros mercados y/o exchanges para enviar el contenido, entonces siga adelante e ignore lo de aquí arriba.", + "updated": 1633365546892 + } + ] }, { "style": "Success", - "text": "Make sure you include a step allowing users to switch to BinanceUS, in case they need to, just like in the Welcome to Superalgos Tutorial." + "text": "Make sure you include a step allowing users to switch to BinanceUS, in case they need to, just like in the Welcome to Superalgos Tutorial.", + "translations": [ + { + "language": "ES", + "text": "Asegúrese de incluir un paso permitiendo a los usuarios enlazar con BinanceUS, en caso de que lo necesiten como en el caso del tutorial de Welcome to Superalgos.", + "updated": 1633365690047 + } + ] }, { "style": "Title", @@ -69,36 +132,85 @@ { "style": "Text", "text": "Some topics are broad, have ramifications, or require a nuanced analysis to be covered thoroughly. In such cases, planning for a series of tutorials is ideal.", - "updated": 1617712578718 + "updated": 1617712578718, + "translations": [ + { + "language": "ES", + "text": "Algunos tópicos son amplios, tienen ramificaciones, o requieren un análisis mas profundo para ser cubiertos por completo. en estos casos, la planificación de una serie de tutoriales es lo ideal.", + "updated": 1633365921291 + } + ] }, { "style": "Text", "text": "Take, for example, the series of tutorials in the Trading System Design Tutorials Plugin Workspace:", - "updated": 1617712745906 + "updated": 1617712745906, + "translations": [ + { + "language": "ES", + "text": "Tome, por ejemplo, las series de tutoriales en el Trading System Design Tutorials Plugin Workspace:", + "updated": 1633365963577 + } + ] }, { "style": "List", - "text": "The first tutorial in the series gives a broad introduction to the topic, mostly in conceptual terms. This allows users to see the big picture and learn how the concepts are structured and why they are structured the way they are." + "text": "The first tutorial in the series gives a broad introduction to the topic, mostly in conceptual terms. This allows users to see the big picture and learn how the concepts are structured and why they are structured the way they are.", + "translations": [ + { + "language": "ES", + "text": "El primer tutorial en a serie da una introducción amplia del tópico, mayormente en términos conceptuales. Esto permite a los usuarios ver la la idea completa y aprender a cerca de como los conceptos han sido estructurados y porque están estructurados así.", + "updated": 1633366158719 + } + ] }, { "style": "List", "text": "The second tutorial in the series proposes an exercise that takes several more tutorials to develop and implement. That is, the tutorial sets the basis for what the series will cover.", - "updated": 1617732839409 + "updated": 1617732839409, + "translations": [ + { + "language": "ES", + "text": "El segundo tutorial en la serie propone un ejercicio que incuye varios tutoriales para desarrollar e implementar. Esto es, el tutorial sienta las bases de lo que la serie cubrirá.", + "updated": 1633366319793 + } + ] }, { "style": "List", "text": "The remaining tutorials in the series dissect the exercise proposed earlier and cover with a fine level of detail the implementation. At the same time, they cover all the context and many lateral topics.", - "updated": 1617732881797 + "updated": 1617732881797, + "translations": [ + { + "language": "ES", + "text": "El tutorials siguiente en la serie disecciona el ejercicio propuesto anteriormente y cubre con un nivel fino de detalles la implementación. Al mism tiempo, ellos cubren todo el contexto y muchos temas laterales.", + "updated": 1633366468389 + } + ] }, { "style": "Note", "text": "The whole series threads a common theme and develops it from the simplest to the most complex concepts, step by step. A tutorial series must be exhaustive and eventually, cover the whole topic. It must become the ultimate tool to learn about the subject matter!", - "updated": 1617732933799 + "updated": 1617732933799, + "translations": [ + { + "language": "ES", + "text": "Toda la serie enhebra un tema común y lo desarrolla desde lo más simplea los conceptos más complejos, paso a paso. Una serie de tutoriales debe ser exhaustiva y ocacionalmente cubrir el tópico completo. Debe convertirse en la herramienta definitiva para aprender sobre el tema!", + "updated": 1633366741272 + } + ] }, { "style": "Success", "text": "Consult with project maintainers what would be good names for each tutorial in the series. Naming tutorials with clear and descriptive names is important.", - "updated": 1621875606145 + "updated": 1621875606145, + "translations": [ + { + "language": "ES", + "text": "Consulte a los project maintainers cuúal serían buenos nombres para cada tutorial de la serie. Nombrar tutoriales con nombres claros y descriptivos es importante.", + "updated": 1633366871577 + } + ] }, { "style": "Title", @@ -108,22 +220,50 @@ { "style": "Text", "text": "People are different. We all have slightly different wirings in our heads, and we all learn differently. In that sense, building tutorials is a bit of a challenge. Some people like tutorials that go straight to the point and show them how to solve a very specific issue. Others prefer tutorials that get to the bone, explain every detail, and properly cover the context.", - "updated": 1617733011186 + "updated": 1617733011186, + "translations": [ + { + "language": "ES", + "text": "La gente es diferente. todos tenemos un cableado ligeramente diferente en nuestras cabezas, y todos aprendemos distinto. En ese sentido, construir tutoriales tiene un poco de desafío. A alguna gente le gustan los tutoriales que van derecho al punto y muestran como resolver un tema bien específico. otros prefieren tutoriales que van al hueso, explican cada detalle y cubre adecuadamente el contenido.", + "updated": 1633367166012 + } + ] }, { "style": "Text", "text": "At this early stage, we can't afford to duplicate efforts and build different tutorials for different kinds of learners. We have to choose the method that best serves the project.", - "updated": 1617714108723 + "updated": 1617714108723, + "translations": [ + { + "language": "ES", + "text": "Es en esta etapa temprana, que no podemos darnos el lujo de duplicar esfuerzos y construir tutorials diferentes para distintas clases de aprendices. Tenemos que elegir el método que mejor sirva al projecto.", + "updated": 1633367412845 + } + ] }, { "style": "Important", "text": "We choose to focus on building comprehensive tutorials that everyone can follow and that leave no one behind. We believe that a tutorial that goes slow, covering every detail, and taking the time to explain the nuance is the right approach at this stage. By building tutorials in a such manner, we guarantee that those who are willing to invest the time to learn the system have adequate material to quickly become power users.", - "updated": 1621870335450 + "updated": 1621870335450, + "translations": [ + { + "language": "ES", + "text": "Elegims enfocarnos en construirtutoriales comprensibles que todos puedan seguir y que no deje a nadie atrás. Creemos que un tutorial que va lento, cubriendo cada detalle, y tomándose el tiempo de explicar los matices es el enfoque correcto en esta etapa. Al construir tutoriales de esta manera, garantizamosque aquellos que están dispuestos a invertir tiempo en aprender el sistema tengan el material adecuado para convertirse rápidamente en usuarios poderosos.", + "updated": 1633367871109 + } + ] }, { "style": "Text", "text": "Such tutorials may be slightly annoying to fast-learners, or to people that just want a specific question answered. But such needs are already covered by the searchable knowledge base comprised in the Docs.", - "updated": 1617714293925 + "updated": 1617714293925, + "translations": [ + { + "language": "ES", + "text": "Estos tutoriales pueden resultar ligeramente molestos para los que aprenden rápido o para gente que solo busca respuesta a una pregunta específica. Pero esas necesidades ya son cubiertas en la base de conocimientos con capacidad de búsqueda incluida en los Docs.", + "updated": 1633368103703 + } + ] }, { "style": "Title", @@ -133,12 +273,26 @@ { "style": "Text", "text": "Let's get into some of the specifics on building tutorials for Superalgos!", - "updated": 1617720149756 + "updated": 1617720149756, + "translations": [ + { + "language": "ES", + "text": "Analicemos algunos de los detalles sobre la construcción de los tutorials para Superalgos!", + "updated": 1633368160422 + } + ] }, { "style": "Callout", "text": "Superalgos tutorials have evolved through several months worth of feedback from early adopters. We feel we have found a sweet spot, and have started to develop a style in the way we use the space available in each tutorial step. The following are some notes that will help you build tutorials that match the format of existing tutorials.", - "updated": 1617733117832 + "updated": 1617733117832, + "translations": [ + { + "language": "ES", + "text": "Los tutoriales de Superalgos han evolucionado a lo largo de varios meses valiosos feedbacks de los primeros usuarios. Sentimos que hemos encontrado un modo propio, y hemos comenzado a desarrollar un estilo en el modo en que utilizamos el espacio disponible en cada paso de un tutorial. A continuaciòn algunas notas que le ayudará a construir tutoriales ue combine con el formato de los tutoriales existentes.", + "updated": 1633368515189 + } + ] }, { "style": "Title", @@ -148,16 +302,37 @@ { "style": "Text", "text": "The ultimate goal of tutorials is to provide users with a hands-on learning experience covering topics in detail. In general terms, we know that a tutorial is good — or has reached a mature state — when users ask no questions about it in the Support Group.", - "updated": 1620645730740 + "updated": 1620645730740, + "translations": [ + { + "language": "ES", + "text": "La meta final de los tutoriales es proveer a los usuarios con una experiencia de aprendizaje práctica que cubra el tópico al detalle. En terminos generales, sabemos que un tutorial es bueno — o que ha alcanzado su estado maduro — cuando los usuarios no hacen preguntas a cerca de ellos en el Support Group.", + "updated": 1633368718874 + } + ] }, { "style": "Text", "text": "Be precise and unequivocal with language. Read your writing over and over in search of phrases that may not be easily understood, or that may be interpreted in different ways. Improve the sentences to make them as clear as possible. Remember, the less clear your writing is, the more questions we have in the Support Group.", - "updated": 1620645812565 + "updated": 1620645812565, + "translations": [ + { + "language": "ES", + "text": "Se preciso exacto con el lenguaje. Lee lo que ha escrito una y otra vez en búsqueda de frases que pueden no ser entendidas facilmente, o que puedan ser interpretadas de diferentes maneras. Mejora las oraciones para acerlas lo mas claras posibles. Recuerde, mientras menos clara sea su escritura, más preguntas nosotros tendremos en el Support Group.", + "updated": 1633368994567 + } + ] }, { "style": "Success", - "text": "Be prepared to iterate over and over until the tutorial stabilizes. That will happen when there are no more questions about the topic in the Support Group!" + "text": "Be prepared to iterate over and over until the tutorial stabilizes. That will happen when there are no more questions about the topic in the Support Group!", + "translations": [ + { + "language": "ES", + "text": "Esté preparado para itneractuar una y otra vez hasta que el tutorial se estabilice. Eso sucederá cuando no haya más preguntas acerca de el tópico en el Support Group!", + "updated": 1633369113576 + } + ] }, { "style": "Title", @@ -165,7 +340,14 @@ }, { "style": "Text", - "text": "Use the different sections on the page and the different paragraph styles for consistent purposes. This helps users get accustomed to a certain format so that they know what to expect from each section of the page. Consistency in the way the information is delivered makes tutorials more usable!" + "text": "Use the different sections on the page and the different paragraph styles for consistent purposes. This helps users get accustomed to a certain format so that they know what to expect from each section of the page. Consistency in the way the information is delivered makes tutorials more usable!", + "translations": [ + { + "language": "ES", + "text": "Use las diferentes secciones de la página y los distintos estilos de párrafos para popósitos concretos. Esto a los usuarios a acostumbrarse a cierto formato para que sepan que esperar en cada sección de la página. La consistencia en el modo en que la información es enviada hace que los tutoriales sean más útiles!", + "updated": 1633369382341 + } + ] }, { "style": "Subtitle", @@ -174,12 +356,26 @@ { "style": "Text", "text": "The definition box is the space to the right of the icon, below the title. Use this space to introduce what the step is about, that is, to set up the story the step will tell, or to provide some basic context. ", - "updated": 1617902992986 + "updated": 1617902992986, + "translations": [ + { + "language": "ES", + "text": "El box de definición es el espacio a la derecha del ícono, debajo el título. Use este espacio para introducir a cerca de qué es el paso, esto es, establecer la historia que el paso contrará, o proveer algún contexto básico.", + "updated": 1633369713286 + } + ] }, { "style": "Note", "text": "To use the definition box correctly, explain the context in four to five lines. Avoid one or two lines or anything over five.", - "updated": 1617903200520 + "updated": 1617903200520, + "translations": [ + { + "language": "ES", + "text": "Para usar la box de definición correctamente, explique el contexto en cuatro o cinco lineas. Evite una o dos lineas o sobrepasar las cinco.", + "updated": 1633369703258 + } + ] }, { "style": "Subtitle", @@ -188,11 +384,25 @@ { "style": "Text", "text": "The most important section on any given step is the call for action, that is, the instruction that the user must follow to progress in the tutorial. Many times users redo tutorials or go back a few steps just to make sure they did everything right. ", - "updated": 1617904108044 + "updated": 1617904108044, + "translations": [ + { + "language": "ES", + "text": "La sección más importante de cualquier paso es el llamad a la acción, esto es, la instrucción que el usuario debe seguir para progresar en el tutorial. Mauchas veces los usuarios rehacen los tutoriales o vuelven atrás un par de pasos para asegurarse que hicieron todo correctamente.", + "updated": 1633369877553 + } + ] }, { "style": "Callout", - "text": "Always use the callout style — the one applied to this paragraph — for the call for action! Similarly, try to avoid using this style for anything else. If the particular step doesn't have a call for action, then the step should not feature this style at all!" + "text": "Always use the callout style — the one applied to this paragraph — for the call for action! Similarly, try to avoid using this style for anything else. If the particular step doesn't have a call for action, then the step should not feature this style at all!", + "translations": [ + { + "language": "ES", + "text": "Siempre respete el estilo — el que está en este párrafo — para el llamado a la acción! Al igual, trate de evitar usar este estilo para ninguna otra cosa- Si un paso en particular no tiene llamad a la acción, entonces este estilo no debería estar para nada!", + "updated": 1633370216971 + } + ] }, { "style": "Text", From b71fd5282b23f8adde34b67cf455e922185957b9 Mon Sep 17 00:00:00 2001 From: ssplatt Date: Mon, 4 Oct 2021 17:25:02 -0400 Subject: [PATCH 54/82] update readmes, add brewfile, add npm scripts --- Brewfile | 3 + Docker/README.md | 273 ++++++++++++++ Docker/docker-compose.yml | 4 +- README.md | 739 +++++++++++++++++--------------------- package.json | 4 + 5 files changed, 602 insertions(+), 421 deletions(-) create mode 100644 Brewfile create mode 100644 Docker/README.md diff --git a/Brewfile b/Brewfile new file mode 100644 index 000000000..7189f5aeb --- /dev/null +++ b/Brewfile @@ -0,0 +1,3 @@ +brew "git" +brew "node" +brew "npm" diff --git a/Docker/README.md b/Docker/README.md new file mode 100644 index 000000000..257ac96b6 --- /dev/null +++ b/Docker/README.md @@ -0,0 +1,273 @@ +# Superalgos Docker Guide + +## Table of Contents + +- [Introduction](#introduction) +- [Installation](#installation) + - [Mac OS](#mac-os) + - [Windows](#windows) + - [Linux and BSD](#linux-and-bsd) +- [Running Superalgos](#running-superalgos) + - [Using Docker-Compose](#using-docker-compose) +- [Docker Best Practices](#docker-best-practices) +- [Docker Development Best Practices](#docker-development-best-practices) + - [Dockerfile Best Practices](#dockerfile-best-practices) + - [Twelve Factor App](#twelve-factor-app) + +## Introduction + +This walkthrough is broken up into to parts: a quick-start guide to running [Superalgos](https://github.com/Superalgos/Superalgos) with Docker and a deeper, more theoretical dive into containers with the hopes of explaining some of the design decisions. + +[Superalgos](https://github.com/Superalgos/Superalgos), at its core, is a web application which also means it can be deployed inside a container like many other web applications. One of the leading platforms for operating containers is Docker. Docker can run on many different operatng systems and compute platforms. The containers provide an easy, fast, repeatable, and secure way to deploy and distribute applications. While it doesn't take much experience to run containers or Docker, there are some basics that any user should learn in order to use the technology effectively. + +Before getting started, be aware that Docker is not the originally intended method of running the [Superalgos](https://github.com/Superalgos/Superalgos) application and as such there are some drawbacks to doing so. Namely, you won't be able contribute back to the project or configure your Governance profile. We'll discuss this more later. Therefore, you should only consider using the Docker container for production deployments. + +It is also worth noting that [Superalgos](https://github.com/Superalgos/Superalgos) is very resource intense so it is best to get acquainted with the software by running it on a fast computer with a good amount of RAM as opposed to a tiny, slow Raspberry Pi. But, once you are ready to run a production deployment, then a more economical server is preferred. + +Docker container images are hosted on `ghcr`. You can browse the containers in the [Packages section of the code repository](https://github.com/users/Superalgos/packages/container/package/superalgos). + +> **Note:** The container and the application are still under heavy development and testing. Please join the [Superalgos SysAdmins Group](https://t.me/superalgossysadmins) to discuss any issues you may run into. + +## Installation + +First, Docker Desktop needs to be installed on a Mac or Windows computer in order to run the containers. Linux and BSD users will need Docker Engine. Docker-compose is also recommended and it should be included with Docker Desktop, but it may need to be installed separately. + +### Mac OS + +Docker can be downloaded from the Docker Store following the [directions in the official Docker Docs](https://docs.docker.com/desktop/mac/install/). It can also be installed from the command line using Homebrew. + +```shell +brew cask install docker +brew install docker-compose +``` + +Then, make sure Docker Desktop is running. An easy way to check is to push `Cmd + space` then type `docker.app` in the search bar. You should also see the little whale icon in the top menu bar near the clock. + +### Windows + +Windows requires a few more steps than Mac OS, but it can also be downloaded from the Docker Store following the [directions in the official Docker Docs](https://docs.docker.com/desktop/windows/install/). It can also be installed from the command line using Chocolatey. + +```shell +choco install docker-desktop +``` + +Docker should automatically start after installation. If you don't see the whale icon in the tray by the clock, then find `Docker` in the start menu. + +### Linux and BSD + +On Linux and BSD systems, Docker can be installed using the prefered package manager. [Step by step instructions for many different distributions](https://docs.docker.com/engine/install/debian/) of Linux can be found in the official Docker Docs. Since [Superalgos](https://github.com/Superalgos/Superalgos) runs well on Raspberry Pi 4 single-board computers, I'm going to illustrate the commands necessary to run [Superalgos](https://github.com/Superalgos/Superalgos) on the Raspbian Linux distribution. + +```shell +# install the requirements +sudo apt-get update +sudo apt-get install \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg \ + lsb-release + +# add the gpg keys to verify the packages +curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg + +# confgure the official repository +echo \ + "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \ + $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +# install docker engine +sudo apt-get update +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose +``` + +Docker should automatically start when it is done installing. You can check its status with `systemctl status docker`. To make things easier, ensure your user is added to the `docker` group. Type `id` at the command prompt and you should see something like `groups=...999(docker)`. If you don't see it listed, you can add yourself with `sudo usermod -a -G docker `. + +## Running Superalgos + +Now that we have Docker installed and running, we can run the container. The option `--rm` will remove the isntance of the container when it is exited. + +```shell +docker run --rm ghcr.io/superalgos/superalgos:latest +``` + +You'll see some messages showing the container being downloaded and then some messages from the application itself showing that it is starting up and ready to accept connections. We'll stop the container now and add in a few more options so make it more useful, so press `ctrl + c` to exit. + +We'll need to expose some ports so we can actually connect to it from our browser. Also, we'll want to create a few directories on our host file system so we can save, or persist, data between container reboots. + +- `-d` to run the container daemonized, in the background +- `-p` to map ports to the host system to allow connections +- `-v` to mount local directories inside the container to persist data +- `--name` to assign a name to the container for easier reference + +```shell +# create the data directories +mkdir -p Data-Storage Log-Files My-Workspaces + +# run the container with the extra options +docker run \ + -d \ + --rm \ + --name superalgos \ + --user $(id -u):$(id -g) \ + -p 18041:18041 \ + -p 34248:34248 \ + -v $(pwd)/Data-Storage:/app/Data-Storage \ + -v $(pwd)/Log-Files:/app/Log-Files \ + -v $(pwd)/My-Workspaces:/app/My-Workspaces \ + ghcr.io/superalgos/superalgos:latest +``` + +You can check the status of the container with `docker ps -a` and view the logs with `docker logs superalgos`. + +Note that you will see one error in the log output informing you that `git` is not installed. This is intentional and is not required for the bot to function properly. + +Now you can open your browser and load the application front end. Try loading `http://localhost:34248` if you are on the same computer that is running the container, otherwise use the host ip, for example `http://192.168.1.10:34248`. + +If you want to stop the container, you can run `docker stop superalgos`. When you want to upgrade the container, use: + +```shell +docker pull ghcr.io/superalgos/superalgos:latest +docker stop superalgos +docker run \ + -d \ + --rm \ + --name superalgos \ + --user $(id -u):$(id -g) \ + -p 18041:18041 \ + -p 34248:34248 \ + -v $(pwd)/Data-Storage:/app/Data-Storage \ + -v $(pwd)/Log-Files:/app/Log-Files \ + -v $(pwd)/My-Workspaces:/app/My-Workspaces \ + ghcr.io/superalgos/superalgos:latest +``` + +Let's stop the container for now (`docker stop superalgos`) and we'll run it again using `docker-compose`. + +Continue reading the [Docker Command Line documentation](https://docs.docker.com/engine/reference/commandline/cli/) for more details. + +### Using Docker-Compose + +Docker-compose is a wrapper for the Docker API which makes it a little easier to maintain a declaritive configuration for an application instead of using the direct command line commands. There is a sample docker-compose configuration included in the [Superalgos](https://github.com/Superalgos/Superalgos) which you can as the basis for your own configuration. + +Let's download the sample and edit it. If you don't use `vim`, change that command for your preferred editor. + +```shell +wget https://raw.githubusercontent.com/Superalgos/Superalgos/master/Docker/docker-compose.yml +vim docker-compose.yml +``` + +Now, let's change some of the settings: + +```yaml +version: "3" +services: + superalgos: + image: ghcr.io/superalgos/superalgos:latest + command: ["minMemo"] + user: "$UID:$GID" + ports: + - '34248:34248' + - '18041:18041' + volumes: + - ./Data-Storage:/app/Data-Storage + - ./Log-Files:/app/Log-Files + - ./My-Workspaces:/app/My-Workspaces + restart: on-failure +``` + +You can see we have the same ports and volumes mapped. We also get a few extra settings like `command`, `environment`, and `restart`. + +- `command` adds an extra setting to the main startup, so the application ends up running with the full command `node platform noBrowser minMemo`. The base of that command is defined as the `ENTRYPOINT` in the `Dockerfile` that builds the container. +- `user` defines the UID and GID the container should run as so that the data can be persisted with the correct permissions in the Data-Storage, Log-Files, and My-Workspaces directories that we created on the host. If you leave this out, the container will use the built in `superalgos` user which has `uid: 1001` and `gid: 1001`. Instead of using variables, you could also hard-code these UID and GID numbers into the configuration. +- `restart` tells Docker to restart the container if an error occurs. + +Save the file and exit the editor. If you are using `vim`, hit escape and then type `:wq!` or press `shift + Z + Z` (two capital Z's). + +Now, start the container with `docker-compose up`. This will start the container in the foreground and you'll connect to the log output. Hit `ctrl + c` to exit. Going forward, you'll want to add the `-d` option to start the container and keep it running in the background. + +```shell +# some preliminary configuration to set up the persistent data directories +mkdir -p Data-Storage Log-Files My-Workspaces +export UID=$(id -u) +export GID=$(id -g) + +# run the container in the background +docker-compose up -d +``` + +Now you have several `docker-compose` commands at your disposal to interact with the container: + +- `docker-compose ps` to see details of the container +- `docker-compose logs` to see the logs +- `docker-compose down` to stop and remove the instance of the container +- `docker-compose pull` to pull the container, or a new version of the `latest` tag + +Putting some of those concepts together, you can keep the running container up to date with this one-liner: + +```shell +docker-compose pull && docker-compose down && docker-compose up -d +``` + +Explore the full [Docker Compose documentation](https://docs.docker.com/compose/) for more information. + +## Docker Best Practices + +As with any technology, there are lots of ways of doing things. A lot of them will give the same end result, but some may have fewer steps, or be more secure, or be more maintainable. That is where "best practices" come in. They aren't there to necessarily tell you what to do and what not to do, but they are there to help guide you in the right direction. A lot of times, they help you avoid making architectural mistakes that could come back and bite you further down the road. + +One general best practice when running a production deployment is to avoid breaking changes by pinning to specific container tags. The `shasum hash` and the `release` tags are the best to use. These will generally ensure you are always running the same code and it will only upgrade when configured to do so. The other tags will change which code they are pointing to more frequently and without notice. + +- `latest` : the absolute latest build +- `master` : the latest master branch build +- `develop` : the latest develop branch build +- `` : a specific git commit hash +- `` : corresponds with a Github Release (git tag), i.e. `beta-10` + +## Docker Development Best Practices + +Docker has many advantages which can aid in every step from development through production deployment. There are some useful tips located directly in the [Docker documentation](https://docs.docker.com/develop/dev-best-practices/). Concisely, they are to keep the build images small, a few tips on when and how to persist data, and to use CI/CD for testing and deployment. All of these tips are used in one way or another as a part of the [Superalgos](https://github.com/Superalgos/Superalgos) project. + +- Use a minimal base image and multi-stage build. Superalgos is currently using an [alpine](https://www.alpinelinux.org/) base image but [distroless](https://github.com/GoogleContainerTools/distroless) is becoming more common and some times using a base image like [python-slim](https://hub.docker.com/_/python) is the bast that can be achieved. +- The images are quite large (around 2 GB in size), unfortunately, because the codebase itself is large. We've recently put in a lot of effort to make these images as small as possible. +- The images are built automatically using Github Actions when pull requests are merged. +- With the correct configuration, data, like data mine and trading bot information, is persisted to the host using volume mounts + +### Dockerfile Best Practices + +Docker maintains a list of [Dockerfile best practices](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/) in their main documentation. These tips dictate many of the decisions around the Superalgos Dockerfile. Some of the tips that are used by [Superalgos](https://github.com/Superalgos/Superalgos) are listed below. + +- Use `.dockerignore` to prevent unwanted data from entering the container. This keeps the container small but also enhances security to prevent secrets from leaking into a container by accident. +- Don't install unneccesary packages. In lieu of multi-stage builds, build caches and build dependencies are removed before finalizing the container. Only packages that are necessary for the execution of the application are installed. This is why `git` is not present. +- Minimize the number of layers. Many `RUN` commands are combined into one using `&&` in order to reduce the number of layers. +- Sort multiline arguments. This mostly enhances readability and maintainability. +- Leverage build cache. When testing locally, several of the tips above help levarage the build cache and speed up build times. + +### Twelve Factor App + +[Superalgos](https://github.com/Superalgos/Superalgos) is a web app but it was originally designed to be run on a local workstation or server on a trusted network. However, I don't think it would be prudent to talk about Docker best practices without mentioning the [Twelve Factor App](https://12factor.net/) manifesto. Over time, [Superalgos](https://github.com/Superalgos/Superalgos) itself may iterate and implement more and more of these principles as more people get involved and more people deploy production environments. + +The Twelve Factors: + +- Codebase: One codebase tracked in revision control, many deploys + - Superalgos utilizes one GitHub repository +- Dependencies: Explicitly declare and isolate dependencies + - Superalgos is a node.js app and uses npm to track and install dependencies +- Config: Store config in the environment + - Superalgos does not use environment variables the moment for configuration. Options are passed on the command line at run time. Other configuration is hard coded into the Workspaces. +- Backing services: Treat backing services as attached resources + - Superalgos connects to external services via API calls over HTTP (TCP) +- Build, release, run: Strictly separate build and run stages + - Superalgos is deployed by end users in their own local environments +- Processes: Execute the app as one or more stateless processes + - Superalgos is one application +- Port binding: Export services via port binding + - Superalgos exposes an HTTP frontend port and a Websockets backend port (TCP) +- Concurrency: Scale out via the process model + - Superalgos can be clustered but the front end and backend do not necessarily scale out independently from each other +- Disposability: Maximize robustness with fast startup and graceful shutdown + - Superalgos is not stateless in that the data files must be persisted to disk. Also, Superalgos cannot run behind a load balancer and have requests randomly distributed to different backend servers. +- Dev/prod parity: Keep development, staging, and production as similar as possible + - Superalgos doesn't have its own production environment but the container makes it easy to ensure development environments are the same as what a user will see when they deploy it for themselves in their own production environment. +- Logs: Treat logs as event streams + - Superalgos sends its own application logs to standard out. The trading mine logs are sent to flat files (persisted through volume mounts) +- Admin processes: Run admin/management tasks as one-off processes + - Superalgos does not have any admin or management tasks outside of what is used to create the container at build time. diff --git a/Docker/docker-compose.yml b/Docker/docker-compose.yml index 6d8153e3c..40efbd552 100644 --- a/Docker/docker-compose.yml +++ b/Docker/docker-compose.yml @@ -6,6 +6,7 @@ services: dockerfile: ./Docker/Dockerfile image: ghcr.io/superalgos/superalgos:latest command: ["minMemo"] + user: "$UID:$GID" ports: - '34248:34248' - '18041:18041' @@ -13,7 +14,4 @@ services: - ../Data-Storage:/app/Data-Storage - ../Log-Files:/app/Log-Files - ../My-Workspaces:/app/My-Workspaces - environment: - PUID: '1000' - PGID: '1000' restart: on-failure diff --git a/README.md b/README.md index 9d9a519e9..c28266744 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,52 @@ ![last-commit](https://img.shields.io/github/last-commit/Superalgos/Superalgos/develop?label=last%20commit%20to%20develop) ![bot-friendliness](https://img.shields.io/badge/Bot%20Friendliness%20Level-119%25-yellow) -Superalgos is not just another open-source project. We are an open and welcoming community devised, nurtured, and incentivized with the project's native Superalgos (SA) Token to build an open trading intelligence network. +## Table of Contents + +- [Table of Contents](#table-of-contents) +- [Introduction](#introduction) +- [Getting Started Guide](#getting-started-guide) +- [Pre-Requisites](#pre-requisites) + - [Windows Install](#windows-install) + - [Mac OS Install](#mac-os-install) + - [Linux Install (e.g. Raspberry Pi running Raspberry Pi OS/Raspbian)](#linux-install--eg-raspberry-pi-running-raspberry-pi-os-raspbian-) +- [Superalgos Platform Client Installation](#superalgos-platform-client-installation) + - [Fork the Superalgos Repository](#fork-the-superalgos-repository) + - [Clone Your Fork](#clone-your-fork) + - [Install Node Dependencies](#install-node-dependencies) + - [Troubleshooting Dependency Installation](#troubleshooting-dependency-installation) + - [Enable Desktop Shortcut in Ubuntu](#enable-desktop-shortcut-in-ubuntu) + - [Installation Notes](#installation-notes) + - [Uninstall](#uninstall) +- [Usage](#usage) + - [Run the Client and GUI](#run-the-client-and-gui) + - [Using the shortcuts](#using-the-shortcuts) + - [Using the Command Line](#using-the-command-line) + - [Usage Notes](#usage-notes) + - [Running Superalgos on a Headless Linux Server as a Daemon](#running-superalgos-on-a-headless-linux-server-as-a-daemon) + - [Using Systemd](#using-systemd) + - [Docker Deployments](#docker-deployments) +- [Welcome Tutorial](#welcome-tutorial) +- [What is the Superalgos Platform?](#what-is-the-superalgos-platform-) + - [Superalgos Platform Features](#superalgos-platform-features) + - [Superalgos Development Pipeline](#superalgos-development-pipeline) + - [Superalgos is User-centric](#superalgos-is-user-centric) + - [Superalgos Platform Allows You To](#superalgos-platform-allows-you-to) + - [Superalgos Platform for Developers](#superalgos-platform-for-developers) + - [Superalgos Platform Saves You Time](#superalgos-platform-saves-you-time) + - [Superalgos Platform is Permissionless](#superalgos-platform-is-permissionless) + - [Superalgos Platform for Algo-Trders](#superalgos-platform-for-algo-trders) + - [Superalgos Platform Saves You Money](#superalgos-platform-saves-you-money) + - [Superalgos Platform Minimizes Risks](#superalgos-platform-minimizes-risks) + - [Superalgos Platform for Companies](#superalgos-platform-for-companies) +- [Support](#support) +- [Other Resources](#other-resources) +- [Contributing](#contributing) +- [License](#license) + +## Introduction + +Superalgos is not just another open-source project. We are an open and welcoming community devised, nurtured, and incentivized with the project's native [Superalgos (SA) Token](https://superalgos.org/token-overview.shtml) to build an [open trading intelligence network](https://superalgos.org/). You will notice the difference as soon as you join the [Telegram Community Group](https://t.me/superalgoscommunity) or the new [Discord Server](https://discord.gg/CGeKC6WQQb)! @@ -13,275 +58,227 @@ You will notice the difference as soon as you join the [Telegram Community Group ![superalgos-readme](https://user-images.githubusercontent.com/13994516/106380124-844d8980-63b0-11eb-9bd9-4f977b6c183b.gif) -# Getting Started Guide +## Getting Started Guide All procedures are the same for Windows, Linux, or Mac OS. Raspberry Pi terminal commands have been included for ease of use. -> **IMPORTANT:** Remote installations and minimalist hardware — both virtual and physical — are better suited for production deployments, where the use of the GUI is minimal. We highly recommend learning Superalgos in a local installation. Mastering the system takes time, and the use of the GUI to go through in-app tutorials is crucial during the learning process. Your experience will be orders of magnitude better if you follow this advice: leave remote installations and minimalist hardware for when you are ready to start trading live. +> **IMPORTANT:** +> +> Remote installations and minimalist hardware — both virtual and physical — are better suited for production deployments, where the use of the GUI is minimal. We highly recommend learning Superalgos in a local installation. Mastering the system takes time, and the use of the GUI to go through in-app tutorials is crucial during the learning process. Your experience will be orders of magnitude better if you follow this advice: leave remote installations and minimalist hardware for when you are ready to start trading live. -# Pre-Requisites +## Pre-Requisites -## 1. Node JS Installation +In order to run Superalgos on your computer, you will need the latest versions of Node JS and Git installed. You will also need a web browser to access the interface. Google Chrome is recommended as it is what the development team uses and supports. -If you don't have it yet, download and install Node.js. +- [Node.js download page](https://nodejs.org/en/download/) +- [Git download page](https://git-scm.com/downloads) +- [Google Chrome download page](https://www.google.com/chrome/) -Node JS is an open-source server environment required to run Superalgos. +### Windows Install -**A.** Go to the Node JS [download page](https://nodejs.org/en/download/). +Follow the install wizards to install the latest NodeJS and Github Desktop applications. -**B.** Download your system's installer. Select *LTS Recommended for Most Users* and click the big Windows or macOS Installer button. If you are on Linux, the installer is listed further down the page. +- [Node.js download page](https://nodejs.org/en/download/). Select "Current" then "Windows Installer", then follow the wizard to install after the download completes. +- [GitHub Desktop downloat page](https://desktop.github.com/). Click the "Download for Windows" button and follow the wizard to install after the download completes. +- [Google Chrome download page](https://www.google.com/chrome/). After the install, it is recommended to set Chrome as the default browser. +- If you intend on running the machine learning features (TensorFlow), you must [install Python 2](https://www.python.org/downloads/release/python-2718/) as well. -**C.** Run the installer with the default configuration — just click Next until Node.JS is fully installed. That's it! You can continue with step 2 (Git Installation). +### Mac OS Install -


- -**NODE JS INSTALLATION FOR RASPBERRY PI USERS** - -You may install Node.JS just like you would on any other machine as per the above instructions. As an alternative, you may also try the following from the SSH Terminal. - -**NOTE:** It is best to use the most current and updated version of the FULL PiOS image. +[Homebrew](https://brew.sh/) can be used to install the requirements with minimal effort on Mac OS. After you clone the repository, change directory to the Superalgos base and install the requirements using the Brewfile. Python 3 is only required for running machine learning (TensorFlow). +```sh +brew install git node npm python@3.9 ``` + +Or use the `Brewfile` included in the code repository. After downloading, run this command in the same directory where the `Brewfile` resides: + +```sh +brew bundle +``` + +You can use Safari or Google Chrome as your default browser. If you run into a bug in Safari, you will be asked to reproduce it in Chrome as the development team uses Chrome. + +### Linux Install (e.g. Raspberry Pi running Raspberry Pi OS/Raspbian) + +[Follow the Node.js package manager install instructions](https://nodejs.org/en/download/package-manager/) for your distribution to ensure you are getting the latest version of Node.js. Many distributions only maintain an older version in their default repositories. Python 3 is only required for running machine learning (TensorFlow). + +```sh curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - +sudo apt-get install -y nodejs npm git python3 ``` -Followed by: -``` -sudo apt-get install -y nodejs -``` -It is also required to install the Node Package Manager for dependancy management. -``` -sudo apt install npm -``` -You may also type the following to verify Node.js and NPM installation and version. -``` + +You may verify the installed versions with these commands: + +```sh node -v -``` -``` -npm -v +npm -v +git --version ``` -
+If you are running headless (i.e. as a server without a monitor attached) then you do not need to install a web browser and you can follow the tutorial for information on connecting remotely to the server. -## 2. Git Installation +## Superalgos Platform Client Installation -Download and install Git. +### Fork the Superalgos Repository -Git is an open-source distributed version control system required to download and stay up to date with Superalgos. +- Scroll the page all the way to the top. Find and click the **Fork** button to create your fork/copy of this repository. To fork Superalgos you need a Github account. If you don't have one, go ahead and create it. -**A.** Go to the Git [download page](https://git-scm.com/downloads). +> **NOTE** +> +> A Fork is required for your contributions to the project. The reason why Superalgos is free and open-source is that the project has set up a [collective business](https://superalgos.org) in which all users may participate. The way to participate is to [contribute](https://superalgos.org/community-contribute.shtml) to make Superalgos better. The project's [token](https://superalgos.org/token-overview.shtml) is distributed among contributors. -**B.** Download the version for your Operating System. +### Clone Your Fork -**C.** Run the installer with the default configuration — just click Next until Git is fully installed. +- Once the fork is created, you will land on the page of your fork. Copy the URL from your browser's address bar. +- In your computer/laptop/server, open a command prompt or terminal. Make sure you are in a directory where you have write permissions (on most systems the terminal will open in your user's home directory, so you're good). Clone the git repository using the command: -**IMPORTANT:** The latest version of Git is required to handle the authentication with GitHub.com. - -**NOTE FOR MAC USERS:** Depending on your setup, installing Git may be optional. The native XCode Command Line Developer Tools seems to work well. If you do install Git, we have tested Tim Harper's binary installer successfully. - -
- -**GIT INSTALLATION FOR RASPBERRY PI USERS** - -Just like with Node.JS, you may follow the above instructions to install Git, or use the SSH Terminal command. The most recent version of PiOS has Git already installed, so this may give you an error. The error will not affect your installation. -``` -sudo apt-get install git -``` - -
- -## 3. Google Chrome or Safari - -Use Chrome, or Safari on Mac. These are the only tested browsers. - -**A.** Go to the Chrome [download page](https://www.google.com/chrome/). - -**B.** Run the installer. - -Before you begin, it is recommended that you set up Chrome/Safari as your default browser. - -**IMPORTANT:** Use Chrome/Safari so that you have a similar environment as the dev team in case you need help. We are not testing on any other browsers, and it is a well-known fact that browsers behave differently. - -# Superalgos Platform Client Installation - -## 1. Fork the Superalgos Repository - -**A.** Scroll the page all the way to the top. Find and click the **Fork** button to create your fork/copy of this repository. To fork Superalgos you need a Github account. If you don't have one, go ahead and create it. - -**NOTE:** A Fork is required for your contributions to the project. The reason why Superalgos is free and open-source is that the project has set up a collective business in which all users may participate. The way to participate is to contribute to make Superalgos better. The project's token is distributed among contributors. - -## 2. Clone Your Fork - -**A.** Once the fork is created, you will land on the page of your fork. Copy the URL from your browser's address bar. - -**B.** In your computer/laptop/server, open a command prompt or terminal. Make sure you are in a directory where you have write permissions (on most systems the terminal will open in your user's home directory, so you're good). Clone the git repository using the command: - -``` +```sh git clone ``` For example, if your Github username is John, the command will look like this: -``` +```sh git clone https://github.com/John/Superalgos ``` This creates the `Superalgos` folder in the current directory, which contains the whole installation. -## 3. Install Node Dependencies +### Install Node Dependencies After the Superalgos directory has been installed, the final step of installation is to set up the necessary node dependencies. In the same command prompt or terminal you just used, type the following: -``` +```sh cd Superalgos ``` -That should take you inside the Superalgos folder created by the `git clone` command earlier. +That should take you inside the Superalgos folder created by the `git clone` command earlier. Now type `node setup` to install the dependencies. -Now, you need to install dependencies, and there are two options: - -**A.** To install all basic dependencies run: - -``` +```sh node setup ``` -Then wait until you are able to type within the terminal again. +By default, desktop shortcuts are created if they can be. Currently, Mac OS shortcuts are not created. Linux installations may require extra steps to view and use the shortcuts. -This command will install and configure all additional dependencies needed by Superalgos. It will also install desktop and start menu shortcuts. +Available Options: -**B.** If you intend to use the experimental implementation of the TensorFlow Project within Superalgos, then run: - -``` -node setup tensorflow +```sh +usage: node setup ``` -This command will install all dependencies plus TensorFlow dependencies. +| Option | Description | +| --- | --- | +| `noShortcuts` | Do not install desktop shortcuts | +| `tensorflow` | Include the TensorFlow dependencies | -**NOTE FOR WINDOWS USERS INSTALLING TENSORFLOW DEPENDENCIES:** You may get an error at the end of the set up process. If you do, please follow the instructions following the error message. +> **NOTE FOR WINDOWS USERS INSTALLING TENSORFLOW DEPENDENCIES:** +> +> You may get an error at the end of the set up process. If you do, please follow the instructions following the error message. -**NOTE FOR USERS INSTALLING MULTIPLE INSTANCES OF SUPERALGOS ON THE SAME MACHINE:** In order to avoid name conflicts between shortcuts, make sure to rename each Superalgos directory before running `node setup`. +> **NOTE FOR USERS INSTALLING MULTIPLE INSTANCES OF SUPERALGOS ON THE SAME MACHINE:** +> +> In order to avoid name conflicts between shortcuts, make sure to rename each Superalgos directory before running `node setup`. -Congratulations your installation is complete! +Congratulations your installation is complete! Follow the "Running the Application" directions below. -> **The Usage section below explains how to run the app.** - -
- -**DEPENDENCY INSTALLATION FOR RASPBERRY PI USERS** - -As noted above, running `node setup` installs GUI shortcuts by default. To suppress this behavior in headless installations, add the `noShortcuts` flag as follows: - -``` -node setup noShortcuts -``` - -or, if you wish to try the TensorFlow implementation,... - -``` -node setup tensorflow noShortcuts -``` - -
- -**Troubleshooting Dependency Installation** +#### Troubleshooting Dependency Installation If you are having difficulty running the node setup command here are a few common issues that may be getting in the way. -**1.** Check the version of node and npm you have installed. Make sure that you are running an updated version of node greater than version 12 and npm greater than version 5. You can check which version you have by typing `node -v` and `npm -v` into a command prompt or terminal. If your version numbers are below these, you can update your installation by following the instructions outlined in the "Node JS Installation" step above. +1. Check the version of node and npm you have installed. Make sure that you are running an updated version of node greater than version 12 and npm greater than version 5. You can check which version you have by typing `node -v` and `npm -v` into a command prompt or terminal. If your version numbers are below these, you can update your installation by following the instructions outlined in the "Node JS Installation" step above. +2. If you are installing Superalgos in an administratively protected directory you will need to do one of the following: + - For Windows start your command prompt as an administrator. + - For Linux and Mac Systems make sure to add the sudo command to node setup. This will look like `sudo node setup`. +3. For Windows it is important that you have C:\Windows\System32 added to your global PATH. For instructions on how to do this google "add to the path on Windows 10." +#### Enable Desktop Shortcut in Ubuntu -**2.** If you are installing Superalgos in an administratively protected directory you will need to do one of the following: +The majority of shortcuts that are automatically installed will work out of the box. Desktop shortcuts on Ubuntu, however, require a few additional steps to set up. First, desktop icons need to be enabled within the Tweaks app. -- For Windows start your command prompt as an administrator. +- Check if Tweaks is installed. +- If not go to Ubuntu Software. +- Install Tweaks. +- Open Tweaks. +- Under extensions turn on Desktop Icons -- For Linux and Mac Systems make sure to add the sudo command to node setup. This will look like `sudo node setup`. +![enable-ubuntu-shortcut](https://user-images.githubusercontent.com/55707292/117553927-f0780300-b019-11eb-9e36-46b509653283.gif) +> **TIP:** If you do not see the desktop shortcut appear right away you may need to restart your computer. -**3.** For Windows it is important that you have C:\Windows\System32 added to your global PATH. For instructions on how to do this google "add to the path on Windows 10." +Finally, you will need to enable the desktop shortcut. Right click Superalgos.desktop and select Allow Launching. -## 4. Installation Notes +![allow-launching](https://user-images.githubusercontent.com/55707292/117553933-fcfc5b80-b019-11eb-872c-4fad81b184d2.gif) -**A.** You need to make a fork so that you may contribute work. Superalgos is a Community project and you are expected to contribute, like everyone else. You don't need to be a technical person to contribute. Fixing a typo in the docs or translating a paragraph into your native language are valuable contributions too. Superalgos has built-in features that make contributing easy. Help make Superalgos better and Superalgos will better serve you! Free-riding is not cool, particularly on free, open-source, Community-driven projects. +Now both launcher and desktop shortcuts will launch Superalgos like any other program on your computer. -**B.** The software includes an in-app self-update command / feature. It will help you stay up-to-date with the latest version of the software. Updates are on-demand, so don't worry about undesired updates. The project moves very fast and new features become available regularly, particularly if you choose to run the software in the ```develop``` branch (you may switch branches from within the app). +### Installation Notes -**C.** It is a good idea to perodically run the `node setup` command to keep the underlying dependencies for your Superalgos installation up to date. +- You need to make a fork so that you may contribute work. Superalgos is a Community project and you are expected to contribute, like everyone else. You don't need to be a technical person to contribute. Fixing a typo in the docs or translating a paragraph into your native language are valuable contributions too. Superalgos has built-in features that make contributing easy. Help make Superalgos better and Superalgos will better serve you! Free-riding is not cool, particularly on free, open-source, Community-driven projects. +- The software includes an in-app self-update command / feature. It will help you stay up-to-date with the latest version of the software. Updates are on-demand, so don't worry about undesired updates. The project moves very fast and new features become available regularly, particularly if you choose to run the software in the `develop` branch (you may switch branches from within the app). +- It is a good idea to perodically run the `node setup` command to keep the underlying dependencies for your Superalgos installation up to date. +- Before installing the client on a remote computer in an attempt to access the UI from a different machine, we highly recommend you do a standard installation on your PC / laptop first. Leave your Raspberry Pi or VPS for later, once you have done all available tutorials. This single tip will save you a lot of time: you don't need to add complexity before you learn how to handle the app, and the GUI performs best in a local installation. -**D.** Before installing the client on a remote computer in an attempt to access the UI from a different machine, we highly recommend you do a standard installation on your PC / laptop first. Leave your Raspberry Pi or VPS for later, once you have done all available tutorials. This single tip will save you a lot of time: you don't need to add complexity before you learn how to handle the app, and the GUI performs best in a local installation. +### Uninstall -# Usage +Superalgos writes nothing outside of the `Superalgos` folder other than shortcut files. In order to quickly remove the shortcut files, open a terminal or command prompt, navigate to your main Superalgos directory, and type the following command: -## 1. Run the Client and GUI +```sh +node uninstall +``` + +Then simply delete the `Superalgos` folder to completely remove the application. + +## Usage + +### Run the Client and GUI + +#### Using the shortcuts + +If you ran `node setup` with no options above, then you should see a desktop icon which you can double click to launch the Superalgos application. A terminal window will show the server is running, and a browser window will open with the WebUI. + +#### Using the Command Line To run Superalgos, go to the Superalgos directory/folder and run this command: -``` +```sh node platform ``` +Available Options: + +```sh +usage: node platform +``` + +| Option | Description | +| --- | --- | +| `minMemo` | Run with minimal memory footprint. This is critical for running on platforms with less than 8GB of ram, like a Raspberry Pi. | +| `noBrowser` | Do not attempt to open the WebUI in a browser. This is useful on headless servers where a UI is not available. | + The Client will run on your terminal and the GUI will launch on your default browser. If Chrome/Safari is not your default browser, copy the URL, close the browser, open Chrome/Safari, and paste the URL. Be patient... it takes a few seconds to fully load the GUI. A Welcome Tutorial pops-up automatically. You must do this Tutorial to finish the setup and to learn the basics. It's the ultimate onboarding experience, superior to all other resources available, including videos and the Docs. ![run-the-system-01](https://user-images.githubusercontent.com/13994516/107037804-e5fc6200-67bb-11eb-82f2-d0f40247fa14.gif) -Alternatively, you may use any of the automatically installed desktop and start menu shortcuts to launch Superalgos. - -**NOTE:** Shortcuts are not currently supported on Mac. Collaborators are needed to finish this feature. - - -
- -**RUNNING THE CLIENT FOR HEADLESS RASPBERRY PI USERS** - -If you are running a headless Raspberry Pi (one without a screen) you may need to change directories first and run Superalgos with the `minMemo` and `noBrowser` options. - -``` -cd Superalgos -``` -then -``` -node platform minMemo noBrowser -``` - -
- -**NOTE FOR UBUNTU USERS**: Enable Desktop Shortcut - -The majority of shortcuts that are automatically installed will work out of the box. Desktop shortcuts on Ubuntu, however, require a few additional steps to set up. - -First, desktop icons need to be enabled within the Tweaks app. -* Check if Tweaks is installed. -* If not go to Ubuntu Software. -* Install Tweaks. -* Open Tweaks. -* Under extensions turn on Desktop Icons - -![enable-ubuntu-shortcut](https://user-images.githubusercontent.com/55707292/117553927-f0780300-b019-11eb-9e36-46b509653283.gif) - -**TIP:** If you do not see the desktop shortcut appear right away you may need to restart your computer. - -Finally, you will need to enable the desktop shortcut. -* Right click Superalgos.desktop and select Allow Launching. - -![allow-launching](https://user-images.githubusercontent.com/55707292/117553933-fcfc5b80-b019-11eb-872c-4fad81b184d2.gif) - -Now both launcher and desktop shortcuts will launch Superalgos like any other program on your computer. - -## 3. Usage Notes +### Usage Notes We are testing the UI on Google Chrome and Safari on macOS only. It may work on other browsers as well — or not. If you are running on a different browser and ever need support, make sure you mention that fact upfront, or even better, try on Chrome/Safari first. - **TIP:** If your computer has 8 GB of RAM or less, use ```node platform minMemo``` to run the system with minimal RAM requirements. +> **TIP:** +> +> If your computer has 8 GB of RAM or less, use `node platform minMemo` to run the system with minimal RAM requirements. -# Running Superalgos on a Headless Linux Server as a Daemon +### Running Superalgos on a Headless Linux Server as a Daemon If you're running Superalgos on a headless linux server like a Raspberry Pi, you might want to run it as a daemon so it isn't attached to your current login session. The easiest, most standard way to go about this is probably using `systemd`. Most linux distributions use it as default init system/service manager. -## Using `systemd` +#### Using Systemd Create a `superalgos.service` file looking like this (change `` to your user name and `/path/to/Superalgos` to your Superalgos folder, for instance `/home/John/Superalgos`): -``` + +```ini [Unit] Description=Superalgos Platform Client @@ -293,296 +290,202 @@ ExecStart=/usr/bin/node platform minMemo noBrowser [Install] WantedBy=multi-user.target - -``` -There is no need to run Superalgos as root so we're running it as a user. The `minMemo` option assumes you're running on a small machine like a Raspberry Pi, while `noBrowser` makes sense for running daemonized. - -Now, as root (or using `sudo`), put the file `superalgos.service` you just created in `/etc/systemd/system/` and issue the command -``` -systemctl enable superalgos -``` -This will install the service so that Superalgos is started on boot. To start it manually, do (again as root or with `sudo`) -``` -systemctl start superalgos ``` -To see the output of Superalgos, use +There is no need to run Superalgos as root so we're running it as a user. The `minMemo` option assumes you're running on a small machine like a Raspberry Pi, while `noBrowser` makes sense for running daemonized. Now, you'll need to move the file to `/etc/systemd/system/` in order for it to be recognized. You'll need then to enable and start the service. + +```sh +sudo mv superalgos.service /etc/systemd/system +sudo systemctl daemon-reload +sudo systemctl enable superalgos +sudo systemctl start superalgos ``` + +To see the output of Superalgos, use: + +```sh journalctl -u superalgos ``` -or to follow the output, -``` + +or to follow the output with `-f`: + +```sh journalctl -u superalgos -f ``` -# Uninstall +### Docker Deployments -Superalgos writes nothing outside of the ```Superalgos``` folder other than shortcut files. To uninstall the software, follow these steps: +See the [Docker Readme for more information](Docker/README.md). -Open a terminal or command prompt and navigate to your main Superalgos directory and type the following command: -``` -node uninstall -``` -This will remove any shortcut files that have been installed. - -Then simply delete the `Superalgos` folder. There will be nothing left on your computor. - -# Welcome Tutorial +## Welcome Tutorial Once the app finishes loading, an interactive tutorial takes you by the hand and walks you all around the system while you learn the basic skills required to use the interface, mine data, backtest strategies, and even run a live trading session. It is highly recommended you follow the tutorial until the end, as it is carefully crafted to make your onboarding as easy as possible. Tutorials are the absolute best way to tackle the learning curve. You should do all tutorials before you start exploring other avenues on your own. ![welcome-tutorial-00](https://user-images.githubusercontent.com/13994516/107038771-4a6bf100-67bd-11eb-92e0-353525a972a9.gif) - **NOTE:** The tutorial uses Binance or Binance US as the exchange of choice. If you don't have an account with Binance or Binance US, you will still be able to follow 100% of the tutorial. When you get to the live trading section, keep going even if you don't intend to run the session. You may learn how to work with other exchanges later on. +> **NOTE:** +> +> The tutorial uses Binance or Binance US as the exchange of choice. If you don't have an account with Binance or Binance US, you will still be able to follow 100% of the tutorial. When you get to the live trading section, keep going even if you don't intend to run the session. You may learn how to work with other exchanges later on. -# Docker Deployments +## What is the Superalgos Platform? -Docker container images can be found at https://github.com/users/Superalgos/packages/container/package/superalgos - -If you wish to run Superalgos over docker platform, follow these steps. - -**Note:** This has not been extensively tested yet. If you run into troubles, please contact us at the [Superalgos Support Group](https://t.me/superalgossupport). - -## 1. Install Docker - -Follow the link to [install docker](https://docs.docker.com/engine/install/). - -## 2. Run - - -### Option A. Using pre-built container - -You will need to create local storage directories beforehand, by example with `mkdir Data-Storage Log-Files My-Workspaces` - -``` -docker run \ - -d \ - --rm \ - --name superalgos \ - -p 18041:18041 \ - -p 34248:34248 \ - -v $(pwd)/Data-Storage:/app/Data-Storage \ - -v $(pwd)/Log-Files:/app/Log-Files \ - -v $(pwd)/My-Workspaces:/app/My-Workspaces \ - ghcr.io/superalgos/superalgos:latest -``` - -Now you can access the Superalgos UI at http://127.0.0.1:34248 - -To see console logs you can use `docker logs superalgos -f` - -When you're done just exec `docker kill superalgos` - -### Option B. Build container locally using docker-compose - -Follow the link to [install docker-compose](https://docs.docker.com/compose/install/) - -Run `docker-compose -f Docker/docker-compose.yml up`. - -## Configure the Container Environment - -### Available image tags - -To avoid breaking changes, the `shasum hash` and the `release` tags are the best to use. These will generally ensure you are always running the same code. The other tags will change which code they are pointing to more frequently and without notice. - -- `latest` : the absolute latest build -- `master` : the latest master branch build -- `develop` : the latest develop branch build -- `` : a specific git commit hash -- `` : corresponds with a Github Release (git tag), i.e. `beta-10` - -### Environment variables - -`PUID` and `GUID` environment variables can be used to help avoid permissions issues in the mounted volumes between the container environment and the local OS environment. The default `PUID` and `GUID` is `1000`. You can view the current user's PUID and GUID with the `id` command. - -## Troubleshooting - -Some users have reported the Docker installation was not working, and the root cause was that the ad blocker was blocking the scripts to run. - -# Superalgos is User-centric - -* No ads, anywhere. - -* No sign-up / logins. - -* No user/usage data collection of any kind. - -* No user trading information collected or sold. - -* Runs 100% on uncompiled code anyone can read and audit. - -# Superalgos Development Pipeline - -* **Superalgos P2P Network:** Will allow the project to distribute trading intelligence produced by algo-traders. - -* **Trading Signals:** Will allow providers to broadcast trading signals and be rewarded with SA Tokens. - -* **Superalgos Mobile:** Will allow users to consume trading signals for free and autonomously execute trades from their mobile phones. - -* **Ethereum Integration:** Will allow mining data from an Ethereum network node, and bring it into the Superalgos workflow. - -# What is the Superalgos Platform? - -Superalgos Platform is a set of tools to automate crypto-trading. It is implemented as a Node JS Client + Web App that runs on your hardware and scales from a single Raspberry Pi to a Trading Farm. The Platform is fully functional and has been used for trading live since 2020. +Superalgos Platform is a set of tools to automate crypto-trading. It is implemented as a Node JS Client + Web App that runs on your hardware and scales from a single Raspberry Pi to a Trading Farm. The Platform is fully functional and has been used for trading live since 2020. At Beta 12, trading signals will be able to be sent to the Suerpalgos Network from the Superalgos Platform. -## Superalgos Platform Features +### Superalgos Platform Features -* A Visual Scripting Designer. -* Integrated Charting System. -* A Visual Strategy Debugger. -* Data Mining Tools. -* Coordinated Task Management across a Trading Farm. -* Community-built strategies to learn and start from. -* TensorFlow Machine Learning integration. -* In-App Tutorials. -* Complete In-App Documentation. -* SA Token / Project Governance System. +- A Visual Scripting Designer. +- Integrated Charting System. +- A Visual Strategy Debugger. +- Data Mining Tools. +- Coordinated Task Management across a Trading Farm. +- Community-built strategies to learn and start from. +- TensorFlow Machine Learning integration. +- In-App Tutorials. +- Complete In-App Documentation. +- SA Token / Project Governance System. + +### Superalgos Development Pipeline -## Superalgos Platform Allows You To... +- **Superalgos P2P Network:** Will allow the project to distribute trading intelligence produced by algo-traders. +- **Trading Signals:** Will allow providers to broadcast trading signals and be rewarded with SA Tokens. +- **Superalgos Mobile:** Will allow users to consume trading signals for free and autonomously execute trades from their mobile phones. +- **Ethereum Integration:** Will allow mining data from an Ethereum network node, and bring it into the Superalgos workflow. -* Visually design your trading strategies. -* Visually debug your trading strategies. -* Visually design your indicators. -* Visually design your plotters to visualize indicators or mined data. -* Visually design your data-mining operations. -* Download historical market data from crypto exchanges. -* Backtest your strategies against historical data. -* Run live trading sessions. -* Run arbitrary data-mining operations of any size. -* Feed your trading strategies with the data mined. -* Use your token holdings to vote and influence the direction of the project development. -* Produce real-time trading signals and send them via the p2p network. (under development) +### Superalgos is User-centric -# Superalgos Platform for Developers +- No ads, anywhere. +- No sign-up / logins. +- No user/usage data collection of any kind. +- No user trading information collected or sold. +- Runs 100% on uncompiled code anyone can read and audit. -* You may use Superalgos as a platform or as a component of a larger system. -* No proprietary code/libraries. All open-source and free. -* Superalgos features a library of community-contributed plugins (workspaces, strategies, indicators, plotters, tutorials, etc.). +### Superalgos Platform Allows You To -## Superalgos Platform Saves You Time +- Visually design your trading strategies. +- Visually debug your trading strategies. +- Visually design your indicators. +- Visually design your plotters to visualize indicators or mined data. +- Visually design your data-mining operations. +- Download historical market data from crypto exchanges. +- Backtest your strategies against historical data. +- Run live trading sessions. +- Run arbitrary data-mining operations of any size. +- Feed your trading strategies with the data mined. +- Use your token holdings to vote and influence the direction of the project development. +- Produce real-time trading signals and send them via the p2p network. (under development) -* No need to code the download of historical data from crypto exchanges. -* No need to code the streaming of market data from crypto exchanges. -* No need to hardcode strategies. Use the visual designer for a more flexible approach. -* No need to debug what went wrong, line by line, or dive into log files with tons of data. You can see each variable of the state of the Trading Engine at every candle by hovering the mouse over the charts. -* No need to integrate a charting library, Superalgos features an integrated Charting System. -* No need to manage task data or execution dependencies. Superalgos allows you to define Tasks and distribute them across a Trading Farm and takes care of the data and execution dependencies so that each task automatically starts when their dependencies are ready. +### Superalgos Platform for Developers -## Superalgos Platform is Permissionless +- You may use Superalgos as a platform or as a component of a larger system. +- No proprietary code/libraries. All open-source and free. +- Superalgos features a library of community-contributed plugins (workspaces, strategies, indicators, plotters, tutorials, etc.). -* Don't like the UI? -* Don't like the icons used? -* Don't like the Charting System? -* Don't like the Visual Designer? -* Don't like the Visual Debugger? -* Don't like the Docs? -* Don't like the Trading Bot? -* Don't like the Indicators? -* Don't like the Plotters? -* Don't like any other part of the system? +### Superalgos Platform Saves You Time + +- No need to code the download of historical data from crypto exchanges. +- No need to code the streaming of market data from crypto exchanges. +- No need to hardcode strategies. Use the visual designer for a more flexible approach. +- No need to debug what went wrong, line by line, or dive into log files with tons of data. You can see each variable of the state of the Trading Engine at every candle by hovering the mouse over the charts. +- No need to integrate a charting library, Superalgos features an integrated Charting System. +- No need to manage task data or execution dependencies. Superalgos allows you to define Tasks and distribute them across a Trading Farm and takes care of the data and execution dependencies so that each task automatically starts when their dependencies are ready. + +### Superalgos Platform is Permissionless + +- Don't like the UI? +- Don't like the icons used? +- Don't like the Charting System? +- Don't like the Visual Designer? +- Don't like the Visual Debugger? +- Don't like the Docs? +- Don't like the Trading Bot? +- Don't like the Indicators? +- Don't like the Plotters? +- Don't like any other part of the system? No problem, code or integrate libraries with your own version of any component and we promise we will merge your work and provide it as an alternative to users. We believe in Permissionless Innovation and that users, not team members, are the final judges and the ones who decide what they prefer to use. You are free to create an alternative for any part of the system that you believe that should work or should have been done in a different way. We will help you integrate your vision into the next release and enable a way for users to choose between different implementations of the same functionality. You will also be granted the title of maintainer of the functionality you provide and have decision power on how it evolves in the future. -# Superalgos Platform for Algo-Trders +### Superalgos Platform for Algo-Trders -* Superalgos is easy to install/uninstall. -* Superalgos is easy to run. -* Superalgos is easy to use. -* Superalgos is easy to learn. -* Superalgos is easy to debug. -* Superalgos is well documented. -* You have free online support via Telegram and Discord. +- Superalgos is easy to install/uninstall. +- Superalgos is easy to run. +- Superalgos is easy to use. +- Superalgos is easy to learn. +- Superalgos is easy to debug. +- Superalgos is well documented. +- You have free online support via Telegram and Discord. -## Superalgos Platform Saves You Money +### Superalgos Platform Saves You Money -* There are no paid plans or anything that costs you money. -* There is no locked functionality. You may use the full capacity of the software. -* There is no limit to the number of backtests you may run. -* There is no limit to the number of live sessions you may run. -* There is no limit to the number of historical data you may download. -* There is no limit to the volume of data you may process. -* You may use all the plugins available (indicators, plotters, strategies, etc.) -* You may install Superalgos in as many machines as you wish. -* Your installations may be used by as many people as required. -* You may connect to as many crypto exchanges as you wish. +- There are no paid plans or anything that costs you money. +- There is no locked functionality. You may use the full capacity of the software. +- There is no limit to the number of backtests you may run. +- There is no limit to the number of live sessions you may run. +- There is no limit to the number of historical data you may download. +- There is no limit to the volume of data you may process. +- You may use all the plugins available (indicators, plotters, strategies, etc.) +- You may install Superalgos in as many machines as you wish. +- Your installations may be used by as many people as required. +- You may connect to as many crypto exchanges as you wish. -## Superalgos Platform Minimizes Risks +### Superalgos Platform Minimizes Risks -* No one can know what strategies you design/run. -* No one can front-run you. -* No one can steal your trading ideas. -* No one knows how much capital you trade. -* No one can see your exchange keys. +- No one can know what strategies you design/run. +- No one can front-run you. +- No one can steal your trading ideas. +- No one knows how much capital you trade. +- No one can see your exchange keys. -# Superalgos Platform for Companies +### Superalgos Platform for Companies -* No need to buy expensive software for monitoring crypto markets or trading execution. -* No need to hire your own developers. -* All your employees can use Superalgos for free. -* You can use Superalgos to its full capacity or just the features you are currently interested in. -* Superalgos may be integrated into your existing operation, feeding to and from other systems. -* You've got a growing community of algo-traders constantly improving the software at zero cost for you. -* You've got free online customer support via Telegram or Discord. +- No need to buy expensive software for monitoring crypto markets or trading execution. +- No need to hire your own developers. +- All your employees can use Superalgos for free. +- You can use Superalgos to its full capacity or just the features you are currently interested in. +- Superalgos may be integrated into your existing operation, feeding to and from other systems. +- You've got a growing community of algo-traders constantly improving the software at zero cost for you. +- You've got free online customer support via Telegram or Discord. -# Support +## Support We just opened a brand new [Discord server for Support and the Community](https://discord.gg/CGeKC6WQQb). We also meet on several Telegram groups, where it all started! > **BEWARE OF IMPERSONATORS — SCAMMERS ARE LURKING!** -Superalgos Admins, the Core Team, and Community Mods will never contact you directly unless you contact them first. We will never ask you for API keys, coins, or cash. In fact, we will never ask you to trust us in any way. Our [Community Safety Policy](https://superalgos.org/community-safety-policy.shtml) explains why. In short, we want to make it clear that if someone contacts you directly claiming to work with or for the project, it is a scam. Please report scammers in the Community group so that they may be banned, and to increase awareness of the problem, but also block them and report them to Telegram if the option is available. +> +> Superalgos Admins, the Core Team, and Community Mods will never contact you directly unless you contact them first. We will never ask you for API keys, coins, or cash. In fact, we will never ask you to trust us in any way. Our [Community Safety Policy](https://superalgos.org/community-safety-policy.shtml) explains why. In short, we want to make it clear that if someone contacts you directly claiming to work with or for the project, it is a scam. Please report scammers in the Community group so that they may be banned, and to increase awareness of the problem, but also block them and report them to Telegram if the option is available. -## Via Telegram +- Via Telegram + - Online support through our [Superalgos User's Support Group](https://t.me/superalgossupport). +- In-App Integrated Documentation + - Superalgos features interactive documentation built-in the system. +- Video Tutorials + - Subscribe to the [Superalgos YouTube Channel](https://www.youtube.com/channel/UCmYSGbB151xFQPNxj7KfKBg). +- In-App Tutorials + - There are many interactive tutorials you may do and learn from. -Online support through our [Superalgos User's Support Group](https://t.me/superalgossupport). +## Other Resources -## In-App Integrated Documentation +- Web Site + - For an overview of what Superalgos can do for you, check the [Superalgos Website](https://superalgos.org/). +- Telegram + - For official news, join the [Superalgos Announcements Channel](https://t.me/superalgos). + - Meet other users in the [Superalgos Telegram Community Group](https://t.me/superalgoscommunity). + - Meet developers in the [Superalgos Telegram Developer's Group](https://t.me/superalgosdevelop). + - Users meet in other topic-specific Telegram Groups. There's a [complete list of groups](https://superalgos.org/community-join.shtml) on the website. +- Blog + - Find official announcements and various articles on the [Superalgos Blog](https://medium.com/superalgos). +- Twitter + - To stay in the loop, follow [Superalgos on Twitter](https://twitter.com/superalgos). +- Facebook + - Or follow [Superalgos on Facebook](https://www.facebook.com/superalgos). -Superalgos features interactive documentation built-in the system. - -## Video Tutorials - -Subscribe to the [Superalgos YouTube Channel](https://www.youtube.com/channel/UCmYSGbB151xFQPNxj7KfKBg). - -## In-App Tutorials - -There are many interactive tutorials you may do and learn from. - -# Other Resources - -## Web Site - -For an overview of what Superalgos can do for you, check the [Superalgos Website](https://superalgos.org/). - -## Telegram - -For official news, join the [Superalgos Announcements Channel](https://t.me/superalgos). - -Meet other users in the [Superalgos Telegram Community Group](https://t.me/superalgoscommunity). - -Meet developers in the [Superalgos Telegram Developer's Group](https://t.me/superalgosdevelop). - -Users meet in other topic-specific Telegram Groups. There's a [complete list of groups](https://superalgos.org/community-join.shtml) on the website. - -## Blog - -Find official announcements and various articles on the [Superalgos Blog](https://medium.com/superalgos). - -## Twitter - -To stay in the loop, follow [Superalgos on Twitter](https://twitter.com/superalgos). - -## Facebook - -Or follow [Superalgos on Facebook](https://www.facebook.com/superalgos). - -# Contributing +## Contributing Superalgos is a Community Project built by users for users. Learn [how you may contribute](https://superalgos.org/community-contribute.shtml). -# License +## License Superalgos is open-source software released under [Apache License 2.0](LICENSE). diff --git a/package.json b/package.json index 3a908307f..ab00b7ad6 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,10 @@ "author": { "name": "Luis-Fernando-Molina" }, + "scripts": { + "start": "node platform minMemo noBrowser", + "setup": "node setup noShortcuts" + }, "dependencies": { "@octokit/rest": "^18.11.4", "ccxt": "^1.57.36", From 1cd52b8ed185e3acd72d0ab7491dc59579eaf04f Mon Sep 17 00:00:00 2001 From: ssplatt Date: Mon, 4 Oct 2021 17:25:51 -0400 Subject: [PATCH 55/82] add python to brewfile for tensorflow --- Brewfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Brewfile b/Brewfile index 7189f5aeb..fcb69d485 100644 --- a/Brewfile +++ b/Brewfile @@ -1,3 +1,4 @@ brew "git" brew "node" brew "npm" +brew "python@3.9" From f4faf0959e03a5d0f75468142218879de53b6c2e Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Tue, 5 Oct 2021 15:51:56 +0200 Subject: [PATCH 56/82] This is my contribution to Superalgos --- ...algos-006-how-to-contribute-tutorials.json | 161 +++++++++++++++--- 1 file changed, 140 insertions(+), 21 deletions(-) diff --git a/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-006-how-to-contribute-tutorials.json b/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-006-how-to-contribute-tutorials.json index aaaf88ba4..29e2f964d 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-006-how-to-contribute-tutorials.json +++ b/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-006-how-to-contribute-tutorials.json @@ -248,8 +248,8 @@ "translations": [ { "language": "ES", - "text": "Elegims enfocarnos en construirtutoriales comprensibles que todos puedan seguir y que no deje a nadie atrás. Creemos que un tutorial que va lento, cubriendo cada detalle, y tomándose el tiempo de explicar los matices es el enfoque correcto en esta etapa. Al construir tutoriales de esta manera, garantizamosque aquellos que están dispuestos a invertir tiempo en aprender el sistema tengan el material adecuado para convertirse rápidamente en usuarios poderosos.", - "updated": 1633367871109 + "text": "Elegimos enfocarnos en construirtutoriales comprensibles que todos puedan seguir y que no deje a nadie atrás. Creemos que un tutorial que va lento, cubriendo cada detalle, y tomándose el tiempo de explicar los matices es el enfoque correcto en esta etapa. Al construir tutoriales de esta manera, garantizamos que aquellos que están dispuestos a invertir tiempo en aprender el sistema tengan el material adecuado para convertirse rápidamente en usuarios poderosos.", + "updated": 1633437811992 } ] }, @@ -289,8 +289,8 @@ "translations": [ { "language": "ES", - "text": "Los tutoriales de Superalgos han evolucionado a lo largo de varios meses valiosos feedbacks de los primeros usuarios. Sentimos que hemos encontrado un modo propio, y hemos comenzado a desarrollar un estilo en el modo en que utilizamos el espacio disponible en cada paso de un tutorial. A continuaciòn algunas notas que le ayudará a construir tutoriales ue combine con el formato de los tutoriales existentes.", - "updated": 1633368515189 + "text": "Los tutoriales de Superalgos han evolucionado a lo largo de varios meses valiosos feedbacks de los primeros usuarios. Sentimos que hemos encontrado un modo propio, y hemos comenzado a desarrollar un estilo en el modo en que utilizamos el espacio disponible en cada paso de un tutorial. A continuaciòn algunas notas que le ayudará a construir tutoriales que combinen con el formato de los tutoriales existentes.", + "updated": 1633437837617 } ] }, @@ -407,16 +407,37 @@ { "style": "Text", "text": "Each tutorial step should have a single call for action, that is, a single instruction that the user must carry out. This is the ideal case scenario. There may be exceptions, for example, when we ask the user to read a page in the Docs and do something else as the main instruction.", - "updated": 1617904124728 + "updated": 1617904124728, + "translations": [ + { + "language": "ES", + "text": "Cada paso del tutorial debería tener un solo llamado a la acción, esto es, una sola instrucciòn que el usuario debe llevar a cabo. Puede haber excepciones, por ejemplo, cuando le solicitamos al usuario que lea una página en los docs y hacer algo más como la instrucción principal.", + "updated": 1633438088497 + } + ] }, { "style": "Success", "text": "In general terms and when possible, try to avoid giving the user more than one task on the same step. Instead, if you expect the user to perform several sequential actions, try to split the process into more than one step — as many as it takes.", - "updated": 1617904133804 + "updated": 1617904133804, + "translations": [ + { + "language": "ES", + "text": "En términos generales y cuando es posible, intente evitar darle al usuario más de una tarea en el mismo paso. En vez de eso, si espera que el usuario haga varias acciones secuencialmente, intente repartir el proceso en más de un paso — tantos como sean necesarios.", + "updated": 1633438316138 + } + ] }, { "style": "Text", - "text": "In some cases, you may need the user to take a very simple action so that the main call for action may be delivered. In such cases, you may use the definition box to tell the user how to get ready to execute the call for action delivered later in the page." + "text": "In some cases, you may need the user to take a very simple action so that the main call for action may be delivered. In such cases, you may use the definition box to tell the user how to get ready to execute the call for action delivered later in the page.", + "translations": [ + { + "language": "ES", + "text": "En algunos casos, puede necesitar que el usuario haga una acción muy simple para que el principal llamado a la acción pueda realizarse. En esos casos, puede utilizar la definition box para decirle al usuario como estar listo para ejecutar el llamado a la acción, que será entregado mas adelante en la ´pagina.", + "updated": 1633438618455 + } + ] }, { "style": "Subtitle", @@ -426,25 +447,60 @@ { "style": "Text", "text": "Colorful tutorial steps look great, while a white pages full of text feel too much like non-interactive documentation. Makes sure you break the monotony with the four different styles of boxes:", - "updated": 1617906625458 + "updated": 1617906625458, + "translations": [ + { + "language": "ES", + "text": "Pasos de tutoriales coloridos se ven muy bien, mientras que las páginas blancas llenas de texto se sienten como documentación muy poco interactiva. Asegúrese de romper la monotonía con los cuatro estilos diferentes de boxes.", + "updated": 1633438835567 + } + ] }, { "style": "Success", - "text": "This is great for additional tips." + "text": "This is great for additional tips.", + "translations": [ + { + "language": "ES", + "text": "Esto es genial para tips adicionales.", + "updated": 1633438870414 + } + ] }, { "style": "Note", - "text": "Use this every once in a while to break up otherwise large sections of plain text." + "text": "Use this every once in a while to break up otherwise large sections of plain text.", + "translations": [ + { + "language": "ES", + "text": "Use este cada tanto para romper secciones grandes de puro texto.", + "updated": 1633439032601 + } + ] }, { "style": "Important", "text": "Leave this box for the truly important stuff. Things you don't want users to overlook or forget.", - "updated": 1617906591147 + "updated": 1617906591147, + "translations": [ + { + "language": "ES", + "text": "Deje esta box para cosas verdaderamente importantes. Cosas que no quiere que los usuarios se pasen por alto o se olviden.", + "updated": 1633439143351 + } + ] }, { "style": "Warning", "text": "And this one, save it for real warnings. Things that may represent a threat or risk.", - "updated": 1617906578635 + "updated": 1617906578635, + "translations": [ + { + "language": "ES", + "text": "Y esta otra, guárdela para advertencias reales. Cosas que pueden representar una amenaza o un riesgo.", + "updated": 1633439239739 + } + ] }, { "style": "Title", @@ -453,17 +509,38 @@ { "style": "Text", "text": "When you need the user to learn about a specific concept to get the proper context on the subject, do not replicate in the tutorial information that exists in the Docs. Duplicating information is not a good idea, as it makes it harder to maintain the Docs and tutorials.", - "updated": 1617730695174 + "updated": 1617730695174, + "translations": [ + { + "language": "ES", + "text": "Cuando necesite que el usuario aprenda un concepto específico para obtener un contexto adecuado del tema, no repita en el tutorial la información que ya existe en los Docs. Duplicar la información no es una buena idea, ya que hace mas difícil mantener los Docs y los tutoriales.", + "updated": 1633439488393 + } + ] }, { "style": "Success", "text": "Asking the user to read a page or a section of a page in the Docs is the correct approach. This has the added benefit of making the user aware that the Docs cover the topic too.", - "updated": 1617724009821 + "updated": 1617724009821, + "translations": [ + { + "language": "ES", + "text": "Pedirle al usuario leer una página o una parte de la página en los Docs es el acercamiento adecado. Esto tiene el beneficio adicional de hacer que el usuario se de cuenta de que los Docs también cubren el tópico.", + "updated": 1633439691786 + } + ] }, { "style": "Important", "text": "If you find that the relevant page in the Docs is outdated, doesn't cover the topic with the appropriate depth, or maybe even doesn't exist, helping create, complete, and/or improve the delivery of the information in the Docs is just as valuable as building the tutorial! Long format explanations do not fit well in tutorials. They do fit well in the Docs!", - "updated": 1617733203373 + "updated": 1617733203373, + "translations": [ + { + "language": "ES", + "text": "Si encuentra que la página relevante de los Docs está desactualizada, no cubre el tópico con la profundidad apropiada, o puede que no exista, ayudar a crearla, completar, y/o mejorar el envio de la información en los Docs es tan valioso como construir el tutorial! Explicaciones en formato largo no encajan bien con los tutoriales. Ellas van bien en los Docs!", + "updated": 1633440056942 + } + ] }, { "style": "Title", @@ -473,32 +550,74 @@ { "style": "Text", "text": "The whole point of tutorials — and the main difference with the Docs as learning material — is that they offer the opportunity for hands-on learning. Tutorials are interactive while the Docs are less so!", - "updated": 1617730782624 + "updated": 1617730782624, + "translations": [ + { + "language": "ES", + "text": "El punto de los tutoriales — y la diferencia principal con los Docs como material de aprendizaje — es que ellos ofrecen la oportunidad para el aprendizaje práctico Los tutoriales son interactivos mientras que los Docs no tanto!", + "updated": 1633440286430 + } + ] }, { "style": "Callout", "text": "Make sure you use this quality to the fullest, but also try to maintain a certain balance!", - "updated": 1617725782977 + "updated": 1617725782977, + "translations": [ + { + "language": "ES", + "text": "Asegúrese de usar esta cualidad a máximo, pero tambien intente mantener un cierto balance!", + "updated": 1633440365877 + } + ] }, { "style": "List", "text": "If the tutorial is talking about a hierarchy, a group of nodes, or a particular node, make sure that the tutorial step takes you to that place in the Workspace. This adds a visual element to the explanation and helps the user get familiar with the data structures involved.", - "updated": 1617725808080 + "updated": 1617725808080, + "translations": [ + { + "language": "ES", + "text": "Si el tutorial está hablando de jerarquías, un grupo de nodos en particular, asegúrese que el paso del tutorial lo lleve a ese lugar en el Workspace. Esto agrega un elemento visual a la explaicación y ayuda al usuario a familiarizarse con la estructura de datos involucrada.", + "updated": 1633440573331 + } + ] }, { "style": "List", "text": "Tutorials can affect the Workspace in many ways replicating actions the user may do. When you want the user to learn to do something, it's best to ask the user to do it, instead of having the tutorial do it for the user.", - "updated": 1617733271488 + "updated": 1617733271488, + "translations": [ + { + "language": "ES", + "text": "Los tutoriales pueden afectar al Workspace de muchas maneras replicando acciones que el usuario puede hacer. Cuando quiere que el usuario aprenda a hacer algo, lo mejor es pedirle al usuario que lo haga, en vez de que el tutorial lo haga por él.", + "updated": 1633440813684 + } + ] }, { "style": "List", "text": "On the other hand, the tutorial should take care of doing certain things that are not conducive to learning something relevant to the context of the tutorial. Performing these actions directly may help keep the user focused on what matters most.", - "updated": 1617733297397 + "updated": 1617733297397, + "translations": [ + { + "language": "ES", + "text": "Por otro lado, el tutorial debería cuidar de no hacer cosas que no lleven a aprender nada reevante del contexto del tutorial. Realizar estas acciones directamente puede ayudar a mantener al usuario concentrado en lo que más importa.", + "updated": 1633440988592 + } + ] }, { "style": "List", "text": "In some cases, the actions users take may have certain effects. Showing users the outcome of their actions immediately after completing a task has a great educational value. For example, if the user is setting up a new Time Machine in a tutorial about the Charting Space, show users how the time machine appears in the charting space immediately after creating it. If users then set up a Timeline Chart that references a particular Data Mine, show users how the new Timeline Chart appears within the Time Machine, and let them verify that the expected layer managers are there. Don't be afraid to go back and forth... that is the whole point after all!", - "updated": 1617905020985 + "updated": 1617905020985, + "translations": [ + { + "language": "ES", + "text": "En algunos casos, las acciones que los usuarios realizan tienene efectos determinados. Mostrales a los usuarios los resultados de sus acciones inmediatamente después de haber completado una tarea es de gran valor educativo. Por ejemplo, si el usuarioestá configurando una nueva Time Machine en un tutorial a cerca de el Charting Space, mostrale a a os usuarios como la time machine aparece en el charting space inmediatamente después de crearla. Si los usuarios configuran una Timeline Chart que referencia a una particular Data Mine, mostrarles a los usuarios como la nueva Timeline Chart aparece dentro de la Time Machine, y permitéles verificar que los administradores de capas esperados están allí. no tengas miedo de ir hacia atrás y hacia adelante... Ese es el punto después de todo!", + "updated": 1633441873892 + } + ] }, { "style": "Title", From 03d177f7a7fa0e49e8e73dcbb1dae315c5f8b544 Mon Sep 17 00:00:00 2001 From: eNut Date: Tue, 5 Oct 2021 19:23:46 +0200 Subject: [PATCH 57/82] User Profile [e-Nut] --- .../Plugins/User-Profiles/e-Nut.json | 484 ++++++++++++++++++ 1 file changed, 484 insertions(+) create mode 100644 Projects/Governance/Plugins/User-Profiles/e-Nut.json diff --git a/Projects/Governance/Plugins/User-Profiles/e-Nut.json b/Projects/Governance/Plugins/User-Profiles/e-Nut.json new file mode 100644 index 000000000..fc875dd70 --- /dev/null +++ b/Projects/Governance/Plugins/User-Profiles/e-Nut.json @@ -0,0 +1,484 @@ +{ + "type": "User Profile", + "name": "e-Nut", + "config": "{\"signature\":{\"message\":\"e-Nut\",\"messageHash\":\"0x391566b832958cdd76a1114e8009973a8cba55a94524611fe26a3293525d4ef0\",\"v\":\"0x1b\",\"r\":\"0xb552111b525c267ea45f4159c30d84057fdb0cb3b9fb823cd4d461010e1512f5\",\"s\":\"0x6a94ebd9dadc8e8e8c3a592d7f38d8b6db113e5b418e17db062e52cb2b02e3b1\",\"signature\":\"0xb552111b525c267ea45f4159c30d84057fdb0cb3b9fb823cd4d461010e1512f56a94ebd9dadc8e8e8c3a592d7f38d8b6db113e5b418e17db062e52cb2b02e3b11b\"},\"codeName\":\"e-Nut\"}", + "project": "Governance", + "tokenPowerSwitch": { + "type": "Token Power Switch", + "name": "New Token Power Switch", + "config": "{}", + "project": "Governance", + "tokenPowerSwitch": [], + "onboardingPrograms": { + "type": "Onboarding Programs", + "name": "New Onboarding Programs", + "config": "{}", + "project": "Governance", + "airdropProgram": { + "type": "Airdrop Program", + "name": "New Airdrop Program", + "config": "{}", + "project": "Governance", + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "186fa601-83ec-46e9-98b9-7957068b15ab", + "savedPayload": { + "position": { + "x": 27546.666666666668, + "y": 11259.577136594007 + }, + "targetPosition": { + "x": 27396.666666666668, + "y": 11519.384757729338 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5d2978f1-b8c6-4e49-b836-dcb024a3b2d9", + "savedPayload": { + "position": { + "x": 27396.666666666668, + "y": 11519.384757729338 + }, + "targetPosition": { + "x": 27246.666666666668, + "y": 11779.192378864669 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "f26b4f62-fadb-40cd-b4ea-107878a14f8d", + "savedPayload": { + "position": { + "x": 27246.666666666668, + "y": 11779.192378864669 + }, + "targetPosition": { + "x": 27096.666666666668, + "y": 12039 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "communityBuildingPrograms": { + "type": "Community Building Programs", + "name": "New Community Building Programs", + "config": "{}", + "project": "Governance", + "referralProgram": { + "type": "Referral Program", + "name": "New Referral Program", + "config": "{}", + "project": "Governance", + "userReferrers": [ + { + "type": "User Referrer", + "name": "Julian-Molina", + "config": "{}", + "project": "Governance", + "id": "cbd265e8-6901-4b39-a32e-90f1f4ceda27", + "savedPayload": { + "position": { + "x": 27356.474287802, + "y": 11889 + }, + "targetPosition": { + "x": 27506.474287802, + "y": 12148.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "User Profile", + "name": "Julian-Molina", + "id": "b85aaac1-0708-4aec-97f9-bc3cc70e530a" + }, + "referenceParentCombinedNodePath": [ + [ + "Julian-Molina", + "User Profile" + ] + ] + } + } + ], + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "069b44d4-275d-4ad9-bf50-d544ef068122", + "savedPayload": { + "position": { + "x": 27766.281908937333, + "y": 11998.807621135331 + }, + "targetPosition": { + "x": 27506.474287802, + "y": 12148.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensBonus": { + "type": "Tokens Bonus", + "name": "New Tokens Bonus", + "project": "Governance", + "id": "bdae17d6-383e-4c20-b854-69247d60a6f9", + "savedPayload": { + "position": { + "x": 27656.474287802, + "y": 12408.615242270662 + }, + "targetPosition": { + "x": 27506.474287802, + "y": 12148.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "3484dfef-3061-4b14-93e4-fdbed11c85f6", + "savedPayload": { + "position": { + "x": 27506.474287802, + "y": 12148.807621135331 + }, + "targetPosition": { + "x": 27246.666666666668, + "y": 12298.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "supportProgram": { + "type": "Support Program", + "name": "New Support Program", + "config": "{}", + "project": "Governance", + "userSupporters": [], + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "3baa7948-daa7-4df9-8d80-64f8ac14b499", + "savedPayload": { + "position": { + "x": 27696.666666666668, + "y": 12558.615242270662 + }, + "targetPosition": { + "x": 27396.666666666668, + "y": 12558.615242270662 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensBonus": { + "type": "Tokens Bonus", + "name": "New Tokens Bonus", + "project": "Governance", + "id": "d2e96c0e-abf6-4772-8e24-15af688d8bbf", + "savedPayload": { + "position": { + "x": 27246.666666666668, + "y": 12818.422863405993 + }, + "targetPosition": { + "x": 27396.666666666668, + "y": 12558.615242270662 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "8496db7f-2de2-4b9c-b6ed-28a615a81175", + "savedPayload": { + "position": { + "x": 27396.666666666668, + "y": 12558.615242270662 + }, + "targetPosition": { + "x": 27246.666666666668, + "y": 12298.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "mentorshipProgram": { + "type": "Mentorship Program", + "name": "New Mentorship Program", + "config": "{}", + "project": "Governance", + "userMentors": [], + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "6e18bbd4-adab-4a62-b6bc-76b3b173b0cb", + "savedPayload": { + "position": { + "x": 26986.859045531335, + "y": 12748.807621135331 + }, + "targetPosition": { + "x": 26986.859045531335, + "y": 12448.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensBonus": { + "type": "Tokens Bonus", + "name": "New Tokens Bonus", + "project": "Governance", + "id": "db7aa9b6-e13e-4ff5-8f8b-4917f370f1fa", + "savedPayload": { + "position": { + "x": 26727.051424396002, + "y": 12298.807621135331 + }, + "targetPosition": { + "x": 26986.859045531335, + "y": 12448.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "c08965ff-0f15-4e81-8ab9-40b005aa535d", + "savedPayload": { + "position": { + "x": 26986.859045531335, + "y": 12448.807621135331 + }, + "targetPosition": { + "x": 27246.666666666668, + "y": 12298.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "2af4c1ba-46e6-4edd-bec8-fe919314610e", + "savedPayload": { + "position": { + "x": 27246.666666666668, + "y": 12298.807621135331 + }, + "targetPosition": { + "x": 27096.666666666668, + "y": 12039 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "24b6e856-b17a-4bee-a7c4-d3faef24de7b", + "savedPayload": { + "position": { + "x": 27096.666666666668, + "y": 12039 + }, + "targetPosition": { + "x": 26796.666666666668, + "y": 12039 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensMined": { + "type": "Tokens Mined", + "name": "New Tokens Mined", + "project": "Governance", + "id": "5e228ba9-e577-46b7-88a6-90b88595c11a", + "savedPayload": { + "position": { + "x": 26496.666666666668, + "y": 12039 + }, + "targetPosition": { + "x": 26796.666666666668, + "y": 12039 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "9d54ff41-1328-4e8b-b7b3-e71a5b0404df", + "savedPayload": { + "position": { + "x": 26796.666666666668, + "y": 12039 + }, + "targetPosition": { + "x": 26796.666666666668, + "y": 12039 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } +} \ No newline at end of file From 89fdec328f08a499e25bc28fcf1ad7b1c7932b67 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 6 Oct 2021 11:17:07 +0200 Subject: [PATCH 58/82] Action Switches Fixed --- .../Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js | 2 +- Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js | 2 +- Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Projects/Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js b/Projects/Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js index bbbfa98a0..c45e2c3fb 100644 --- a/Projects/Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js @@ -1,4 +1,4 @@ -function newEducationActionSwitch() { +function newAlgorithmicTradingActionSwitch() { let thisObject = { executeAction: executeAction, diff --git a/Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js b/Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js index b9e671c27..9a00f8ac1 100644 --- a/Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js @@ -1,4 +1,4 @@ -function newEducationActionSwitch() { +function newDataMiningActionSwitch() { let thisObject = { executeAction: executeAction, diff --git a/Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js b/Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js index e417e8bf5..a03c5d97f 100644 --- a/Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js @@ -1,4 +1,4 @@ -function newEducationActionSwitch() { +function newMachineLearningActionSwitch() { let thisObject = { executeAction: executeAction, From e98fb2063a84cfde89bd826043d661c74b7ed558 Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Wed, 6 Oct 2021 11:41:58 +0200 Subject: [PATCH 59/82] This is my contribution to Superalgos --- .../Token-Power-Switch/token-power-switch.json | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Projects/Governance/Schemas/Docs-Nodes/T/Token/Token-Power-Switch/token-power-switch.json b/Projects/Governance/Schemas/Docs-Nodes/T/Token/Token-Power-Switch/token-power-switch.json index 3070ba9fa..37702aafa 100644 --- a/Projects/Governance/Schemas/Docs-Nodes/T/Token/Token-Power-Switch/token-power-switch.json +++ b/Projects/Governance/Schemas/Docs-Nodes/T/Token/Token-Power-Switch/token-power-switch.json @@ -2,7 +2,14 @@ "type": "Token Power Switch", "definition": { "text": "The concept of a switch may be used throughout the different programs in the User Profile hierarchy. A switch is a device used to distribute the flow of Token Power to offspring nodes. In the case of the Token Power Switch, it is the sole offspring node of the User Profile hierarchy used to distribute Token Power to the different programs.", - "updated": 1630094625909 + "updated": 1630094625909, + "translations": [ + { + "language": "ES", + "text": "El concepto de un interruptor puede usarse a través de diferentes programas en la jearquía en el User Profile. Un interruptor es un dispsitivo usado para contribuir en el flujo del Token Power a los nodos de la descendencia. En el caso del Token Power Switch, es el único nodo descendiente de la jerarquía del User Profile usada para distribuir Token Power a los diferentes programas.", + "updated": 1633513107006 + } + ] }, "paragraphs": [ { @@ -13,7 +20,14 @@ { "style": "Note", "text": "Most nodes in the hierarchy act as switches, even when their name does not include the word switch!", - "updated": 1630094810003 + "updated": 1630094810003, + "translations": [ + { + "language": "ES", + "text": "La mayoría de los nodos de la jerarquía actúan como interruptores, aún cuando su nombre no incluya la palabra interruptor!", + "updated": 1633513212883 + } + ] }, { "style": "Block", From 259396c20568ac1c4c86eeae0ab940b61fa5049e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 6 Oct 2021 11:49:51 +0200 Subject: [PATCH 60/82] conflicts Project Schema Solved --- Projects/ProjectsSchema.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index 3c6cb5d05..ae089280b 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -774,6 +774,13 @@ "functionName": "newFoundationsBotModulesSlackBot", "fileName": "SlackBot.js", "folderName": "Trading-Bot/Announcements" + }, + { + "name": "Twitter Bot", + "propertyName": "twitterBot", + "functionName": "newFoundationsBotModulesTwitterBot", + "fileName": "TwitterBot.js", + "folderName": "Trading-Bot/Announcements" } ] }, From 0fd12e1f1abf90d077e03fe3cdbe15af721ae8a9 Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Wed, 6 Oct 2021 12:24:17 +0200 Subject: [PATCH 61/82] This is my contribution to Superalgos --- .../onboarding-programs.json | 36 ++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/Projects/Governance/Schemas/Docs-Nodes/O/Onboarding/Onboarding-Programs/onboarding-programs.json b/Projects/Governance/Schemas/Docs-Nodes/O/Onboarding/Onboarding-Programs/onboarding-programs.json index e1b3a9d30..93ccbdca4 100644 --- a/Projects/Governance/Schemas/Docs-Nodes/O/Onboarding/Onboarding-Programs/onboarding-programs.json +++ b/Projects/Governance/Schemas/Docs-Nodes/O/Onboarding/Onboarding-Programs/onboarding-programs.json @@ -2,7 +2,14 @@ "type": "Onboarding Programs", "definition": { "text": "These programs incentivize Superalgos users to take the first couple of steps to participate in governance and start giving back to the project. They make earning the first few tokens a breeze and allow everyone to become invested in the Superalgos SA Token! We are talking about the Airdrop Program and the Github Program.", - "updated": 1630216446725 + "updated": 1630216446725, + "translations": [ + { + "language": "ES", + "text": "Estos programas incentivan a los usuarios de Superalgos a realizar los primeros pasos para participar en la gorvernanza y comenzar a devolver al proyecto. Ellos hacen ganar los primeros pocos token como una brisa y permite que todos se involucren en los Superalgos SA Token! Estamos hablando del the Airdrop Program y el Github Program.", + "updated": 1633515446793 + } + ] }, "paragraphs": [ { @@ -13,16 +20,37 @@ { "style": "Success", "text": "Learn more about how Token Power Flows into these programs!", - "updated": 1630228322651 + "updated": 1630228322651, + "translations": [ + { + "language": "ES", + "text": "Aprende más a cerca de como fluye el Token Power Flows dentro de los programas!", + "updated": 1633515500934 + } + ] }, { "style": "Text", - "text": "What these two programs have in common is that they don't require Token Power to function. That is, even if you have zero Superalgos SA Tokens and zero Delegated Power, you may still participate to earn your first few tokens!" + "text": "What these two programs have in common is that they don't require Token Power to function. That is, even if you have zero Superalgos SA Tokens and zero Delegated Power, you may still participate to earn your first few tokens!", + "translations": [ + { + "language": "ES", + "text": "Lo que tienen estos dos programas en común es que no requieren de Token Power para funcionar. Esto es, aún si tiene cero Superalgos SA Tokens y cero Delegated Power, aún puede participar para ganar los primeros pocos tokens!", + "updated": 1633515674124 + } + ] }, { "style": "Callout", "text": "All you need to do to participate is spawn each of the program nodes and submit your User Profile!", - "updated": 1630228214813 + "updated": 1630228214813, + "translations": [ + { + "language": "ES", + "text": "Todo lo que necesita hacer para participar es generar cada uno cada uno de los nodos del programa y crear su User Profile!", + "updated": 1633515800198 + } + ] }, { "style": "Block", From b3d9a3cc80cf28162cd831ab657deb4dcae536ad Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 6 Oct 2021 12:28:38 +0200 Subject: [PATCH 62/82] conflicts on file CircularMenuItem.js solved --- .../UI/Spaces/Floating-Space/CircularMenuItem.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js b/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js index 81cb8a5f3..9f4a3e5d8 100644 --- a/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js +++ b/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js @@ -111,6 +111,10 @@ function newCircularMenuItem() { iconPhysics() + if (thisObject.icon === undefined) { + console.log('[ERROR] newCircularMenuItem -> initialize -> err = Icon not found, Action: "' + thisObject.action + '", relatedUiObject: "' + thisObject.relatedUiObject +'", label: "' + thisObject.label + '"') + } + selfMouseOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) selfMouseClickEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseClick', onMouseClick) selfMouseNotOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver) @@ -495,6 +499,10 @@ function newCircularMenuItem() { iconSize = UI.projects.foundations.spaces.floatingSpace.style.node.menuItem.imageSize } + if (thisObject.icon === undefined) { + thisObject.icon = UI.projects.foundations.spaces.designSpace.getIconByProjectAndName('Foundations', 'missing-image') + } + if (thisObject.icon !== undefined) { if (thisObject.icon.canDrawIcon === true && thisObject.currentRadius > 1 && thisObject.isDeployed === true) { browserCanvasContext.drawImage(thisObject.icon, menuPosition.x - iconSize, menuPosition.y - iconSize, iconSize * 2, iconSize * 2) From c6748a84665f6a307f087f0dd97728b02c2055a6 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 6 Oct 2021 12:34:08 +0200 Subject: [PATCH 63/82] conflicts on file trading and learning session functions solved --- .../UI/Function-Libraries/TradingSessionFunctions.js | 2 +- .../UI/Function-Libraries/LearningSessionFunctions.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Projects/Algorithmic-Trading/UI/Function-Libraries/TradingSessionFunctions.js b/Projects/Algorithmic-Trading/UI/Function-Libraries/TradingSessionFunctions.js index 078044e5d..657af61b0 100644 --- a/Projects/Algorithmic-Trading/UI/Function-Libraries/TradingSessionFunctions.js +++ b/Projects/Algorithmic-Trading/UI/Function-Libraries/TradingSessionFunctions.js @@ -155,7 +155,7 @@ function newAlgorithmicTradingFunctionLibraryTradingSessionFunctions() { 'Backtesting Session->Paper Trading Session->Forward Testing Session->Live Trading Session->' + 'Trading Parameters->' + 'Session Base Asset->Session Quoted Asset->Time Range->Time Frame->Slippage->Fee Structure->Snapshots->Heartbeats->User Defined Parameters->' + - 'Social Bots->Telegram Bot->Discord Bot->Slack Bot->' + + 'Social Bots->Telegram Bot->Discord Bot->Slack Bot->Twitter Bot->' + 'Social Bot Command->Formula->' + 'Exchange Account Asset->Asset->' diff --git a/Projects/Machine-Learning/UI/Function-Libraries/LearningSessionFunctions.js b/Projects/Machine-Learning/UI/Function-Libraries/LearningSessionFunctions.js index b8440de23..878656d4d 100644 --- a/Projects/Machine-Learning/UI/Function-Libraries/LearningSessionFunctions.js +++ b/Projects/Machine-Learning/UI/Function-Libraries/LearningSessionFunctions.js @@ -131,7 +131,7 @@ function newMachineLearningFunctionLibraryLearningSessionFunctions() { 'Back Learning Session->Live Learning Session->' + 'Learning Parameters->' + 'Learning Algorithm->Time Range->Time Frame->Heartbeats->User Defined Parameters->' + - 'Social Bots->Telegram Bot->Discord Bot->Slack Bot->' + 'Social Bots->Telegram Bot->Discord Bot->Slack Bot->Twitter Bot ->' let session = UI.projects.foundations.functionLibraries.protocolNode.getProtocolNode(node, false, true, true, false, false, lightingPath) From 540f18cd694d96ce8e507d75011988246525bc76 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 6 Oct 2021 12:35:39 +0200 Subject: [PATCH 64/82] ProjectSchema Beta 12 --- Projects/ProjectsSchema.json | 760 +++++++++++++++++++---------------- 1 file changed, 413 insertions(+), 347 deletions(-) diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index 7aa96d8da..ae089280b 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -1,4 +1,245 @@ [ + { + "name": "Algorithmic-Trading", + "propertyName": "algorithmicTrading", + "UI": { + "functionLibraries": [ + { + "name": "Trading Session Functions", + "propertyName": "tradingSessionFunctions", + "functionName": "newAlgorithmicTradingFunctionLibraryTradingSessionFunctions" + } + ] + }, + "TS": { + "botModules": [ + { + "name": "Single Market Trading Bot", + "propertyName": "singleMarketTradingBot", + "functionName": "newAlgorithmicTradingBotModulesSingleMarketTradingBot", + "fileName": "SingleMarketTradingBot.js", + "folderName": "Trading-Bot", + "botType": "Trading Bot" + }, + { + "name": "Trading Session", + "propertyName": "tradingSession", + "functionName": "newAlgorithmicTradingBotModulesTradingSession", + "fileName": "TradingSession.js", + "folderName": "Trading-Bot" + }, + { + "name": "Trading Process", + "propertyName": "tradingProcess", + "functionName": "newAlgorithmicTradingBotModulesTradingProcess", + "fileName": "TradingProcess.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Engine", + "propertyName": "tradingEngine", + "functionName": "newAlgorithmicTradingBotModulesTradingEngine", + "fileName": "TradingEngine.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Output", + "propertyName": "tradingOutput", + "functionName": "newAlgorithmicTradingBotModulesTradingOutput", + "fileName": "TradingOutput.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Simulation", + "propertyName": "tradingSimulation", + "functionName": "newAlgorithmicTradingBotModulesTradingSimulation", + "fileName": "TradingSimulation.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Episode", + "propertyName": "tradingEpisode", + "functionName": "newAlgorithmicTradingBotModulesTradingEpisode", + "fileName": "TradingEpisode.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Records", + "propertyName": "tradingRecords", + "functionName": "newAlgorithmicTradingBotModulesTradingRecords", + "fileName": "TradingRecords.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading System", + "propertyName": "tradingSystem", + "functionName": "newAlgorithmicTradingBotModulesTradingSystem", + "fileName": "TradingSystem.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Stages", + "propertyName": "tradingStages", + "functionName": "newAlgorithmicTradingBotModulesTradingStages", + "fileName": "TradingStages.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Strategy", + "propertyName": "tradingStrategy", + "functionName": "newAlgorithmicTradingBotModulesTradingStrategy", + "fileName": "TradingStrategy.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Execution", + "propertyName": "tradingExecution", + "functionName": "newAlgorithmicTradingBotModulesTradingExecution", + "fileName": "TradingExecution.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Position", + "propertyName": "tradingPosition", + "functionName": "newAlgorithmicTradingBotModulesTradingPosition", + "fileName": "TradingPosition.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Snapshots", + "propertyName": "snapshots", + "functionName": "newAlgorithmicTradingBotModulesSnapshots", + "fileName": "Snapshots.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Orders", + "propertyName": "tradingOrders", + "functionName": "newAlgorithmicTradingBotModulesTradingOrders", + "fileName": "TradingOrders.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Orders Simulations", + "propertyName": "ordersSimulations", + "functionName": "newAlgorithmicTradingBotModulesOrdersSimulations", + "fileName": "OrdersSimulations.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Orders Calculations", + "propertyName": "ordersCalculations", + "functionName": "newAlgorithmicTradingBotModulesOrdersCalculations", + "fileName": "OrdersCalculations.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Exchange API", + "propertyName": "exchangeAPI", + "functionName": "newAlgorithmicTradingBotModulesExchangeAPI", + "fileName": "ExchangeAPI.js", + "folderName": "Trading-Bot/Low-Frequency-Trading/APIs" + } + ] + }, + "plugins": [ + "Trading Mines", + "Trading Systems", + "Trading Engines" + ], + "tasks": [ + "Trading Tasks" + ] + }, + { + "name": "Machine-Learning", + "propertyName": "machineLearning", + "UI": { + "functionLibraries": [ + { + "name": "Learning Session Functions", + "propertyName": "learningSessionFunctions", + "functionName": "newMachineLearningFunctionLibraryLearningSessionFunctions" + } + ] + }, + "TS": { + "botModules": [ + { + "name": "Single Market Learning Bot", + "propertyName": "singleMarketLearningBot", + "functionName": "newMachineLearningBotModulesSingleMarketLearningBot", + "fileName": "SingleMarketLearningBot.js", + "folderName": "Learning-Bot", + "botType": "Learning Bot" + }, + { + "name": "Learning Session", + "propertyName": "learningSession", + "functionName": "newMachineLearningBotModulesLearningSession", + "fileName": "LearningSession.js", + "folderName": "Learning-Bot" + }, + { + "name": "Learning Process", + "propertyName": "learningProcess", + "functionName": "newMachineLearningBotModulesLearningProcess", + "fileName": "LearningProcess.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning Engine", + "propertyName": "learningEngine", + "functionName": "newMachineLearningBotModulesLearningEngine", + "fileName": "LearningEngine.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning Output", + "propertyName": "learningOutput", + "functionName": "newMachineLearningBotModulesLearningOutput", + "fileName": "LearningOutput.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning Simulation", + "propertyName": "learningSimulation", + "functionName": "newMachineLearningBotModulesLearningSimulation", + "fileName": "LearningSimulation.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning Episode", + "propertyName": "learningEpisode", + "functionName": "newMachineLearningBotModulesLearningEpisode", + "fileName": "LearningEpisode.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning Records", + "propertyName": "learningRecords", + "functionName": "newMachineLearningBotModulesLearningRecords", + "fileName": "LearningRecords.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning System", + "propertyName": "learningSystem", + "functionName": "newMachineLearningBotModulesLearningSystem", + "fileName": "LearningSystem.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + } + ] + }, + "plugins": [ + "Learning Mines", + "Learning Systems", + "Learning Engines" + ], + "tasks": [ + "Learning Tasks" + ] + }, { "name": "Foundations", "propertyName": "foundations", @@ -71,26 +312,11 @@ "propertyName": "taskFunctions", "functionName": "newFoundationsFunctionLibraryTaskFunctions" }, - { - "name": "Trading Session Functions", - "propertyName": "tradingSessionFunctions", - "functionName": "newFoundationsFunctionLibraryTradingSessionFunctions" - }, - { - "name": "Learning Session Functions", - "propertyName": "learningSessionFunctions", - "functionName": "newFoundationsFunctionLibraryLearningSessionFunctions" - }, { "name": "Crypto Ecosystem Functions", "propertyName": "cryptoEcosystemFunctions", "functionName": "newFoundationsFunctionLibraryCryptoEcosystemFunctions" }, - { - "name": "Mine Functions", - "propertyName": "mineFunctions", - "functionName": "newFoundationsFunctionLibraryMineFunctions" - }, { "name": "Data Storage Functions", "propertyName": "dataStorageFunctions", @@ -101,11 +327,6 @@ "propertyName": "chartingSpaceFunctions", "functionName": "newFoundationsFunctionLibraryChartingSpaceFunctions" }, - { - "name": "Plugins Functions", - "propertyName": "pluginsFunctions", - "functionName": "newFoundationsFunctionLibraryPluginsFunctions" - }, { "name": "Workspace Functions", "propertyName": "workspaceFunctions", @@ -207,11 +428,6 @@ "name": "Status Bar", "propertyName": "statusBar", "functionName": "newFoundationsUtilitiesStatusBar" - }, - { - "name": "Plugins", - "propertyName": "plugins", - "functionName": "newFoundationsUtilitiesPlugins" } ], "spaces": [ @@ -525,127 +741,11 @@ ], "botModules": [ { - "name": "Single Market Sensor Bot", - "propertyName": "singleMarketSensorBot", - "functionName": "newFoundationsBotModulesSingleMarketSensorBot", - "fileName": "SingleMarketSensorBot.js", - "folderName": "Sensor-Bot", - "botType": "Sensor Bot" - }, - { - "name": "Exchange Raw Data Historic OHLCVs", - "propertyName": "historicOHLCVs", - "functionName": "newFoundationsBotModulesHistoricOHLCVs", - "fileName": "HistoricOHLCVs.js", - "folderName": "Sensor-Bot/Exchange-Raw-Data" - }, - { - "name": "Webhooks Check Webhook", - "propertyName": "checkWebhook", - "functionName": "newFoundationsBotModulesCheckWebhook", - "fileName": "CheckWebhook.js", - "folderName": "Sensor-Bot/Webhooks" - }, - { - "name": "Single Market API Data Fetcher Bot", - "propertyName": "singleMarketAPIDataFetcherBot", - "functionName": "newFoundationsBotModulesSingleMarketAPIDataFetcherBot", - "fileName": "SingleMarketAPIDataFetcherBot.js", - "folderName": "API-Data-Fetcher-Bot", - "botType": "API Data Fetcher Bot" - }, - { - "name": "API Data Fetcher Fetching Process", - "propertyName": "fetchingProcess", - "functionName": "newFoundationsBotModulesFetchingProcess", - "fileName": "FetchingProcess.js", - "folderName": "API-Data-Fetcher-Bot" - }, - { - "name": "Single Market Indicator Bot", - "propertyName": "singleMarketIndicatorBot", - "functionName": "newFoundationsBotModulesSingleMarketIndicatorBot", - "fileName": "SingleMarketIndicatorBot.js", - "folderName": "Indicator-Bot", - "botType": "Indicator Bot" - }, - { - "name": "Candles Volumes Multi Time Frame Daily", - "propertyName": "candlesVolumesMultiTimeFrameDaily", - "functionName": "newFoundationsBotModulesCandlesVolumesMultiTimeFrameDaily", - "fileName": "CandlesVolumesMultiTimeFrameDaily.js", - "folderName": "Indicator-Bot/Candles-Volumes" - }, - { - "name": "Candles Volumes Multi Time Frame Market", - "propertyName": "candlesVolumesMultiTimeFrameMarket", - "functionName": "newFoundationsBotModulesCandlesVolumesMultiTimeFrameMarket", - "fileName": "CandlesVolumesMultiTimeFrameMarket.js", - "folderName": "Indicator-Bot/Candles-Volumes" - }, - { - "name": "Bollinger Bands Multi Time Frame Daily", - "propertyName": "bollingerBandsMultiTimeFrameDaily", - "functionName": "newFoundationsBotModulesBollingerBandsMultiTimeFrameDaily", - "fileName": "BollingerBandsMultiTimeFrameDaily.js", - "folderName": "Indicator-Bot/Bollinger-Bands" - }, - { - "name": "Bollinger Bands Multi Time Frame Market", - "propertyName": "bollingerBandsMultiTimeFrameMarket", - "functionName": "newFoundationsBotModulesBollingerBandsMultiTimeFrameMarket", - "fileName": "BollingerBandsMultiTimeFrameMarket.js", - "folderName": "Indicator-Bot/Bollinger-Bands" - }, - { - "name": "Multi Time Frame Market", - "propertyName": "multiTimeFrameMarket", - "functionName": "newFoundationsBotModulesMultiTimeFrameMarket", - "fileName": "MultiTimeFrameMarket.js", - "folderName": "Indicator-Bot" - }, - { - "name": "Multi Time Frame Daily", - "propertyName": "multiTimeFrameDaily", - "functionName": "newFoundationsBotModulesMultiTimeFrameDaily", - "fileName": "MultiTimeFrameDaily.js", - "folderName": "Indicator-Bot" - }, - { - "name": "From One Min To Multi Time Frame Market", - "propertyName": "fromOneMinToMultiTimeFrameMarket", - "functionName": "newFoundationsBotModulesFromOneMinToMultiTimeFrameMarket", - "fileName": "FromOneMinToMultiTimeFrameMarket.js", - "folderName": "Indicator-Bot" - }, - { - "name": "From One Min To Multi Time Frame Daily", - "propertyName": "fromOneMinToMultiTimeFrameDaily", - "functionName": "newFoundationsBotModulesFromOneMinToMultiTimeFrameDaily", - "fileName": "FromOneMinToMultiTimeFrameDaily.js", - "folderName": "Indicator-Bot" - }, - { - "name": "Indicator Output", - "propertyName": "indicatorOutput", - "functionName": "newFoundationsBotModulesIndicatorOutput", - "fileName": "IndicatorOutput.js", - "folderName": "Indicator-Bot" - }, - { - "name": "Single Market Trading Bot", - "propertyName": "singleMarketTradingBot", - "functionName": "newFoundationsBotModulesSingleMarketTradingBot", - "fileName": "SingleMarketTradingBot.js", - "folderName": "Trading-Bot", - "botType": "Trading Bot" - }, - { - "name": "Trading Session", - "propertyName": "tradingSession", - "functionName": "newFoundationsBotModulesTradingSession", - "fileName": "TradingSession.js", - "folderName": "Trading-Bot" + "name": "Announcements", + "propertyName": "announcements", + "functionName": "newFoundationsBotModulesAnnouncements", + "fileName": "Announcements.js", + "folderName": "Trading-Bot/Announcements" }, { "name": "Social Bots", @@ -681,189 +781,6 @@ "functionName": "newFoundationsBotModulesTwitterBot", "fileName": "TwitterBot.js", "folderName": "Trading-Bot/Announcements" - }, - { - "name": "Trading Process", - "propertyName": "tradingProcess", - "functionName": "newFoundationsBotModulesTradingProcess", - "fileName": "TradingProcess.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Engine", - "propertyName": "tradingEngine", - "functionName": "newFoundationsBotModulesTradingEngine", - "fileName": "TradingEngine.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Output", - "propertyName": "tradingOutput", - "functionName": "newFoundationsBotModulesTradingOutput", - "fileName": "TradingOutput.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Simulation", - "propertyName": "tradingSimulation", - "functionName": "newFoundationsBotModulesTradingSimulation", - "fileName": "TradingSimulation.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Episode", - "propertyName": "tradingEpisode", - "functionName": "newFoundationsBotModulesTradingEpisode", - "fileName": "TradingEpisode.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Records", - "propertyName": "tradingRecords", - "functionName": "newFoundationsBotModulesTradingRecords", - "fileName": "TradingRecords.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading System", - "propertyName": "tradingSystem", - "functionName": "newFoundationsBotModulesTradingSystem", - "fileName": "TradingSystem.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Stages", - "propertyName": "tradingStages", - "functionName": "newFoundationsBotModulesTradingStages", - "fileName": "TradingStages.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Strategy", - "propertyName": "tradingStrategy", - "functionName": "newFoundationsBotModulesTradingStrategy", - "fileName": "TradingStrategy.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Execution", - "propertyName": "tradingExecution", - "functionName": "newFoundationsBotModulesTradingExecution", - "fileName": "TradingExecution.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Position", - "propertyName": "tradingPosition", - "functionName": "newFoundationsBotModulesTradingPosition", - "fileName": "TradingPosition.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Announcements", - "propertyName": "announcements", - "functionName": "newFoundationsBotModulesAnnouncements", - "fileName": "Announcements.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Snapshots", - "propertyName": "snapshots", - "functionName": "newFoundationsBotModulesSnapshots", - "fileName": "Snapshots.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Orders", - "propertyName": "tradingOrders", - "functionName": "newFoundationsBotModulesTradingOrders", - "fileName": "TradingOrders.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Orders Simulations", - "propertyName": "ordersSimulations", - "functionName": "newFoundationsBotModulesOrdersSimulations", - "fileName": "OrdersSimulations.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Orders Calculations", - "propertyName": "ordersCalculations", - "functionName": "newFoundationsBotModulesOrdersCalculations", - "fileName": "OrdersCalculations.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Exchange API", - "propertyName": "exchangeAPI", - "functionName": "newFoundationsBotModulesExchangeAPI", - "fileName": "ExchangeAPI.js", - "folderName": "Trading-Bot/Low-Frequency-Trading/APIs" - }, - { - "name": "Single Market Learning Bot", - "propertyName": "singleMarketLearningBot", - "functionName": "newFoundationsBotModulesSingleMarketLearningBot", - "fileName": "SingleMarketLearningBot.js", - "folderName": "Learning-Bot", - "botType": "Learning Bot" - }, - { - "name": "Learning Session", - "propertyName": "learningSession", - "functionName": "newFoundationsBotModulesLearningSession", - "fileName": "LearningSession.js", - "folderName": "Learning-Bot" - }, - { - "name": "Learning Process", - "propertyName": "learningProcess", - "functionName": "newFoundationsBotModulesLearningProcess", - "fileName": "LearningProcess.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning Engine", - "propertyName": "learningEngine", - "functionName": "newFoundationsBotModulesLearningEngine", - "fileName": "LearningEngine.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning Output", - "propertyName": "learningOutput", - "functionName": "newFoundationsBotModulesLearningOutput", - "fileName": "LearningOutput.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning Simulation", - "propertyName": "learningSimulation", - "functionName": "newFoundationsBotModulesLearningSimulation", - "fileName": "LearningSimulation.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning Episode", - "propertyName": "learningEpisode", - "functionName": "newFoundationsBotModulesLearningEpisode", - "fileName": "LearningEpisode.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning Records", - "propertyName": "learningRecords", - "functionName": "newFoundationsBotModulesLearningRecords", - "fileName": "LearningRecords.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning System", - "propertyName": "learningSystem", - "functionName": "newFoundationsBotModulesLearningSystem", - "fileName": "LearningSystem.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" } ] }, @@ -884,7 +801,7 @@ ] }, "SA": { - "globals":[ + "globals": [ { "name": "Time Constants", "propertyName": "timeConstants", @@ -893,12 +810,6 @@ } ], "utilities": [ - { - "name": "Plugins", - "propertyName": "plugins", - "functionName": "newFoundationsUtilitiesPlugins", - "fileName": "Plugins.js" - }, { "name": "Miscellaneous Functions", "propertyName": "miscellaneousFunctions", @@ -926,17 +837,172 @@ ] }, "plugins": [ - "Data Mines", - "Trading Mines", - "Learning Mines", - "Trading Systems", - "Learning Systems", - "Trading Engines", - "Learning Engines", "Tutorials", "API Maps" ] }, + { + "name": "Data-Mining", + "propertyName": "dataMining", + "UI": { + "functionLibraries": [ + { + "name": "Mine Functions", + "propertyName": "mineFunctions", + "functionName": "newDataMiningFunctionLibraryMineFunctions" + } + ] + }, + "TS": { + "botModules": [ + { + "name": "Single Market Sensor Bot", + "propertyName": "singleMarketSensorBot", + "functionName": "newDataMiningBotModulesSingleMarketSensorBot", + "fileName": "SingleMarketSensorBot.js", + "folderName": "Sensor-Bot", + "botType": "Sensor Bot" + }, + { + "name": "Exchange Raw Data Historic OHLCVs", + "propertyName": "historicOHLCVs", + "functionName": "newDataMiningBotModulesHistoricOHLCVs", + "fileName": "HistoricOHLCVs.js", + "folderName": "Sensor-Bot/Exchange-Raw-Data" + }, + { + "name": "Single Market API Data Fetcher Bot", + "propertyName": "singleMarketAPIDataFetcherBot", + "functionName": "newDataMiningBotModulesSingleMarketAPIDataFetcherBot", + "fileName": "SingleMarketAPIDataFetcherBot.js", + "folderName": "API-Data-Fetcher-Bot", + "botType": "API Data Fetcher Bot" + }, + { + "name": "API Data Fetcher Fetching Process", + "propertyName": "fetchingProcess", + "functionName": "newDataMiningBotModulesFetchingProcess", + "fileName": "FetchingProcess.js", + "folderName": "API-Data-Fetcher-Bot" + }, + { + "name": "Single Market Indicator Bot", + "propertyName": "singleMarketIndicatorBot", + "functionName": "newDataMiningBotModulesSingleMarketIndicatorBot", + "fileName": "SingleMarketIndicatorBot.js", + "folderName": "Indicator-Bot", + "botType": "Indicator Bot" + }, + { + "name": "Candles Volumes Multi Time Frame Daily", + "propertyName": "candlesVolumesMultiTimeFrameDaily", + "functionName": "newDataMiningBotModulesCandlesVolumesMultiTimeFrameDaily", + "fileName": "CandlesVolumesMultiTimeFrameDaily.js", + "folderName": "Indicator-Bot/Candles-Volumes" + }, + { + "name": "Candles Volumes Multi Time Frame Market", + "propertyName": "candlesVolumesMultiTimeFrameMarket", + "functionName": "newDataMiningBotModulesCandlesVolumesMultiTimeFrameMarket", + "fileName": "CandlesVolumesMultiTimeFrameMarket.js", + "folderName": "Indicator-Bot/Candles-Volumes" + }, + { + "name": "Bollinger Bands Multi Time Frame Daily", + "propertyName": "bollingerBandsMultiTimeFrameDaily", + "functionName": "newDataMiningBotModulesBollingerBandsMultiTimeFrameDaily", + "fileName": "BollingerBandsMultiTimeFrameDaily.js", + "folderName": "Indicator-Bot/Bollinger-Bands" + }, + { + "name": "Bollinger Bands Multi Time Frame Market", + "propertyName": "bollingerBandsMultiTimeFrameMarket", + "functionName": "newDataMiningBotModulesBollingerBandsMultiTimeFrameMarket", + "fileName": "BollingerBandsMultiTimeFrameMarket.js", + "folderName": "Indicator-Bot/Bollinger-Bands" + }, + { + "name": "Multi Time Frame Market", + "propertyName": "multiTimeFrameMarket", + "functionName": "newDataMiningBotModulesMultiTimeFrameMarket", + "fileName": "MultiTimeFrameMarket.js", + "folderName": "Indicator-Bot" + }, + { + "name": "Multi Time Frame Daily", + "propertyName": "multiTimeFrameDaily", + "functionName": "newDataMiningBotModulesMultiTimeFrameDaily", + "fileName": "MultiTimeFrameDaily.js", + "folderName": "Indicator-Bot" + }, + { + "name": "From One Min To Multi Time Frame Market", + "propertyName": "fromOneMinToMultiTimeFrameMarket", + "functionName": "newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket", + "fileName": "FromOneMinToMultiTimeFrameMarket.js", + "folderName": "Indicator-Bot" + }, + { + "name": "From One Min To Multi Time Frame Daily", + "propertyName": "fromOneMinToMultiTimeFrameDaily", + "functionName": "newDataMiningBotModulesFromOneMinToMultiTimeFrameDaily", + "fileName": "FromOneMinToMultiTimeFrameDaily.js", + "folderName": "Indicator-Bot" + }, + { + "name": "Indicator Output", + "propertyName": "indicatorOutput", + "functionName": "newDataMiningBotModulesIndicatorOutput", + "fileName": "IndicatorOutput.js", + "folderName": "Indicator-Bot" + }, + { + "name": "Webhooks Check Webhook", + "propertyName": "checkWebhook", + "functionName": "newDataMiningBotModulesCheckWebhook", + "fileName": "CheckWebhook.js", + "folderName": "Sensor-Bot/Webhooks" + } + ] + }, + "plugins": [ + "Data Mines" + ], + "tasks": [ + "Data Tasks" + ] + }, + { + "name": "Community-Plugins", + "propertyName": "communityPlugins", + "UI": { + "functionLibraries": [ + { + "name": "Plugins Functions", + "propertyName": "pluginsFunctions", + "functionName": "newPluginsFunctionLibraryPluginsFunctions" + } + ], + "utilities": [ + { + "name": "Plugins", + "propertyName": "plugins", + "functionName": "newPluginsUtilitiesPlugins" + } + ] + }, + "SA": { + "utilities": [ + { + "name": "Plugins", + "propertyName": "plugins", + "functionName": "newPluginsUtilitiesPlugins", + "fileName": "Plugins.js" + } + ] + }, + "plugins": [] + }, { "name": "Ethereum", "propertyName": "ethereum", @@ -1353,7 +1419,7 @@ "propertyName": "queriesUnfollowedUserProfiles", "functionName": "newSocialTradingModulesQueriesUnfollowedUserProfiles", "fileName": "Queries/UnfollowedUserProfiles.js" - }, + }, { "name": "Bot Profile Stats", "propertyName": "queriesBotProfileStats", @@ -1518,8 +1584,8 @@ ], "utilities": [] }, - "UI":{ - "modules":[ + "UI": { + "modules": [ { "name": "Web Sockets Client", "propertyName": "webSocketsClient", @@ -1529,4 +1595,4 @@ ] } } -] +] \ No newline at end of file From 2905730db6c1e54df30543abef679b5c463ef9ae Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 6 Oct 2021 12:37:00 +0200 Subject: [PATCH 65/82] Update CircularMenuItem.js --- .../Spaces/Floating-Space/CircularMenuItem.js | 62 ++++++++++++------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js b/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js index 17c1b8865..9f4a3e5d8 100644 --- a/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js +++ b/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js @@ -39,6 +39,7 @@ function newCircularMenuItem() { container: undefined, payload: undefined, relatedUiObject: undefined, + relatedUiObjectProject: undefined, dontShowAtFullscreen: undefined, isEnabled: true, shorcutNumber: undefined, @@ -267,12 +268,22 @@ function newCircularMenuItem() { thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndName('Foundations', thisObject.secondaryIcon) thisObject.iconOff = UI.projects.foundations.spaces.designSpace.getIconByProjectAndName('Foundations', thisObject.secondaryIcon) } else { + + /* + TODO : This code needs to be cleaned and reorganized. It is not clear how a menu item icon is going to be selected. + */ + if (thisObject.relatedUiObject !== undefined && thisObject.iconProject !== undefined) { thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.iconProject, thisObject.relatedUiObject) thisObject.iconOff = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.iconProject, thisObject.relatedUiObject) } else if (thisObject.relatedUiObject !== undefined && thisObject.iconProject === undefined) { - thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.relatedUiObject) - thisObject.iconOff = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.relatedUiObject) + if (thisObject.relatedUiObjectProject !== undefined) { + thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.relatedUiObjectProject, thisObject.relatedUiObject) + thisObject.iconOff = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.relatedUiObjectProject, thisObject.relatedUiObject) + } else { + thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.relatedUiObject) + thisObject.iconOff = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.relatedUiObject) + } } else { if (thisObject.iconPathOn !== undefined && thisObject.iconPathOff !== undefined && thisObject.iconProject !== undefined) { thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndName(thisObject.iconProject, thisObject.iconPathOn) @@ -306,7 +317,7 @@ function newCircularMenuItem() { if (thisObject.container.frame.isThisPointHere(point, true, false) === true) { let text = thisObject.action - if(thisObject.payload.uiObject.payload.referenceParent !== undefined && thisObject.action === 'Reference Detach'){ + if (thisObject.payload.uiObject.payload.referenceParent !== undefined && thisObject.action === 'Reference Detach') { text = text + ' -> [Existing Reference] Type : [' + thisObject.payload.uiObject.payload.referenceParent.type + '] , Name : [' + thisObject.payload.uiObject.payload.referenceParent.name + ']' } @@ -491,31 +502,34 @@ function newCircularMenuItem() { if (thisObject.icon === undefined) { thisObject.icon = UI.projects.foundations.spaces.designSpace.getIconByProjectAndName('Foundations', 'missing-image') } - if (thisObject.icon.canDrawIcon === true && thisObject.currentRadius > 1 && thisObject.isDeployed === true) { - browserCanvasContext.drawImage(thisObject.icon, menuPosition.x - iconSize, menuPosition.y - iconSize, iconSize * 2, iconSize * 2) + + if (thisObject.icon !== undefined) { + if (thisObject.icon.canDrawIcon === true && thisObject.currentRadius > 1 && thisObject.isDeployed === true) { + browserCanvasContext.drawImage(thisObject.icon, menuPosition.x - iconSize, menuPosition.y - iconSize, iconSize * 2, iconSize * 2) + } + } - /* Menu Label */ - if (thisObject.type === 'Icon & Text') { - label = labelToPrint - if (thisObject.shorcutNumber !== undefined) { - label = '' + thisObject.shorcutNumber + '- ' + labelToPrint + /* Menu Label */ + if (thisObject.type === 'Icon & Text') { + label = labelToPrint + if (thisObject.shorcutNumber !== undefined) { + label = '' + thisObject.shorcutNumber + '- ' + labelToPrint + } + + let labelPoint + let fontSize = UI.projects.foundations.spaces.floatingSpace.style.node.menuItem.fontSize + + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY + + if (thisObject.currentRadius >= thisObject.targetRadius) { + labelPoint = { + x: menuPosition.x + thisObject.currentRadius + 25, + y: menuPosition.y + fontSize * FONT_ASPECT_RATIO } - let labelPoint - let fontSize = UI.projects.foundations.spaces.floatingSpace.style.node.menuItem.fontSize - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - if (thisObject.currentRadius >= thisObject.targetRadius) { - labelPoint = { - x: menuPosition.x + thisObject.currentRadius + 25, - y: menuPosition.y + fontSize * FONT_ASPECT_RATIO - } - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - browserCanvasContext.fillStyle = 'rgba(' + UI.projects.foundations.spaces.floatingSpace.style.node.menuItem.fontColor + ', 1)' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - } + browserCanvasContext.fillStyle = 'rgba(' + UI.projects.foundations.spaces.floatingSpace.style.node.menuItem.fontColor + ', 1)' + browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) } } } From 08a56a60261392efa2d108248b94081bedf625ca Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 6 Oct 2021 12:37:59 +0200 Subject: [PATCH 66/82] Removing files for Beta 12 --- .../LearningSessionFunctions.js | 306 ---------------- .../TradingSessionFunctions.js | 332 ------------------ 2 files changed, 638 deletions(-) delete mode 100644 Projects/Foundations/UI/Function-Libraries/LearningSessionFunctions.js delete mode 100644 Projects/Foundations/UI/Function-Libraries/TradingSessionFunctions.js diff --git a/Projects/Foundations/UI/Function-Libraries/LearningSessionFunctions.js b/Projects/Foundations/UI/Function-Libraries/LearningSessionFunctions.js deleted file mode 100644 index 1e408605b..000000000 --- a/Projects/Foundations/UI/Function-Libraries/LearningSessionFunctions.js +++ /dev/null @@ -1,306 +0,0 @@ -function newFoundationsFunctionLibraryLearningSessionFunctions() { - let thisObject = { - syncronizeSessionWithBackEnd: syncronizeSessionWithBackEnd, - runSession: runSession, - stopSession: stopSession - } - - return thisObject - - function syncronizeSessionWithBackEnd(node) { - let validationsResult = validations(node) - if (validationsResult === undefined) { - /* If something fails at validations we just quit. */ - return - } - let lanNetworkNode = validationsResult.lanNetworkNode - if (lanNetworkNode === undefined) { - /* Nodes that do not belong to a network can not get ready. */ - return - } - - let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id) - - /* First we setup everything so as to listen to the response from the Task Server */ - let eventSubscriptionIdOnStatus - let key = node.name + '-' + node.type + '-' + node.id - eventsServerClient.listenToEvent(key, 'Status Response', undefined, node.id, onResponse, onStatus) - - function onResponse(message) { - eventSubscriptionIdOnStatus = message.eventSubscriptionId - } - - function onStatus(message) { - eventsServerClient.stopListening(key, eventSubscriptionIdOnStatus, node.id) - if (message.event.status === 'Learning Session Runnning') { - node.payload.uiObject.menu.internalClick('Run Learning Session') - } - } - - /* Second we ask the Task Server if this Session is Running. */ - eventsServerClient.raiseEvent(key, 'Learning Session Status') - } - - function runSession(node, resume, callBackFunction) { - let validationsResult = validations(node) - if (validationsResult === undefined) { - /* If something fails at validations we just quit. */ - return - } - let lanNetworkNode = validationsResult.lanNetworkNode - if (lanNetworkNode === undefined) { - /* This means that the validations failed. */ - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id) - - node.payload.uiObject.run(eventsServerClient, callBackFunction) - - let key = node.name + '-' + node.type + '-' + node.id - - let lightingPath = '' + - 'Learning System->' + - 'TensorFlow Library->' + - 'Execution Environment->Supervised Learning->Unsupervised Learning->Self Learning->Reinforcement Learning->' + - 'WebGL Backend->NodeJS Backend->WASM Backend->CPU Backend->' + - 'Environment Flags->Debug Mode->Production Mode->' + - 'Supervised Learning->Unsupervised Learning->Self Learning->Reinforcement Learning->' + - 'Artificial Neural Network->Model->' + - 'Logistic Regression->Model->' + - 'Compile->Optimizer->Loss Function->Metrics->Optimizer by Name->SGD Instance->Momentum Instance->Adagrad Instance->Adadelta Instance->Adam Instance->Rmsprop Instance->' + - 'Fit Dataset->Verbose->Epochs->Callbacks->Dataset Args->Batches Per Gradient Update->Shuffle->' + - 'Layers API->Core API->' + - 'Sequential Model->Functional Model->' + - 'Data Reporting->' + - 'Input Layer->Sequential layer->Output Layer->'+ - 'Input Features->Data Feature->Feature Formula->Input Shape->Batch Input Shape->Feature Preprocessing->MinMax Scaler->Standard Scaler->Collection Condition->' + - 'Output Labels->Data Label->Label Formula->' + - 'Advanced Activation Layers->Basic Layers->Convolutional Layers->' + - 'Conv 1D Layer->Conv 2D Layer->Conv 2D Transpose Layer->Conv 3D Layer->Cropping 2D Layer->Depthwise Convo 2D Layer->Separable Convo 2D Layer->Up Sampling 2D Layer->' + - 'Activation Layer->Dense Layer->Dropout Layer->Embedding Layer->Flatten Layer->Permutable Layer->Rrepeat Vector Layer->Reshape Layer->Spatial Dropout 1D Layer->' + - 'Elu Layer->Leaky Relu Layer->Prelu Layer->Relu Layer->Softmax Layer->Thresholded Relu Layer->'+ - 'Dimensionality Units->Activation Function->Dtype->Trainable->Weights->Tensor->Kernel->Bias->' + - 'Kernel Initializer->Kernel Constraint->Kernel Regularizer->' + - 'Bias Initializer->Bias Constraint->Bias Regularizer->' - - let learningSystem = UI.projects.foundations.functionLibraries.protocolNode.getProtocolNode(node.learningSystemReference.payload.referenceParent, false, true, true, false, false, lightingPath) - - lightingPath = '' + - 'Learning Engine->' + - 'Learning Current->Learning Last->Previous->' + - 'Learning Episode->' + - 'Episode Base Asset->Episode Quoted Asset->Learning Episode Counters->Learning Episode Statistics->' + - 'Strategies->Positions->Orders->Hits->Fails->' + - 'Profit Loss->Hit Ratio->Hit Fail->Days->ROI->Annualized Rate Of Return->User Defined Statistic->' + - 'Candle->Cycle->' + - 'Begin->End->Last Begin->Last End->Open->Close->Min->Max->Index->' + - 'Distance To Learning Event->' + - 'Head Of The Market->Process Date->' + - 'Trigger On->Trigger Off->Take Position->Close Position->Next Phase->Move To Phase->Create Order->Cancel Order->Close Order->' + - 'Strategy->' + - 'Strategy Counters->' + - 'Position->' + - 'Entry Target Rate->Exit Target Rate->' + - 'Stop Loss->Stop Loss Phase->Stop Loss Position->Begin->End->Initial Value->Final Value->' + - 'Take Profit->Take Profit Phase->Take Profit Position->Begin->End->Initial Value->Final Value->' + - 'Position Counters->' + - 'Position Statistics->Days->User Defined Statistic->' + - 'Position Base Asset->Position Quoted Asset->Entry Target Size->Exit Target Size->' + - 'Profit Loss->ROI->Hit Fail->' + - 'Exchange Orders->Market Buy Orders->Market Sell Orders->Limit Buy Orders->Limit Sell Orders->' + - 'Market Order->Limit Order->' + - 'Exchange Id->Rate->Order Name->Algorithm Name->Lock->' + - 'Order Counters->' + - 'Order Base Asset->Order Quoted Asset->' + - 'Actual Size->Size->Size Filled->Amount Received->Fees Paid->Fees To Be Paid->' + - 'Order Statistics->Percentage Filled->Actual Rate->Days->User Defined Statistic->' + - 'Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->' + - 'Begin->End->Exit Type->Status->Begin Rate->End Rate->Stage Base Asset->Stage Quoted Asset->Size Placed->Target Size->Size Filled->Fees Paid->Stage Defined In->' + - 'Serial Number->Identifier->Begin->End->Begin Rate->End Rate->Strategy Name->Status->Exit Type->' + - 'Balance->Begin Balance->End Balance->' + - 'Index->Situation Name->Formula->Periods->' + - 'Features->Feature->Begin->End->Feature Value->'+ - 'Labels->Label->Begin->End->Label Value->'+ - 'Predictions->Prediction->Begin->End->Prediction Value->' - - let learningEngine = UI.projects.foundations.functionLibraries.protocolNode.getProtocolNode(node.learningEngineReference.payload.referenceParent, false, true, true, false, false, lightingPath) - - lightingPath = '' + - 'Back Learning Session->Live Learning Session->' + - 'Learning Parameters->' + - 'Learning Algorithm->Time Range->Time Frame->Heartbeats->User Defined Parameters->' + - 'Social Bots->Telegram Bot->Discord Bot->Slack Bot->Twitter Bot ->' - - let session = UI.projects.foundations.functionLibraries.protocolNode.getProtocolNode(node, false, true, true, false, false, lightingPath) - - let defaultExchange = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(validationsResult.exchange.payload, 'codeName') - let defaultMarket = - UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(validationsResult.market.baseAsset.payload.referenceParent.payload, 'codeName') - + '-' + - UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(validationsResult.market.quotedAsset.payload.referenceParent.payload, 'codeName') - - let dependencyFilter = UI.projects.foundations.functionLibraries.dependenciesFilter.createDependencyFilter( - defaultExchange, - defaultMarket, - node.learningSystemReference.payload.referenceParent - ) - - /* Raise event to run the session */ - let event = { - session: JSON.stringify(session), - learningSystem: JSON.stringify(learningSystem), - learningEngine: JSON.stringify(learningEngine), - dependencyFilter: JSON.stringify(dependencyFilter), - resume: resume - } - - if (resume !== true) { - eventsServerClient.raiseEvent(key, 'Run Learning Session', event) - } else { - eventsServerClient.raiseEvent(key, 'Resume Learning Session', event) - } - - if (node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - } - - function stopSession(node, callBackFunction) { - let validationsResult = validations(node) - if (validationsResult === undefined) { - /* If something fails at validations we just quit. */ - return - } - let lanNetworkNode = validationsResult.lanNetworkNode - if (lanNetworkNode === undefined) { - /* This means that the validations failed. */ - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id) - - let key = node.name + '-' + node.type + '-' + node.id - eventsServerClient.raiseEvent(key, 'Stop Learning Session') - - node.payload.uiObject.stop(callBackFunction, undefined, true) - } - - function validations(node) { - - let result = {} - - if (node.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs a Process Instance parent to be able to run.') - return - } - - if (node.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Process Instance node.') - return - } - - if (node.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Task.') - return - } - - if (node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Task Manager.') - return - } - - result.taskManager = node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode - - if (result.taskManager.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside Mine Tasks.') - return - } - - if (result.taskManager.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside Market Tasks.') - return - } - - if (result.taskManager.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside Exchange Tasks.') - return - } - - if (result.taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Testing or Production Learning Tasks.') - return - } - - if (result.taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Network Node.') - return - } - - result.lanNetworkNode = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(result.taskManager, 'LAN Network Node', undefined, true, false, true, false) - - if (node.learningSystemReference === undefined) { - node.payload.uiObject.setErrorMessage('Session needs a child Learning System Reference.') - return - } - - if (node.learningEngineReference === undefined) { - node.payload.uiObject.setErrorMessage('Session needs a child Learning Engine Reference.') - return - } - - if (node.learningSystemReference.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('Learning System Reference needs to reference a Learning System.') - return - } - - if (node.learningEngineReference.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('Learning Engine Reference needs to reference a Learning Engine.') - return - } - - if (result.taskManager.payload.parentNode.payload.parentNode.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to have a Default Market.') - return - } - - result.market = result.taskManager.payload.parentNode.payload.parentNode.payload.referenceParent - - if (result.market.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Default Market needs to be a child of Exchange Markets.') - return - } - - if (result.market.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Exchange Markets neeed to be a child of Crypto Exchange.') - return - } - - if (result.market.baseAsset === undefined) { - node.payload.uiObject.setErrorMessage('Default Market needs to have a Base Asset.') - return - } - - if (result.market.quotedAsset === undefined) { - node.payload.uiObject.setErrorMessage('Default Market needs to have a Quoted Asset.') - return - } - - if (result.market.baseAsset.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('Market Base Asset needs to reference an Asset.') - return - } - - if (result.market.quotedAsset.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('Market Quoted Asset needs to reference an Asset.') - return - } - - result.exchange = result.market.payload.parentNode.payload.parentNode - - return result - } -} diff --git a/Projects/Foundations/UI/Function-Libraries/TradingSessionFunctions.js b/Projects/Foundations/UI/Function-Libraries/TradingSessionFunctions.js deleted file mode 100644 index a8761f130..000000000 --- a/Projects/Foundations/UI/Function-Libraries/TradingSessionFunctions.js +++ /dev/null @@ -1,332 +0,0 @@ -function newFoundationsFunctionLibraryTradingSessionFunctions() { - let thisObject = { - syncronizeSessionWithBackEnd: syncronizeSessionWithBackEnd, - runSession: runSession, - stopSession: stopSession - } - - return thisObject - - function syncronizeSessionWithBackEnd(node) { - let validationsResult = validations(node) - if (validationsResult === undefined) { - /* If something fails at validations we just quit. */ - return - } - let lanNetworkNode = validationsResult.lanNetworkNode - if (lanNetworkNode === undefined) { - /* Nodes that do not belong to a network can not get ready. */ - return - } - - let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id) - - /* First we setup everything so as to listen to the response from the Task Server */ - let eventSubscriptionIdOnStatus - let key = node.name + '-' + node.type + '-' + node.id - eventsServerClient.listenToEvent(key, 'Status Response', undefined, node.id, onResponse, onStatus) - - function onResponse(message) { - eventSubscriptionIdOnStatus = message.eventSubscriptionId - } - - function onStatus(message) { - eventsServerClient.stopListening(key, eventSubscriptionIdOnStatus, node.id) - if (message.event.status === 'Trading Session Runnning') { - node.payload.uiObject.menu.internalClick('Run Trading Session') - } - } - - /* Second we ask the Task Server if this Session is Running. */ - eventsServerClient.raiseEvent(key, 'Trading Session Status') - } - - function runSession(node, resume, callBackFunction) { - let validationsResult = validations(node) - if (validationsResult === undefined) { - /* If something fails at validations we just quit. */ - return - } - let lanNetworkNode = validationsResult.lanNetworkNode - if (lanNetworkNode === undefined) { - /* This means that the validations failed. */ - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id) - - let key = node.name + '-' + node.type + '-' + node.id - - /* Setup Listener to check Parent Task Status of the Session */ - let eventSubscriptionIdOnStatus - let eventHandlerKey = "Task Client - " + node.payload.parentNode.payload.parentNode.payload.parentNode.id - - eventsServerClient.listenToEvent(eventHandlerKey, 'Task Status', undefined, node.id, onResponse, onStatus) - - function onResponse(message) { - eventSubscriptionIdOnStatus = message.eventSubscriptionId - } - - function onStatus(message) { - eventsServerClient.stopListening(eventHandlerKey, eventSubscriptionIdOnStatus, node.id) - - /* If Task is Not Running Display Error */ - if (message.event.status === 'Task Process Not Running') { - node.payload.uiObject.setErrorMessage('Parent Task Not Running.') - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } else { - node.payload.uiObject.run(eventsServerClient, callBackFunction) - } - } - - /* Raise Event to Check Task Status */ - let eventKey = {} - eventKey.taskId = node.payload.parentNode.payload.parentNode.payload.parentNode.id - - eventsServerClient.raiseEvent("Task Manager", 'Task Status', eventKey) - - let lightingPath = '' + - 'Trading System->' + - 'Dynamic Indicators->Indicator Function->Formula->' + - 'Trading Strategy->' + - 'Trigger Stage->Trigger On Event->Trigger Off Event->Take Position Event->' + - 'Open Stage->' + - 'Manage Stage->' + - 'Managed Stop Loss->Managed Take Profit->' + - 'Phase->Formula->Next Phase Event->Move To Phase Event->Phase->' + - 'Situation->Condition->Javascript Code->' + - 'Close Stage->' + - 'Initial Targets->Target Size In Base Asset->Target Size In Quoted Asset->Target Rate->Formula->' + - 'Open Execution->Close Execution->' + - 'Execution Algorithm->Market Buy Order->Market Sell Order->Limit Buy Order->Limit Sell Order->' + - 'Order Rate->Formula->' + - 'Create Order Event->Cancel Order Event->' + - 'Close Stage Event->' + - 'Announcement->Announcement Formula->Announcement Condition->' + - 'Size In Base Asset->Size In Quoted Asset->Position Rate->Formula->' + - 'Situation->Condition->Javascript Code->' + - 'Market Order->Limit Order->' + - 'Simulated Exchange Events->Simulated Partial Fill->Simulated Actual Rate->Simulated Fees Paid->Formula->' + - 'User Defined Code->Javascript Code->' - - let tradingSystem = UI.projects.foundations.functionLibraries.protocolNode.getProtocolNode(node.tradingSystemReference.payload.referenceParent, false, true, true, false, false, lightingPath) - - lightingPath = '' + - 'Trading Engine->' + - 'Dynamic Indicators->Indicator Function->' + - 'Trading Current->Trading Last->Previous->' + - 'Trading Episode->' + - 'Episode Base Asset->Episode Quoted Asset->Trading Episode Counters->Trading Episode Statistics->' + - 'Strategies->Positions->Orders->Hits->Fails->User Defined Counter->' + - 'Profit Loss->Hit Ratio->Hit Fail->Days->ROI->Annualized Rate Of Return->User Defined Statistic->' + - 'Candle->Cycle->' + - 'Begin->End->Last Begin->Last End->Open->Close->Min->Max->Index->' + - 'Distance To Trading Event->' + - 'Head Of The Market->Process Date->' + - 'Trigger On->Trigger Off->Take Position->Close Position->Next Phase->Move To Phase->Create Order->Cancel Order->Close Order->' + - 'Strategy->' + - 'Strategy Counters->' + - 'Position->' + - 'Entry Target Rate->Exit Target Rate->' + - 'Stop Loss->Stop Loss Phase->Stop Loss Position->Begin->End->Initial Value->Final Value->' + - 'Take Profit->Take Profit Phase->Take Profit Position->Begin->End->Initial Value->Final Value->' + - 'Position Counters->' + - 'Position Statistics->Days->User Defined Statistic->' + - 'Position Base Asset->Position Quoted Asset->Entry Target Size->Exit Target Size->' + - 'Profit Loss->ROI->Hit Fail->' + - 'Exchange Orders->Market Buy Orders->Market Sell Orders->Limit Buy Orders->Limit Sell Orders->' + - 'Market Order->Limit Order->' + - 'Exchange Id->Rate->Order Name->Algorithm Name->Lock->' + - 'Order Counters->' + - 'Order Base Asset->Order Quoted Asset->' + - 'Actual Size->Size->Size Filled->Amount Received->Fees Paid->Fees To Be Paid->' + - 'Order Statistics->Percentage Filled->Actual Rate->Days->User Defined Statistic->' + - 'Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->' + - 'Begin->End->Exit Type->Status->Begin Rate->End Rate->Stage Base Asset->Stage Quoted Asset->Size Placed->Target Size->Size Filled->Fees Paid->Stage Defined In->' + - 'Serial Number->Identifier->Begin->End->Begin Rate->End Rate->Strategy Name->Status->Exit Type->' + - 'Balance->Begin Balance->End Balance->' + - 'Index->Situation Name->Formula->Periods->' + - 'User Defined Variables->User Defined Variable->' - - let tradingEngine = UI.projects.foundations.functionLibraries.protocolNode.getProtocolNode(node.tradingEngineReference.payload.referenceParent, false, true, true, false, false, lightingPath) - - lightingPath = '' + - 'Backtesting Session->Paper Trading Session->Forward Testing Session->Live Trading Session->' + - 'Trading Parameters->' + - 'Session Base Asset->Session Quoted Asset->Time Range->Time Frame->Slippage->Fee Structure->Snapshots->Heartbeats->User Defined Parameters->' + - 'Social Bots->Telegram Bot->Discord Bot->Slack Bot->Twitter Bot->' + - 'Social Bot Command->Formula->' + - 'Exchange Account Asset->Asset->' - - let session = UI.projects.foundations.functionLibraries.protocolNode.getProtocolNode(node, false, true, true, false, false, lightingPath) - - let defaultExchange = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(validationsResult.exchange.payload, 'codeName') - let defaultMarket = - UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(validationsResult.market.baseAsset.payload.referenceParent.payload, 'codeName') - + '-' + - UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(validationsResult.market.quotedAsset.payload.referenceParent.payload, 'codeName') - - let dependencyFilter = UI.projects.foundations.functionLibraries.dependenciesFilter.createDependencyFilter( - defaultExchange, - defaultMarket, - node.tradingSystemReference.payload.referenceParent - ) - - /* Raise event to run the session */ - let event = { - session: JSON.stringify(session), - tradingSystem: JSON.stringify(tradingSystem), - tradingEngine: JSON.stringify(tradingEngine), - dependencyFilter: JSON.stringify(dependencyFilter), - resume: resume - } - - if (resume !== true) { - eventsServerClient.raiseEvent(key, 'Run Trading Session', event) - } else { - eventsServerClient.raiseEvent(key, 'Resume Trading Session', event) - } - - if (node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - } - - function stopSession(node, callBackFunction) { - let validationsResult = validations(node) - if (validationsResult === undefined) { - /* If something fails at validations we just quit. */ - return - } - let lanNetworkNode = validationsResult.lanNetworkNode - if (lanNetworkNode === undefined) { - /* This means that the validations failed. */ - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id) - - let key = node.name + '-' + node.type + '-' + node.id - eventsServerClient.raiseEvent(key, 'Stop Trading Session') - - node.payload.uiObject.stop(callBackFunction, undefined, true) - } - - function validations(node) { - - let result = {} - - if (node.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs a Process Instance parent to be able to run.') - return - } - - if (node.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Process Instance node.') - return - } - - if (node.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Task.') - return - } - - if (node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Task Manager.') - return - } - - result.taskManager = node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode - - if (result.taskManager.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside Mine Tasks.') - return - } - - if (result.taskManager.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside Market Tasks.') - return - } - - if (result.taskManager.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside Exchange Tasks.') - return - } - - if (result.taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Testing or Production Trading Tasks.') - return - } - - if (result.taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Network Node.') - return - } - - result.lanNetworkNode = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(result.taskManager, 'LAN Network Node', undefined, true, false, true, false) - - if (node.tradingSystemReference === undefined) { - node.payload.uiObject.setErrorMessage('Session needs a child Trading System Reference.') - return - } - - if (node.tradingEngineReference === undefined) { - node.payload.uiObject.setErrorMessage('Session needs a child Trading Engine Reference.') - return - } - - if (node.tradingSystemReference.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('Trading System Reference needs to reference a Trading System.') - return - } - - if (node.tradingEngineReference.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('Trading Engine Reference needs to reference a Trading Engine.') - return - } - - if (result.taskManager.payload.parentNode.payload.parentNode.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to have a Default Market.') - return - } - - result.market = result.taskManager.payload.parentNode.payload.parentNode.payload.referenceParent - - if (result.market.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Default Market needs to be a child of Exchange Markets.') - return - } - - if (result.market.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Exchange Markets neeed to be a child of Crypto Exchange.') - return - } - - if (result.market.baseAsset === undefined) { - node.payload.uiObject.setErrorMessage('Default Market needs to have a Base Asset.') - return - } - - if (result.market.quotedAsset === undefined) { - node.payload.uiObject.setErrorMessage('Default Market needs to have a Quoted Asset.') - return - } - - if (result.market.baseAsset.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('Market Base Asset needs to reference an Asset.') - return - } - - if (result.market.quotedAsset.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('Market Quoted Asset needs to reference an Asset.') - return - } - - result.exchange = result.market.payload.parentNode.payload.parentNode - - return result - } -} From 4a34245410d991d18c5f961c07f00bd3db25d7e8 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 6 Oct 2021 12:46:54 +0200 Subject: [PATCH 67/82] deepscan bug fixes --- .../Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js | 1 - .../Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js | 1 - .../Trading-Bot/Low-Frequency-Trading/TradingEngine.js | 2 +- .../Trading-Bot/Low-Frequency-Trading/TradingEpisode.js | 1 - .../Trading-Bot/Low-Frequency-Trading/TradingStrategy.js | 2 +- .../TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js | 4 ++-- .../Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js | 2 -- .../Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js | 2 -- .../TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js | 1 - .../Learning-Bot/Low-Frequency-Learning/LearningEngine.js | 1 - .../Learning-Bot/Low-Frequency-Learning/LearningEpisode.js | 1 - 11 files changed, 4 insertions(+), 14 deletions(-) diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js index 910d016f4..af77160a7 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js @@ -2,7 +2,6 @@ exports.newAlgorithmicTradingBotModulesOrdersCalculations = function (processInd /* When we are live trading, we need to syncronize with the exchange. */ - const MODULE_NAME = 'Orders Calculations' let thisObject = { actualSizeCalculation: actualSizeCalculation, diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js index 1d3ea0ac6..ad4d246ae 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js @@ -2,7 +2,6 @@ exports.newAlgorithmicTradingBotModulesOrdersSimulations = function (processInde /* When we are backtesting or paper trading, we need to simulate what would have happened at the exchange. */ - const MODULE_NAME = 'Orders Simulations' let thisObject = { actualSizeSimulation: actualSizeSimulation, diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js index 441e5bfb7..c04a0eea0 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js @@ -3,7 +3,7 @@ exports.newAlgorithmicTradingBotModulesTradingEngine = function (processIndex) { We call the Trading Engine to the data structure that is needed in order to exevute the trading protocol with the specific rules defined at the Trading System. */ - const MODULE_NAME = 'Trading Engine' + let thisObject = { mantain: mantain, reset: reset, diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js index 44f563cca..f70284899 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js @@ -2,7 +2,6 @@ exports.newAlgorithmicTradingBotModulesTradingEpisode = function (processIndex) /* This module packages all functions related to Episodes. */ - const MODULE_NAME = 'Trading Episode' let thisObject = { mantain: mantain, reset: reset, diff --git a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js index c18aefd1d..be2a09c31 100644 --- a/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js @@ -2,7 +2,7 @@ exports.newAlgorithmicTradingBotModulesTradingStrategy = function (processIndex) /* This module packages all functions related to Strategies. */ - const MODULE_NAME = 'Trading Strategy' + let thisObject = { mantain: mantain, reset: reset, diff --git a/Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js b/Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js index a343e5684..e0acf093e 100644 --- a/Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js +++ b/Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js @@ -868,7 +868,7 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) { Building the current key... */ let key = "" - for (j = 0; j < primaryKeys.length; j++) { + for (let j = 0; j < primaryKeys.length; j++) { let keyValue = record.map.get(primaryKeys[j]) key = key + '->' + keyValue } @@ -887,7 +887,7 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) { let record = getRecord(dataReceivedArray[i]) let key = "" - for (j = 0; j < primaryKeys.length; j++) { + for (let j = 0; j < primaryKeys.length; j++) { let keyValue = record.map.get(primaryKeys[j]) key = key + '->' + keyValue } diff --git a/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js index e50e98bc7..b1f43ac9d 100644 --- a/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js @@ -440,7 +440,6 @@ return } - const inputVolumesPerdiod = 60 * 1000; // 1 min const inputFilePeriod = 24 * 60 * 60 * 1000; // 24 hs let totalOutputVolumes = inputFilePeriod / outputPeriod; // this should be 2 in this case. let beginingOutputTime = contextVariables.datetimeLastProducedFile.valueOf(); @@ -577,7 +576,6 @@ let fileContent = ""; for (let i = 0; i < volumes.length; i++) { - let candle = volumes[i]; fileContent = fileContent + separator + '[' + volumes[i].buy + "," + volumes[i].sell + "," + volumes[i].begin + "," + volumes[i].end + "]"; if (separator === "") { separator = ","; } fileRecordCounter++ diff --git a/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js index 51f986645..89ccadd17 100644 --- a/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js @@ -677,7 +677,6 @@ callBackFunction(err); return; } - const inputVolumesPerdiod = 60 * 1000; // 1 min const inputFilePeriod = 24 * 60 * 60 * 1000; // 24 hs let totalOutputVolumes = inputFilePeriod / outputPeriod; // this should be 2 in this case. @@ -813,7 +812,6 @@ let fileContent = ""; for (let i = 0; i < volumes.length; i++) { - let candle = volumes[i]; fileContent = fileContent + separator + '[' + volumes[i].buy + "," + volumes[i].sell + "," + volumes[i].begin + "," + volumes[i].end + "]"; if (separator === "") { separator = ","; } fileRecordCounter++ diff --git a/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js index 68129a3ff..b97a1f896 100644 --- a/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js @@ -74,7 +74,6 @@ let outputData // Data built as a result of applying user defined code and formulas at the Data Building Procedure let singularVariableName // Name of the variable for this product let recordDefinition // Record as defined by the user at the UI - let fileContent // Here we store the contents of the new data built just before writing it to a file. let resultsWithIrregularPeriods // A product will have irregular periods when the User Code inserts new result records at will, in contrast with normal procedure where the platform insert one record per loop execution. /* diff --git a/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js index c63f52b31..2f6941f32 100644 --- a/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js @@ -3,7 +3,6 @@ exports.newMachineLearningBotModulesLearningEngine = function (processIndex) { We call the Learning Engine to the data structure that is needed in order to exevute the learning protocol with the specific rules defined at the Learning System. */ - const MODULE_NAME = 'Learning Engine' let thisObject = { mantain: mantain, reset: reset, diff --git a/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js index 6ea0bdb39..db63b0b40 100644 --- a/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js @@ -2,7 +2,6 @@ exports.newMachineLearningBotModulesLearningEpisode = function (processIndex) { /* This module packages all functions related to Episodes. */ - const MODULE_NAME = 'Learning Episode' let thisObject = { mantain: mantain, reset: reset, From 0bf9caf2c10df9843d440238ab61b3d82c0869bd Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 6 Oct 2021 12:50:00 +0200 Subject: [PATCH 68/82] Beta 12 Labels --- Platform/Client/githubServer.js | 4 ++-- Platform/Client/httpInterface.js | 2 +- Platform/PlatformApp.js | 2 +- README.md | 2 +- platform.js | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Platform/Client/githubServer.js b/Platform/Client/githubServer.js index 148ce0801..f85b56d46 100644 --- a/Platform/Client/githubServer.js +++ b/Platform/Client/githubServer.js @@ -79,7 +79,7 @@ exports.newGithubServer = function newGithubServer() { const octokit = new Octokit({ auth: token, - userAgent: 'Superalgos Beta 11' + userAgent: 'Superalgos Beta 12' }) await getList() @@ -207,7 +207,7 @@ exports.newGithubServer = function newGithubServer() { const { Octokit } = SA.nodeModules.octokit const octokit = new Octokit({ auth: token, - userAgent: 'Superalgos Beta 11' + userAgent: 'Superalgos Beta 12' }) await getPrList() await mergePrs() diff --git a/Platform/Client/httpInterface.js b/Platform/Client/httpInterface.js index 65ca9de37..57770a087 100644 --- a/Platform/Client/httpInterface.js +++ b/Platform/Client/httpInterface.js @@ -725,7 +725,7 @@ exports.newHttpInterface = function newHttpInterface() { const octokit = new Octokit({ auth: token, - userAgent: 'Superalgos Beta 11' + userAgent: 'Superalgos Beta 12' }) const repo = 'Superalgos' diff --git a/Platform/PlatformApp.js b/Platform/PlatformApp.js index 6c1795f19..49431f932 100644 --- a/Platform/PlatformApp.js +++ b/Platform/PlatformApp.js @@ -143,7 +143,7 @@ exports.newPlatformApp = function newPlatformApp() { console.log('Http Interface .............................................. Listening at port ' + global.env.CLIENT_HTTP_INTERFACE_PORT) console.log('') - console.log("You are running Superalgos Beta 11") + console.log("You are running Superalgos Beta 12") console.log('') console.log("What's new? These are the main new features in this version:") console.log('') diff --git a/README.md b/README.md index 9d9a519e9..c82dca35e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Superalgos Beta 11 +# Superalgos Beta 12 ![contributors](https://img.shields.io/github/contributors-anon/Superalgos/Superalgos?label=Contributors) ![pull-activity](https://img.shields.io/github/issues-pr-closed-raw/Superalgos/Superalgos?color=blueviolet) diff --git a/platform.js b/platform.js index 0f4511990..c60ec42f4 100644 --- a/platform.js +++ b/platform.js @@ -17,7 +17,7 @@ if ( console.log('Superalgos') console.log('') - console.log('VERSION: Beta 11') + console.log('VERSION: Beta 12') console.log('') console.log('WEB: https://www.superalgos.org') console.log('') From 255315dd648013eed9bbf2fddf556e954f621785 Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Wed, 6 Oct 2021 13:03:45 +0200 Subject: [PATCH 69/82] This is my contribution to Superalgos --- ...rnance-how-to-001-load-a-user-profile.json | 72 ++++++++++++++++--- 1 file changed, 62 insertions(+), 10 deletions(-) diff --git a/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json b/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json index d9bb0f390..683e7680e 100644 --- a/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json +++ b/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json @@ -23,7 +23,8 @@ { "language": "ES", "text": "Supongamos que deseas declarar tu referente en el Referral Program, o tal vez desees apoyar el Contribution Claims de un compañero desarrollador.", - "updated": 1632025791877 + "updated": 1632025791877, + "style": "Text" } ] }, @@ -34,7 +35,8 @@ { "language": "ES", "text": "En cualquier caso, deberás cargar el User Profile de la persona en cuestión para que pueda establecer las referencias adecuadas.", - "updated": 1632025827657 + "updated": 1632025827657, + "style": "Callout" } ] }, @@ -46,7 +48,8 @@ { "language": "ES", "text": "O tal vez quieras cargar tu propio User Profile en uno de los Other Governance Workspaces. ¡Es el mismo proceso después de todo!", - "updated": 1632025920310 + "updated": 1632025920310, + "style": "Note" } ] }, @@ -58,12 +61,26 @@ { "style": "List", "text": "Find out the person's User Profile name. If you know the person's identity on Github.com, then that's all you need to know. If you don't, then you may need to contact the person and ask! If it's your profile, then no need to do much in this regard!", - "updated": 1630681681124 + "updated": 1630681681124, + "translations": [ + { + "language": "ES", + "text": "Encuentre el nombre del User Profile de la persona. Si conoce como se identifica la persona en Github.com, entonces eso es todo lo que necesita saber. Si no, puede necesitar contactar a la persona y preguntárselo! Si es su profile, entonces no es necesario hacer demaciado al respecto!", + "updated": 1633517388693 + } + ] }, { "style": "List", "text": "Verify that a file with the same name exists in the following path within the Superalgos folder in your hard drive...", - "updated": 1630597624699 + "updated": 1630597624699, + "translations": [ + { + "language": "ES", + "text": "Verifiqueque un archivo con el mismo nombre exista en la siguiente ruta dentro de Superalgos folder en su disco duro...", + "updated": 1633517151535 + } + ] }, { "style": "Json", @@ -72,24 +89,59 @@ { "style": "List", "text": "If the file doesn't exist, make sure you have the latest version of the app. If it's still missing after updating, let the person know and wait for the profile to be submitted.", - "updated": 1630597643975 + "updated": 1630597643975, + "translations": [ + { + "language": "ES", + "text": "Si el archivo no existe, asegúrese que tiene a última versión de la app. Si falta aún después de hacer la actualización, permite que la persona sepa y espere que el profile sea incluído.", + "updated": 1633517577195 + } + ] }, { "style": "List", "text": "If the file is there and assuming you already are in the workspace you wish to work with, go to the Plugins hierarchy and find the Dummy Plugin File under Plugin User Profiles > Governance Plugin Project.", - "updated": 1630597669225 + "updated": 1630597669225, + "translations": [ + { + "language": "ES", + "text": "Si el archivo aparece y suponiendo que ya se encuentre en el espacio del workspace con el que desea trabajar, vaya a la jerarquía de Plugins y encuentre el muñeco Plugin File debajo de Plugin User Profiles > Governance Plugin Project.", + "updated": 1633517833894 + } + ] }, { "style": "List", - "text": "Access the configuration of the Dummy profile and change the fileName property using the appropriate name (Github.com username). Replace the name of the node too, to avoid confusion later on." + "text": "Access the configuration of the Dummy profile and change the fileName property using the appropriate name (Github.com username). Replace the name of the node too, to avoid confusion later on.", + "translations": [ + { + "language": "ES", + "text": "Acceda a la configuración del muñeco del profile y modifique la propiedad del fileName usando el nombre apropriado (Github.com username). Reemplace el nombre del nodo también, para evitar confusiones más tarde.", + "updated": 1633518000717 + } + ] }, { "style": "List", - "text": "Save the Current Workspace with Ctrl + Alt + Shift + Key-S and refresh the page." + "text": "Save the Current Workspace with Ctrl + Alt + Shift + Key-S and refresh the page.", + "translations": [ + { + "language": "ES", + "text": "Guarde el Current Workspace con Ctrl + Alt + Shift + Key-S y refresque la página.", + "updated": 1633518088269 + } + ] }, { "style": "List", - "text": "Once the page reloads, you should see the new profile along with the rest! That's it!" + "text": "Once the page reloads, you should see the new profile along with the rest! That's it!", + "translations": [ + { + "language": "ES", + "text": "Una vez que la página se recargue, debería ver el profile nuevojunto con el resto de ellos! Eso es!", + "updated": 1633518182330 + } + ] } ] } \ No newline at end of file From ed2f8c7497713330de016d75dece632d2778dc36 Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Wed, 6 Oct 2021 13:50:30 +0200 Subject: [PATCH 70/82] This is my contribution to Superalgos --- .../governance-how-to-001-load-a-user-profile.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json b/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json index 683e7680e..1b305eaa5 100644 --- a/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json +++ b/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json @@ -105,8 +105,8 @@ "translations": [ { "language": "ES", - "text": "Si el archivo aparece y suponiendo que ya se encuentre en el espacio del workspace con el que desea trabajar, vaya a la jerarquía de Plugins y encuentre el muñeco Plugin File debajo de Plugin User Profiles > Governance Plugin Project.", - "updated": 1633517833894 + "text": "Si el archivo aparece y suponiendo que ya se encuentre en el espacio del workspace con el que desea trabajar, vaya a la jerarquía de Plugins y encuentre el Dummy Plugin File debajo de Plugin User Profiles > Governance Plugin Project.", + "updated": 1633520923071 } ] }, @@ -116,8 +116,8 @@ "translations": [ { "language": "ES", - "text": "Acceda a la configuración del muñeco del profile y modifique la propiedad del fileName usando el nombre apropriado (Github.com username). Reemplace el nombre del nodo también, para evitar confusiones más tarde.", - "updated": 1633518000717 + "text": "Acceda a la configuración del Dummy profile y modifique la propiedad del fileName usando el nombre apropriado (Github.com username). Reemplace el nombre del nodo también, para evitar confusiones más tarde.", + "updated": 1633521011506 } ] }, From f27034652e3263b165763aa21710a6affffbab48 Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Wed, 6 Oct 2021 13:56:07 +0200 Subject: [PATCH 71/82] This is my contribution to Superalgos --- ...o-002-establish-and-remove-references.json | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/Projects/Foundations/Schemas/Docs-Topics/H/How/How-To/how-to-002-establish-and-remove-references.json b/Projects/Foundations/Schemas/Docs-Topics/H/How/How-To/how-to-002-establish-and-remove-references.json index 3931af158..f4fd9dece 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/H/How/How-To/how-to-002-establish-and-remove-references.json +++ b/Projects/Foundations/Schemas/Docs-Topics/H/How/How-To/how-to-002-establish-and-remove-references.json @@ -9,7 +9,8 @@ { "language": "ES", "text": "Para establecer la referencia, click derecho en el primer nodo y arrástrelo cerca del nodo de destino. Entonces remueva la referencia, use el boton delink en el menú.", - "updated": 1633296472626 + "updated": 1633296472626, + "style": "Definition" } ] }, @@ -25,8 +26,9 @@ "translations": [ { "language": "ES", - "text": "Cuando esteé estableciendo una referencia, anilos grises muestran con cuales nodos puede establecer la referencia. En caso de que haya muchos nodos que aceptarían la referencia, el nodo que esté más cerca de donde se origina la referencia está destacado con un anillo dorado. Liberando el botón del mouse establece a referencia con el nodo destacado.", - "updated": 1633296500174 + "text": "Cuando esté estableciendo una referencia, anilsos grises muestran con cuales nodos puede establecer la referencia. En caso de que haya muchos nodos que aceptarían la referencia, el nodo que esté más cerca de donde se origina la referencia está destacado con un anillo dorado. Liberando el botón del mouse establece a referencia con el nodo destacado.", + "updated": 1633521217701, + "style": "Text" } ] }, @@ -41,8 +43,9 @@ "translations": [ { "language": "ES", - "text": "La referencia es visualmente representada por una leve linea de puntos grises. Esta linea es vicible solo cuando ambos extremos de la referencia son visibles.", - "updated": 1633295706095 + "text": "La referencia es visualmente representada por una leve linea de puntos grises. Esta linea es visible solo cuando ambos extremos de la referencia son visibles.", + "updated": 1633521251780, + "style": "Text" } ] }, @@ -53,8 +56,9 @@ "translations": [ { "language": "ES", - "text": "Para remover una referencia o deslinkear dos nodos, use el botón delink button del nodo dondela referencia se origina.", - "updated": 1633295798732 + "text": "Para remover una referencia o deslinkear dos nodos, use el botón delink button del nodo donde la referencia se origina.", + "updated": 1633521278527, + "style": "Text" } ] }, @@ -79,7 +83,8 @@ { "language": "ES", "text": "El proceso es exactamente el mismo. Todo lo que necesita es manejar unos pocos trucos para que pueda arrastrar uno de los nodos todo el recorrido hasta donde el segundo nodo está.", - "updated": 1633295934654 + "updated": 1633295934654, + "style": "Text" } ] }, @@ -96,7 +101,8 @@ { "language": "ES", "text": "Estos UI trucos pueden hacer tu vida más fácil:", - "updated": 1633295979755 + "updated": 1633295979755, + "style": "Text" } ] }, @@ -108,7 +114,8 @@ { "language": "ES", "text": "Use el design space map tantas veces como sea necesario para encontrar el camino desde una jeraquía a la otra.", - "updated": 1633296062866 + "updated": 1633296062866, + "style": "List" } ] }, @@ -119,7 +126,8 @@ { "language": "ES", "text": "Fije el nodo que va a mover a través del espacio de diseño, para que pueda soltarlo en cualquier punto para chequear las direcciones en el mapa del espacio de diseño.", - "updated": 1633296213030 + "updated": 1633296213030, + "style": "List" } ] }, @@ -130,7 +138,8 @@ { "language": "ES", "text": "Use Ctrl / Command + arteclas de flechas para arrastrar el nodo a través dela pantalla despues de clickear en el con el mouse. Mantenga las teclas presionadas y el nodo vuela!", - "updated": 1633296325908 + "updated": 1633296325908, + "style": "List" } ] }, @@ -140,8 +149,9 @@ "translations": [ { "language": "ES", - "text": "Remueva el ijado ona vez que la referencia sea establecida para que el nodo vuelva a su lugar.", - "updated": 1633296417854 + "text": "Remueve el fijado ona vez que la referencia sea establecida para que el nodo vuelva a su lugar.", + "updated": 1633521325505, + "style": "List" } ] } From 03b2b1ffdaf7f465fe77b0763b3e02856c422405 Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Wed, 6 Oct 2021 14:30:19 +0200 Subject: [PATCH 72/82] This is my contribution to Superalgos --- .../community-building-programs.json | 102 +++++++++++++++--- 1 file changed, 90 insertions(+), 12 deletions(-) diff --git a/Projects/Governance/Schemas/Docs-Nodes/C/Community/Community-Building-Programs/community-building-programs.json b/Projects/Governance/Schemas/Docs-Nodes/C/Community/Community-Building-Programs/community-building-programs.json index b00a6f0a5..820c2acb3 100644 --- a/Projects/Governance/Schemas/Docs-Nodes/C/Community/Community-Building-Programs/community-building-programs.json +++ b/Projects/Governance/Schemas/Docs-Nodes/C/Community/Community-Building-Programs/community-building-programs.json @@ -7,7 +7,8 @@ { "language": "ES", "text": "Superalgos prospera a través de contribuciones y colaboración. Diseñamos el Community Building Programs para fomentar una comunidad en la que los miembros siempre estén dispuestos a ayudar y retribuir. El nodo puede generar los nodos Referral Program, Support Program, y Mentorship Program.", - "updated": 1630896389287 + "updated": 1630896389287, + "style": "Definition" } ] }, @@ -20,55 +21,132 @@ { "style": "Success", "text": "Learn more about how Token Power Flows into these programs!", - "updated": 1630218909731 + "updated": 1630218909731, + "translations": [ + { + "language": "ES", + "text": "Aprenda más a cerca de como fluye el Token Power en estos programas!", + "updated": 1633521539329 + } + ] }, { "style": "Text", - "text": "Each of the Community Building Programs has an associated Rewards Pool and a Bonus Pool under the Governance Programs > Community Building Programs section of the Superalgos Pools hierarchy." + "text": "Each of the Community Building Programs has an associated Rewards Pool and a Bonus Pool under the Governance Programs > Community Building Programs section of the Superalgos Pools hierarchy.", + "translations": [ + { + "language": "ES", + "text": "Cada programa del Community Building Programs tiene asociada una Rewards Pool y un Bonus Pool debajo de Governance Programs > Community Building Programs en la sección de la jerarquía de Superalgos Pools.", + "updated": 1633521703488 + } + ] }, { "style": "Note", "text": "The incentives entailed in a Bonus Pool are explained in the Tokens Bonus node.", - "updated": 1630170463942 + "updated": 1630170463942, + "translations": [ + { + "language": "ES", + "text": "Los incentivos implicados en una Bonus Pool están explicados en el nodo Tokens Bonus.", + "updated": 1633521794403 + } + ] }, { "style": "Text", "text": "Let's explore how each Rewards Pool is distributed in the case of Community Building Programs. In general terms, the Referral Program, Support Program, and Mentorship Program all have the following common rules:", - "updated": 1630399976367 + "updated": 1630399976367, + "translations": [ + { + "language": "ES", + "text": "Exploremos como cada Rewards Pool es distribuida en el caso de los programas de la Community Building Programs. En términos generales, el Referral Program, Support Program y el Mentorship Program todos tienen las siguientes reglas comunes:", + "updated": 1633522008747 + } + ] }, { "style": "List", "text": "When your profile is referenced by others through their User Referrer, User Supporter, or User Mentor nodes, they pass on 10% of the Referral Power, Support Power, or Mentorship Power available in the node to you. This is your Incoming Power in the corresponding program.", - "updated": 1630166954607 + "updated": 1630166954607, + "translations": [ + { + "language": "ES", + "text": "Cuando su profile es referenciado por otros a través de los nodos de su User Referrer, User Supporter, or User Mentor, ellos pasan un 10% del Referral Power, Support Power, or Mentorship Power disponible en el nodo a usted. Este es su Incoming Power en el programa correspondiente.", + "updated": 1633522227632 + } + ] }, { "style": "List", "text": "Your Incoming Power is added to your Own Power in the corresponding program, so that you may pass on more power to other User Profiles. Like in the reverse case, when you reference other User Profiles, you pass on 10% of the power that reaches the node establishing the reference.", - "updated": 1630166856996 + "updated": 1630166856996, + "translations": [ + { + "language": "ES", + "text": "Su Incoming Power es agregado a su propio Own Power en el programa correspondiente, para que entonces pueda enviar más power a otros User Profiles. Como en el caso contrario, cuando referencia a otros su User Profiles, usted pasa un 10% del power que alcanza el nodo que establece la referencia.", + "updated": 1633522374508 + } + ] }, { "style": "Important", "text": "This passing of 10% of the power from one user to the next has the effect of rewarding collaboration chains. ", - "updated": 1630683048349 + "updated": 1630683048349, + "translations": [ + { + "language": "ES", + "text": "Este pasar el 10% del power de un usuario al siguiente tiene el efecto de recompensar las cadenas de colaboración.", + "updated": 1633522479558 + } + ] }, { "style": "Callout", "text": "For instance, Alice tells her friend Bob about Superalgos. When Bob eventually sets up his User Profile, he declares Alice as his referrer. This means that Alice gets 10% of the Referral Power that Bob drives to his User Referrer node. Then, Bob brings his friend Charly to Superalgos. Charly sets up his profile and declares Bob as his referrer. So now Bob gets 10% of the Referral Power that Charly drives to his User Referrer node. ", - "updated": 1630683087674 + "updated": 1630683087674, + "translations": [ + { + "language": "ES", + "text": "Por ejemplo, Alice le habla a su amigo Bob a cerca de Superalgos. Cuando Bob eventualmente programa su User Profile, declara que Alice es su referido. Esto significa que Alice obtiene un 10% del Referral Power que Bob dirige a su nodo User Referrer. Entonces, Bob trae a su amigo Charly a Superalgos. Charly configura su profile y declara a Bob como su referido. Entonces ahora Bob obtiene un 10% del Referral Power que Charly dirige a su nodo de User Referrer.", + "updated": 1633522898254 + } + ] }, { "style": "Success", "text": "Can you see what happens with Alice's Incoming Referral Power? That's it! She gets 10% of Bob's power, which includes 10% of Charly's power and son on!", - "updated": 1630683111245 + "updated": 1630683111245, + "translations": [ + { + "language": "ES", + "text": "Puede ver lo que sucede con el Incoming Referral Power de Alice? Eso es! Ella obtiene un 10% del power de Bob, que incluye un 10% del power de Charly y así sucesivamente!", + "updated": 1633523067803 + } + ] }, { "style": "Note", - "text": "Pretty much the same happens with the Support Program and the Mentorship Program." + "text": "Pretty much the same happens with the Support Program and the Mentorship Program.", + "translations": [ + { + "language": "ES", + "text": "Prácticamente lo mismo ocurre con el Support Program y el Mentorship Program.", + "updated": 1633523110557 + } + ] }, { "style": "Text", "text": "The Incoming Power you get from other users is in a Direct Proportion to the number of tokens you get from the corresponding program Rewards Pool. The calculation is based on a Rule of Three, and the result is displayed under the Tokens Awarded node of the corresponding program.", - "updated": 1630682945130 + "updated": 1630682945130, + "translations": [ + { + "language": "ES", + "text": "El Incoming Power que obtiene de otros usuarios está en una Direct Proportion al número de tokens que obtiene del programa corespondiente de la Rewards Pool. El cálculo está basado en una Rule of Three, y el resutado es mostrado debajo del nodo de Tokens Awarded del programa correspondiente.", + "updated": 1633523351316 + } + ] }, { "style": "Json", From 1ec3f656a01f8210b20a9f7be5b8bbcb0bd350eb Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Wed, 6 Oct 2021 14:50:53 +0200 Subject: [PATCH 73/82] This is my contribution to Superalgos --- .../Community-Mods/community-mods.json | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Projects/Governance/Schemas/Docs-Concepts/C/Community/Community-Mods/community-mods.json b/Projects/Governance/Schemas/Docs-Concepts/C/Community/Community-Mods/community-mods.json index 6c7b216ba..593f1bfaf 100644 --- a/Projects/Governance/Schemas/Docs-Concepts/C/Community/Community-Mods/community-mods.json +++ b/Projects/Governance/Schemas/Docs-Concepts/C/Community/Community-Mods/community-mods.json @@ -2,7 +2,14 @@ "type": "Community Mods", "definition": { "text": "If you have a knack for lovingly explaining things, find pleasure in helping people, and wish to give back to the project, becoming a Community Mod may be great for you and the project!", - "updated": 1630005046805 + "updated": 1630005046805, + "translations": [ + { + "language": "ES", + "text": "Si tiene la habilidad de explicar las cosas amorosamente, disfruta de ayudar a la gente, y desea devolver al proyecto convitiéndose en un Community Mod ( moderador de la comunidad) puede ser muy bueno para usted y para el proyecto!", + "updated": 1633524089504 + } + ] }, "paragraphs": [ { @@ -13,7 +20,14 @@ { "style": "Callout", "text": "To become a Community Mod, you must go deep into the rabbit hole, study the Docs and tutorials, and start using the system. It takes a deep understanding of how things work before you’re able to explain it to someone else. That said, it doesn’t take much to help newcomers with the easier questions. You may get involved and participate in the Community Group and Support Group, and, at some point, we’ll draft you to join the team!", - "updated": 1630495449816 + "updated": 1630495449816, + "translations": [ + { + "language": "ES", + "text": "Para convertirse en un Community Mod, debe ir más profundo al meollo de la cuestión, estudie los Docs y los tutoriales, y comience a usar el sistema. Conlleva un entendimiento más profundo de como funcionan las cosas antes de que esté en condiciones de explicarle a alguién más. Dicho esto, no se necesita demaciado para ayudar a las preguntas más faciles de los recién llegados. Puede comprometerse y participar en el Community Group y el Support Group, y, en algún momento, lo invitaremos a formar parte del equipo!", + "updated": 1633524555342 + } + ] } ] } \ No newline at end of file From 59f0202485ada99250cc28add63c777eb8d2ffbb Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Wed, 6 Oct 2021 16:27:55 +0200 Subject: [PATCH 74/82] This is my contribution to Superalgos --- .../Referral-Program/referral-program.json | 36 ++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/Projects/Governance/Schemas/Docs-Nodes/R/Referral/Referral-Program/referral-program.json b/Projects/Governance/Schemas/Docs-Nodes/R/Referral/Referral-Program/referral-program.json index a8af0e6ff..c77421941 100644 --- a/Projects/Governance/Schemas/Docs-Nodes/R/Referral/Referral-Program/referral-program.json +++ b/Projects/Governance/Schemas/Docs-Nodes/R/Referral/Referral-Program/referral-program.json @@ -2,7 +2,14 @@ "type": "Referral Program", "definition": { "text": "The referral program incentivizes the promotion of the project, either by word-of-mouth or “en masse” through articles, social media posts, videos, and other forms of influencer marketing.", - "updated": 1630227795694 + "updated": 1630227795694, + "translations": [ + { + "language": "ES", + "text": "El referral program incentiva la promoción del proyecto, ya sea de boca en boca o en masa a través de artículos, posteos en redes sociales, videos y otras formas de influencias en marketing .", + "updated": 1633524918233 + } + ] }, "paragraphs": [ { @@ -17,11 +24,25 @@ }, { "style": "Text", - "text": "With this program, you may earn Superalgos SA Tokens for every user you refer to the project, and also for the users they refer!" + "text": "With this program, you may earn Superalgos SA Tokens for every user you refer to the project, and also for the users they refer!", + "translations": [ + { + "language": "ES", + "text": "Con este programa, puede ganar Superalgos SA Tokens por cada usuario que usted refiera al proyecto, y tambien por los usuarios que ellos referencien!", + "updated": 1633525009280 + } + ] }, { "style": "Callout", - "text": "To participate, you must spawn the Referral Program and declare your referrer. To do that, add a User Referrer node and use it to establish a reference to the User Profile of the person that referred you to Superalgos. If you have more than one referrer, simply add more User Referrer nodes." + "text": "To participate, you must spawn the Referral Program and declare your referrer. To do that, add a User Referrer node and use it to establish a reference to the User Profile of the person that referred you to Superalgos. If you have more than one referrer, simply add more User Referrer nodes.", + "translations": [ + { + "language": "ES", + "text": "Para participar, debe extender el programa Referral Program y declarar su referido. Para hacer esto, agregue un nodo al User Referrer y úselo para establecer el User Profile de la persona que lo refirió a Superalgos. Si tiene más de un referido, simplemente agregue más nodos al User Referrer.", + "updated": 1633530224609 + } + ] }, { "style": "Text", @@ -29,7 +50,14 @@ }, { "style": "Text", - "text": "Declaring your referrers is the best way to thank the people that may have written that article or tweet, produced that video, maintained the website, or told you about Superalgos! Without them, you probably wouldn’t be here yet!" + "text": "Declaring your referrers is the best way to thank the people that may have written that article or tweet, produced that video, maintained the website, or told you about Superalgos! Without them, you probably wouldn’t be here yet!", + "translations": [ + { + "language": "ES", + "text": "Declarar sus referidos es el mejor modo de agradecerle a la gente que escribió el artículo o tweeteo, produjo ese video, realizó el mantenimiento de la web, o te habló a cerca de Superalgos! Sin ellos, probablemente no estaría aquí todavía!", + "updated": 1633530419731 + } + ] }, { "style": "Include", From 060418e4d61139e50c2cffc9dc3698863bb32d64 Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Wed, 6 Oct 2021 17:03:34 +0200 Subject: [PATCH 75/82] This is my contribution to Superalgos --- ...to-governance-001-governance-overview.json | 59 ++++++++++++------- ...nance-002-participating-in-governance.json | 36 +++++++++-- 2 files changed, 71 insertions(+), 24 deletions(-) diff --git a/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json b/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json index 765df4065..4de5e2585 100644 --- a/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json +++ b/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json @@ -9,7 +9,8 @@ { "language": "ES", "text": "La gobernanza del proyecto de Superalgos está distribuída entre todos los miembros de la comunidad que estén dispuestos a participar. Puede comprometerse de múltiples maneras, ayudar a dirigir el desarrollo en las direcciones deseadas, y contribuir a nutrir una comunidad saludable.", - "updated": 1633345029161 + "updated": 1633345029161, + "style": "Definition" } ] }, @@ -22,7 +23,8 @@ { "language": "ES", "text": "Para participar en la gobernanza, los miembros de la comunidad apalancan su tenencia de Superalgos SA Token, ejerciendo influencia proporcional a su Token Power y a su Reputation. La inlfuencia combinada de todos los tenedores de token que participan en la gobernancia determinan, entre otras cosas:", - "updated": 1633345582953 + "updated": 1633345582953, + "style": "Text" } ] }, @@ -33,7 +35,8 @@ { "language": "ES", "text": "Que Positions, Features, Assets, o actividades de desarrollo de proyectos, en general, están incentivados y cómo.", - "updated": 1633348402852 + "updated": 1633348402852, + "style": "List" } ] }, @@ -44,7 +47,8 @@ { "language": "ES", "text": "Que contribuyentes son pagados por cuales contribuciones.", - "updated": 1633345751024 + "updated": 1633345751024, + "style": "List" } ] }, @@ -55,7 +59,8 @@ { "language": "ES", "text": "Qué programas se financian y cómo", - "updated": 1633345784026 + "updated": 1633345784026, + "style": "List" } ] }, @@ -66,7 +71,8 @@ { "language": "ES", "text": "Puede ejercer su influencia de forma dinámica, ya que puede redirigir su Token Power en cualquier momento. La distribución de Token Power en cada lanzamiento del software — atado al correspondiente Superalgos SA Token Distribution Event — determina cómo se distribuyen los tokens asignados al lanzamiento.", - "updated": 1633345986132 + "updated": 1633345986132, + "style": "Text" } ] }, @@ -77,7 +83,8 @@ { "language": "ES", "text": "El Governance Project está diseñado como un sistema flexible que permite a la comunidad ejercer influencia en direcciones arbitrarias de manera dinámica. Permite que la gobernanza evolucione con el proyecto. también promueve la innovación sin permiso, ya que los Colaboradores pueden proponer nuevas áreas de desarrollo y conducir a la comunidad incentivar expansion a lo largo de lineas nuevas.", - "updated": 1633346387045 + "updated": 1633346387045, + "style": "Text" } ] }, @@ -88,7 +95,8 @@ { "language": "ES", "text": "Una comunidad comprometida con la gobernanza es fundamental para el desarrollo del proyecto, por lo tanto se incentiva la participación, en otras palabras, ganará Superalgos SA Tokens si forma parte de la gobernanza de Superalgos.", - "updated": 1633346519203 + "updated": 1633346519203, + "style": "Note" } ] }, @@ -103,7 +111,8 @@ { "language": "ES", "text": "El sistema de gobernanza se implementa con Superalgos, haciendo uso de los mismos recursos de secuencias de comandos visuale, estructuras de datos jerárquicos, y conceptos tales como referencias que conforman el paradigma de Superalgos con el que está familiarizado.", - "updated": 1633346787559 + "updated": 1633346787559, + "style": "Text" } ] }, @@ -114,7 +123,8 @@ { "language": "ES", "text": "Como tal, la gobernanza no requiere el uso de contratos inteligentes para hacer cumplir reglas inmutables. Por el contrario, en Superalgos, la gobernanza es una noción en constante evolución, muy parecida al resto del proyecto. ", - "updated": 1633346878247 + "updated": 1633346878247, + "style": "Text" } ] }, @@ -126,7 +136,8 @@ { "language": "ES", "text": "Esta flexibilidad es una característica crucial que nos permitirá hacer evolucionar el sistema de gobernanza, adaptar la teoría del juego detrás de él y corregir cualquier vulnerabilidad que los malos actores puedan encontrar con el tiempo", - "updated": 1633346945113 + "updated": 1633346945113, + "style": "Callout" } ] }, @@ -138,7 +149,8 @@ { "language": "ES", "text": "La gobernanza está definida a través de múltiples Governance Workspaces que los usuarios pueden cargar y contribuir con. Estos espacios de trabajo presentan las definiciones de varias jerarquías que determinan la relación de todos los conceptos que afectan la gobernanza.", - "updated": 1633347120583 + "updated": 1633347120583, + "style": "Text" } ] }, @@ -150,7 +162,8 @@ { "language": "ES", "text": "Para participar en la gobernanaza, los usuarios deben configurar y enviar un User Profile plugin que define cómo pretenden ejercer la influencia conferida por sus tenencias de Superalgos SA Token. La inlfuencia y participación está definida mediante diferentes tipos de programas, votos y declaraciones.", - "updated": 1633347353982 + "updated": 1633347353982, + "style": "Text" } ] }, @@ -162,7 +175,8 @@ { "language": "ES", "text": "El sistema de gobernanza computa los votos y las declaraciones en tiempo real, mostrando una vista previa de lo que la distribucion showing a preview of what the distribution puede parecer, en el UI.", - "updated": 1633347466937 + "updated": 1633347466937, + "style": "Text" } ] }, @@ -186,7 +200,8 @@ { "language": "ES", "text": "Porque las definiciones que afectan a la gobernanza envia como plugin con el software, el proceso es transparente y auditable.", - "updated": 1633347687363 + "updated": 1633347687363, + "style": "Text" } ] }, @@ -198,7 +213,8 @@ { "language": "ES", "text": "cualquier usuario puede, en cualquier momento, cargar el correspondiente Plugin Workspaces y visualizar and visualizecómo la influencia está siendo ejercida por todos participantes titulares de Superalgos SA Token..", - "updated": 1633347841894 + "updated": 1633347841894, + "style": "List" } ] }, @@ -209,7 +225,8 @@ { "language": "ES", "text": "Cualquier usuario puede verificar Any user may verify todas las métricas gestionadas por el Governance Project en las tablas desplegadas en el Governace Tab.", - "updated": 1633347961533 + "updated": 1633347961533, + "style": "List" } ] }, @@ -220,7 +237,8 @@ { "language": "ES", "text": "Cualquier usuario puede hacer correr una simulación de el proceso de distribución de Superalgos SA Token y verificar verify cómo se distribuirán los tokens asignados a la próxima versión.", - "updated": 1633348037956 + "updated": 1633348037956, + "style": "List" } ] }, @@ -231,8 +249,9 @@ "translations": [ { "language": "ES", - "text": "Cualquier usuario puede obtener (mediante GitHub) y cargar versiones históricas del software, y hacer correr una simulación de Superalgos SA Token Distribution Event para verificar como los tokens han sido distribuidos ten lasnzamientos anteriores. Note quet, en este caso, el número absoluto de votos puede no ser válido ya que las tenencias de token habrán variado, de todas maneras, cualquier usuario puede validar la distribución relativa.", - "updated": 1633348350518 + "text": "Cualquier usuario puede obtener (mediante GitHub) y cargar versiones históricas del software, y hacer correr una simulación de Superalgos SA Token Distribution Event para verificar como los tokens han sido distribuidos ten lanzamientos anteriores. Note quet, en este caso, el número absoluto de votos puede no ser válido ya que las tenencias de token habrán variado, de todas maneras, cualquier usuario puede validar la distribución relativa.", + "updated": 1633531601031, + "style": "List" } ] } diff --git a/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-002-participating-in-governance.json b/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-002-participating-in-governance.json index 79273027b..0029c80b2 100644 --- a/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-002-participating-in-governance.json +++ b/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-002-participating-in-governance.json @@ -4,22 +4,50 @@ "type": "Participating in Governance", "definition": { "text": "To participate in governance, you must set up your User Profile — a hierarchy that defines how you intend to use the Token Power conferred by your token holdings.", - "updated": 1624698139967 + "updated": 1624698139967, + "translations": [ + { + "language": "ES", + "text": "Para participar en la gobernanza, debes configurar tu User Profile — una jerarquía que define cómo puede usar el the Token Power conferido por tu tenencia de token.", + "updated": 1633531879183 + } + ] }, "paragraphs": [ { "style": "Text", "text": "How you use your Token Power is defined in several programs within the hierarchy. For instance, the Claims Program lets you present claims for the work you’ve done. We’ll cover all programs in detail.", - "updated": 1624698150117 + "updated": 1624698150117, + "translations": [ + { + "language": "ES", + "text": "Cómo use su Token Power está definido por diferentes programas incluídos en la jerarquía. Por ejemplo, los Claims Program le permite presentar declaraciones por el trabajo qe haya realizado. Cubriremos todos los programas en detalle.", + "updated": 1633532034348 + } + ] }, { "style": "Text", - "text": "Your User Profile points to a Superalgos SA Token address you create from within Superalgos. You validate your address by signing a cryptographic proof, also from within Superalgos, so that the system becomes aware of the number of tokens in the address, and assigns your profile an equivalent amount of Token Power." + "text": "Your User Profile points to a Superalgos SA Token address you create from within Superalgos. You validate your address by signing a cryptographic proof, also from within Superalgos, so that the system becomes aware of the number of tokens in the address, and assigns your profile an equivalent amount of Token Power.", + "translations": [ + { + "language": "ES", + "text": "Sus puntos del User Profile marcan una dirección de Superalgos SA Token que usted crea desde dentro de Superalgos. Valida su dirección confirmando una prueba de firma criptográfica, también desde Superalgos, entonces el sistema se da cuenta de la cantidad de tokens en su dirección, y le asigna a su profile el monto equivalente de Token Power.", + "updated": 1633532428398 + } + ] }, { "style": "Success", "text": "The address you generate is also the address to which the project will send the tokens you earn for your contributions. We call it you Governance Address.", - "updated": 1629993655810 + "updated": 1629993655810, + "translations": [ + { + "language": "ES", + "text": "TLa dirección que genere es también la dirección donde el proyecto le envie los tokens que haya ganado por sus contribuciones. Nosotros la llamamos su Governance Address ( dirección de gobernanza).", + "updated": 1633532569964 + } + ] } ] } \ No newline at end of file From 9d2acc5a58a5da831f5c0679b06430b56d15d64a Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Wed, 6 Oct 2021 17:07:48 +0200 Subject: [PATCH 76/82] This is my contribution to Superalgos --- .../T/Token/Token-Power/token-power.json | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Projects/Governance/Schemas/Docs-Concepts/T/Token/Token-Power/token-power.json b/Projects/Governance/Schemas/Docs-Concepts/T/Token/Token-Power/token-power.json index bf016317f..07b21fc00 100644 --- a/Projects/Governance/Schemas/Docs-Concepts/T/Token/Token-Power/token-power.json +++ b/Projects/Governance/Schemas/Docs-Concepts/T/Token/Token-Power/token-power.json @@ -2,7 +2,14 @@ "type": "Token Power", "definition": { "text": "Your Token Power is equal to the number of Superalgos SA Tokens in your Governance Address, and is a measure of the influence you have in relation with the influence of the rest of Contributors participating in governance.", - "updated": 1624780307783 + "updated": 1624780307783, + "translations": [ + { + "language": "ES", + "text": "Su Token Power es igual al número de Superalgos SA Tokens en su Governance Address, y es una medida de la influencia que tiene con respecto a la influencia del resto de los contribuyentes participando de la gobernanza.", + "updated": 1633532803325 + } + ] }, "paragraphs": [ { @@ -12,7 +19,14 @@ }, { "style": "Callout", - "text": "Your Token Power is equal to the number of Superalgos SA Tokens in your Governance Address, and is a measure of the influence you have in relation with the influence of the rest of Contributors participating in governance." + "text": "Your Token Power is equal to the number of Superalgos SA Tokens in your Governance Address, and is a measure of the influence you have in relation with the influence of the rest of Contributors participating in governance.", + "translations": [ + { + "language": "ES", + "text": "Su Token Power es igual al número de Superalgos SA Tokens en su Governance Address, y es una medida de la influencia que tiene con respecto a la influencia del resto de los contribuyentes participando de la gobernanza.", + "updated": 1633532837434 + } + ] } ] } \ No newline at end of file From 2fbcd3fa57ae41d0c999a5912e95eb7f32871910 Mon Sep 17 00:00:00 2001 From: ssplatt Date: Wed, 6 Oct 2021 12:24:18 -0400 Subject: [PATCH 77/82] fix twitter bot reference name to fix 'delete node' --- Projects/Foundations/Schemas/App-Schema/twitter-bot.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Projects/Foundations/Schemas/App-Schema/twitter-bot.json b/Projects/Foundations/Schemas/App-Schema/twitter-bot.json index 27f8ab800..231abf004 100644 --- a/Projects/Foundations/Schemas/App-Schema/twitter-bot.json +++ b/Projects/Foundations/Schemas/App-Schema/twitter-bot.json @@ -37,5 +37,5 @@ "compatibleTypes": "->Social Bots->" }, "childrenNodesProperties": [], - "propertyNameAtParent": "TwitterBots" + "propertyNameAtParent": "twitterBots" } From 87d2252c4331b1a087ebc823e899fc7259e444e4 Mon Sep 17 00:00:00 2001 From: ssplatt Date: Wed, 6 Oct 2021 12:48:54 -0400 Subject: [PATCH 78/82] update path to persistent data to match new locations --- Docker/Dockerfile | 2 +- Docker/docker-compose.yml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Docker/Dockerfile b/Docker/Dockerfile index 81d60a6bd..1448d6ec2 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -12,5 +12,5 @@ RUN apk add --no-cache --virtual .build-deps make g++ \ USER superalgos EXPOSE 34248 EXPOSE 18041 -VOLUME ["/app/Data-Storage", "/app/Log-Files", "/app/My-Workspaces"] +VOLUME ["/app/Platform/My-Data-Storage", "/app/Platform/My-Log-Files", "/app/Platform/My-Workspaces"] ENTRYPOINT ["node", "platform", "noBrowser"] diff --git a/Docker/docker-compose.yml b/Docker/docker-compose.yml index 40efbd552..e05751cc3 100644 --- a/Docker/docker-compose.yml +++ b/Docker/docker-compose.yml @@ -11,7 +11,7 @@ services: - '34248:34248' - '18041:18041' volumes: - - ../Data-Storage:/app/Data-Storage - - ../Log-Files:/app/Log-Files - - ../My-Workspaces:/app/My-Workspaces + - ../Platform/My-Data-Storage:/app/Platform/My-Data-Storage + - ../Platform/My-Log-Files:/app/Platform/My-Log-Files + - ../Platform/My-Workspaces:/app/Platform/My-Workspaces restart: on-failure From db4ad1b0e4a356e7b0e20d0655ea7d54498f1adf Mon Sep 17 00:00:00 2001 From: eNut Date: Wed, 6 Oct 2021 19:47:00 +0200 Subject: [PATCH 79/82] This is my contribution to Superalgos --- Projects/Governance/Plugins/User-Profiles/e-Nut.json | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Projects/Governance/Plugins/User-Profiles/e-Nut.json b/Projects/Governance/Plugins/User-Profiles/e-Nut.json index fc875dd70..c111f31a3 100644 --- a/Projects/Governance/Plugins/User-Profiles/e-Nut.json +++ b/Projects/Governance/Plugins/User-Profiles/e-Nut.json @@ -137,7 +137,9 @@ "referenceParentCombinedNodePath": [ [ "Julian-Molina", - "User Profile" + "User Profile", + "Governance", + "b85aaac1-0708-4aec-97f9-bc3cc70e530a" ] ] } @@ -462,12 +464,12 @@ "id": "9d54ff41-1328-4e8b-b7b3-e71a5b0404df", "savedPayload": { "position": { - "x": 26796.666666666668, - "y": 12039 + "x": 26666.666666666668, + "y": 19850 }, "targetPosition": { - "x": 26796.666666666668, - "y": 12039 + "x": 26666.666666666668, + "y": 19850 }, "floatingObject": { "isPinned": false, From f789e2d57826d0cb86173d04cec709850d64de7b Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Wed, 6 Oct 2021 20:01:24 +0200 Subject: [PATCH 80/82] This is my contribution to Superalgos --- ...s-001-beta-11-claim-governance-system.json | 99 ++++++++++++++++--- 1 file changed, 88 insertions(+), 11 deletions(-) diff --git a/Projects/Governance/Schemas/Docs-Topics/B/Beta/Beta-11-Claims/beta-11-claims-001-beta-11-claim-governance-system.json b/Projects/Governance/Schemas/Docs-Topics/B/Beta/Beta-11-Claims/beta-11-claims-001-beta-11-claim-governance-system.json index ea59210be..6f08ed864 100644 --- a/Projects/Governance/Schemas/Docs-Topics/B/Beta/Beta-11-Claims/beta-11-claims-001-beta-11-claim-governance-system.json +++ b/Projects/Governance/Schemas/Docs-Topics/B/Beta/Beta-11-Claims/beta-11-claims-001-beta-11-claim-governance-system.json @@ -4,7 +4,14 @@ "type": "Beta 11 Claim - Governance System", "definition": { "text": "Governance of the Superalgos Project is distributed among all members of the Superalgos Community willing to participate. The Governance System is built-in the Superalgos Platform, so participating is quite straightforward.", - "updated": 1628249171408 + "updated": 1628249171408, + "translations": [ + { + "language": "ES", + "text": "La gobernanza del proyecto de Superalgos Project es distribuída sentre todos los miembros de la Superalgos Community que deseen participar. El Governance System ( sistema de gobernanza) seconstruye en la Superalgos Platform, por lo que participar es bastante sencillo.", + "updated": 1633533118734 + } + ] }, "paragraphs": [ { @@ -18,11 +25,25 @@ }, { "style": "Text", - "text": "To participate in governance, community members leverage their Superalgos SA Token holdings, exerting influence proportional to their Token Power. The combined influence of all token holders participating in governance determines how the token is distributed upon each release." + "text": "To participate in governance, community members leverage their Superalgos SA Token holdings, exerting influence proportional to their Token Power. The combined influence of all token holders participating in governance determines how the token is distributed upon each release.", + "translations": [ + { + "language": "ES", + "text": "Para participar en la gobernanza, los miembros de la comunidad, promedian su tentencia de Superalgos SA Token, ejerciendo una influencia proporcional a su Token Power. La influencia combinada de todos los que tienen token participando en la gobernanza determina como el token se distribuye encada liberación.", + "updated": 1633533342249 + } + ] }, { "style": "Success", - "text": "Even if you have no tokens to start with, the Community will delegate Token Power to your profile so that you may get started!" + "text": "Even if you have no tokens to start with, the Community will delegate Token Power to your profile so that you may get started!", + "translations": [ + { + "language": "ES", + "text": "Aún cuando no tenga tokens para comenzar, la comunidad delegará Token Power a su profile para que pueda comenzar!", + "updated": 1633533429717 + } + ] }, { "style": "Subtitle", @@ -31,19 +52,47 @@ }, { "style": "List", - "text": "What Positions, Features, Assets, or project-development activities, in general, are incentivized and how." + "text": "What Positions, Features, Assets, or project-development activities, in general, are incentivized and how.", + "translations": [ + { + "language": "ES", + "text": "Qué Positions, Features, Assets, o actividades de desarrollo del proyecto, en general, son incentivados y cómo.", + "updated": 1633533525021 + } + ] }, { "style": "List", - "text": "Which Contributors are compensated for which Contributions." + "text": "Which Contributors are compensated for which Contributions.", + "translations": [ + { + "language": "ES", + "text": "Qué Contribuyentes son recompensados y por cuáles contribuciones.", + "updated": 1633533586785 + } + ] }, { "style": "List", - "text": "What Programs are funded and how." + "text": "What Programs are funded and how.", + "translations": [ + { + "language": "ES", + "text": "Qué Programs son creados y cómo.", + "updated": 1633533612445 + } + ] }, { "style": "Text", - "text": "Governance is designed as a flexible system that allows the Community to dynamically direct influence in arbitrary directions." + "text": "Governance is designed as a flexible system that allows the Community to dynamically direct influence in arbitrary directions.", + "translations": [ + { + "language": "ES", + "text": "La gobernanza está diseñada como un sistema flexible que la comunidad dinámicamente dirija influencia en direcciones arbitrarias.", + "updated": 1633533779710 + } + ] }, { "style": "Subtitle", @@ -52,11 +101,25 @@ }, { "style": "Text", - "text": "A Community engaged in governance is crucial for the development of the project, therefore participation is incentivized. In other words, you will earn Superalgos SA Tokens simply by taking part in the governance of Superalgos." + "text": "A Community engaged in governance is crucial for the development of the project, therefore participation is incentivized. In other words, you will earn Superalgos SA Tokens simply by taking part in the governance of Superalgos.", + "translations": [ + { + "language": "ES", + "text": "Una Community comprometida en la gobernanza es crucial para el desarrollo del proyecto, por lo tanto se incentiva la participación. En otras palabras, ganará Superalgos SA Tokens simplemente por ser parte de la gobernanza de Superalgos.", + "updated": 1633542770033 + } + ] }, { "style": "Text", - "text": "The system allows governance to evolve with the project. It also encourages permissionless innovation, as Contributors may propose new areas of development and rally the Community to incentivize expansion along new lines." + "text": "The system allows governance to evolve with the project. It also encourages permissionless innovation, as Contributors may propose new areas of development and rally the Community to incentivize expansion along new lines.", + "translations": [ + { + "language": "ES", + "text": "El sistema permite que la gobernanza evolucione con el proyecto. Tambien motiva a la innovación sin permiso, ya que los contribuyentes pueden proponer nuevas áreas de desarrollo y manejar a la comunidad para que se motive para expandir nuevas lineas.", + "updated": 1633543011570 + } + ] }, { "style": "Title", @@ -64,11 +127,25 @@ }, { "style": "Text", - "text": "The Governance System was built from scracth as a new Software Project within the Superalgos Codebase." + "text": "The Governance System was built from scracth as a new Software Project within the Superalgos Codebase.", + "translations": [ + { + "language": "ES", + "text": "El sistema de gobierno fue construído sobre los bocetos de un nuevo proyecto de Software incluído en el código de base de Superalgos.", + "updated": 1633543179992 + } + ] }, { "style": "Text", - "text": "The following Governance Programs were developed at this time:" + "text": "The following Governance Programs were developed at this time:", + "translations": [ + { + "language": "ES", + "text": "Los siguientes programas de Governance Programs fueron desarrollados en este tiempo:", + "updated": 1633543245169 + } + ] }, { "style": "Subtitle", From 9afff7174dfcc1c6d8ac2f5cbe24fece014f4a1f Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Wed, 6 Oct 2021 20:33:04 +0200 Subject: [PATCH 81/82] This is my contribution to Superalgos --- .../Support-Program/support-program.json | 54 ++++++++++++++++--- ...user-profile-007-the-referral-program.json | 9 +++- .../user-profile-008-the-support-program.json | 9 +++- ...er-profile-009-the-mentorship-program.json | 9 +++- ...e-010-votes-and-claims-programs-intro.json | 9 +++- 5 files changed, 80 insertions(+), 10 deletions(-) diff --git a/Projects/Governance/Schemas/Docs-Nodes/S/Support/Support-Program/support-program.json b/Projects/Governance/Schemas/Docs-Nodes/S/Support/Support-Program/support-program.json index 8a5c11524..7818aa6ef 100644 --- a/Projects/Governance/Schemas/Docs-Nodes/S/Support/Support-Program/support-program.json +++ b/Projects/Governance/Schemas/Docs-Nodes/S/Support/Support-Program/support-program.json @@ -2,7 +2,14 @@ "type": "Support Program", "definition": { "text": "At Superalgos, we take pride in the level of support we offer to newcomers and the Community in general. It is a crucial aspect of our culture, based above all on collaboration. The Support Program enables the Community to compensate Community Mods contributing to the project’s support efforts.", - "updated": 1630231393370 + "updated": 1630231393370, + "translations": [ + { + "language": "ES", + "text": "En Superalgos, estamos orgullosos del nivel de soporte que ofrecemos a los recién llegados y a la comunidad en general. Es un aspecto crucial de nuestra cultura, basada por sobre todo en la colaboración. El Support Program posibilita a la comunidad compensar a los Community Mods contribuyendo a los esfuerzos de soporte del proyecto.", + "updated": 1633544186835 + } + ] }, "paragraphs": [ { @@ -17,26 +24,61 @@ }, { "style": "Text", - "text": "Superalgos is a vast system and the learning curve is still quite steep. Many users need help, particularly during the early stages." + "text": "Superalgos is a vast system and the learning curve is still quite steep. Many users need help, particularly during the early stages.", + "translations": [ + { + "language": "ES", + "text": "Superalgos es un sistema vasto y y la curva de aprendizaje aún es un largo paso. Muchos usuarios ayudan, particularmente durante las etapas tempranas.", + "updated": 1633544374767 + } + ] }, { "style": "Text", - "text": "While the Community is always ready to help with typical questions, we’ve noticed that it takes a certain level of experience and knowledge to provide effective support. This is why select Community Mods are in charge of the Support Group." + "text": "While the Community is always ready to help with typical questions, we’ve noticed that it takes a certain level of experience and knowledge to provide effective support. This is why select Community Mods are in charge of the Support Group.", + "translations": [ + { + "language": "ES", + "text": "Mientras que la Community está siempre lista para ayudar con las preguntas típicas, hemos notado que lleva cierto nivel de experiencia y conocimiento para porveer un soporte efectivo. Por esto es que la selección de Community Mods está a cargo del Support Group.", + "updated": 1633544529696 + } + ] }, { "style": "Note", "text": "If you ever wish to join the team of Community Mods, start participating in the various Telegram groups and Discord channels, helping users and answering questions. We’ll soon spot you and draft you into the Community Mods team!", - "updated": 1630231465692 + "updated": 1630231465692, + "translations": [ + { + "language": "ES", + "text": "Si alguna vez desea sumarse al equipo de los Community Mods, empieza a participar de varios de los grupos de Telegram y del Discord channels, ayudando a usuarios y respondiendo preguntas. Pronto lo descubriremos y lo llevaremos al equipo de los Community Mods!", + "updated": 1633544734836 + } + ] }, { "style": "Callout", "text": "To participate, you must spawn the Support Program and declare your favorite supporters. To do that, add a User Supporter node and use it to establish a reference to the User Profile of the person that has helped you the most! If you have more than one favorite supporter, add more User Supporter nodes!", - "updated": 1630231527435 + "updated": 1630231527435, + "translations": [ + { + "language": "ES", + "text": "Para participar, debe desplegar el Support Program y declarar sus supporters favoritos. Para hacer esto, agregue un nodo de User Supporter y uselo para establecer la referencia al User Profile de la persona que le ha ayudado más! Si tien más de un supporter favorito, agregue más nodos de User Supporter!", + "updated": 1633544936312 + } + ] }, { "style": "Text", "text": "If you seldom use the Support Group, that may be thanks to the effort put in crafting tutorials and documentation. If that is your case, then feel free to select the individuals or teams doing this work as your preferred supporters!", - "updated": 1630231554533 + "updated": 1630231554533, + "translations": [ + { + "language": "ES", + "text": "Si rara vez usael grupo de Support, eso puede ser gracias al esfuerzo puesto en montar tutoriales y documentacion. Si es ese su caso, siéntase libre de elegir individuos o equipos haciendo este trabajo como sus supporters preferidos!", + "updated": 1633545138992 + } + ] }, { "style": "Include", diff --git a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-007-the-referral-program.json b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-007-the-referral-program.json index 90f10c092..9483060fb 100644 --- a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-007-the-referral-program.json +++ b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-007-the-referral-program.json @@ -4,7 +4,14 @@ "type": "The Referral Program", "definition": { "text": "Help us spread the word about Superalgos!", - "updated": 1630495118436 + "updated": 1630495118436, + "translations": [ + { + "language": "ES", + "text": "Ayúdanos a correr la voz a cerca de Superalgos!", + "updated": 1633543506732 + } + ] }, "paragraphs": [ { diff --git a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-008-the-support-program.json b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-008-the-support-program.json index a8d51e094..679f7bb9b 100644 --- a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-008-the-support-program.json +++ b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-008-the-support-program.json @@ -4,7 +4,14 @@ "type": "The Support Program", "definition": { "text": "Let's reward Community Mods so that they keep up the good work, and so that more people want to join the team!", - "updated": 1630495305649 + "updated": 1630495305649, + "translations": [ + { + "language": "ES", + "text": "Premiemos a los Community Mods para que ellos continúen haciendo un buen trabajo, y por eso más gente querrá sumarse al equipo!", + "updated": 1633543661376 + } + ] }, "paragraphs": [ { diff --git a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-009-the-mentorship-program.json b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-009-the-mentorship-program.json index a63fb74c3..17fe27a4a 100644 --- a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-009-the-mentorship-program.json +++ b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-009-the-mentorship-program.json @@ -4,7 +4,14 @@ "type": "The Mentorship Program", "definition": { "text": "Helps us reward mentors so that they keep up the good work forming Contributors!", - "updated": 1630495605300 + "updated": 1630495605300, + "translations": [ + { + "language": "ES", + "text": "Ayudénos a premiar a los mentores así ellos continuan haciendo un buen trabajo formando a los contribuyentes!", + "updated": 1633543826508 + } + ] }, "paragraphs": [ { diff --git a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-010-votes-and-claims-programs-intro.json b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-010-votes-and-claims-programs-intro.json index c0cc1deb7..9e5b6abbe 100644 --- a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-010-votes-and-claims-programs-intro.json +++ b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-010-votes-and-claims-programs-intro.json @@ -4,7 +4,14 @@ "type": "Votes And Claims Programs Intro", "definition": { "text": "Help us govern the Superalgos Project!", - "updated": 1630495810385 + "updated": 1630495810385, + "translations": [ + { + "language": "ES", + "text": "Ayúdenos a gobernar el proyecto de Superalgos!", + "updated": 1633543892451 + } + ] }, "paragraphs": [ { From 5a3d40169c2464a5edd675b82bd1fdd85388288c Mon Sep 17 00:00:00 2001 From: EvaMaria70 Date: Wed, 6 Oct 2021 20:44:15 +0200 Subject: [PATCH 82/82] This is my contribution to Superalgos --- ...15-tutorial-step-about-our-governance.json | 45 ++++++++++++++++--- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-115-tutorial-step-about-our-governance.json b/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-115-tutorial-step-about-our-governance.json index 100b404d7..b510a2cb8 100644 --- a/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-115-tutorial-step-about-our-governance.json +++ b/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-115-tutorial-step-about-our-governance.json @@ -8,28 +8,63 @@ "name": "\\governance-project", "project": "Governance" }, - "updated": 1629835261024 + "updated": 1629835261024, + "translations": [ + { + "language": "ES", + "text": "Antes de dejarlo con el siguiente tutorial, debe saber que Superalgos es un proyecto crypto project con gobernanza distribuida!", + "updated": 1633545502625 + } + ] }, "paragraphs": [ { "style": "List", "text": "You may earn Superalgos SA Tokens and Reputation by contributing to the project.", - "updated": 1630065210887 + "updated": 1630065210887, + "translations": [ + { + "language": "ES", + "text": "Puede ganar Superalgos SA Tokens y Reputation por contribuir al proyecto.", + "updated": 1633545548293 + } + ] }, { "style": "List", "text": "Then you may leverage your tokens and reputation to participate in Governance Programs.", - "updated": 1629834501563 + "updated": 1629834501563, + "translations": [ + { + "language": "ES", + "text": "Entonces puede aprovechar sus tokens y reputación para particiapar en los Governance Programs.", + "updated": 1633545620173 + } + ] }, { "style": "List", "text": "Participating in governance earns you more tokens, as helping direct the project is an important contribution in and of itself!", - "updated": 1629834600057 + "updated": 1629834600057, + "translations": [ + { + "language": "ES", + "text": "Participando en la gobernanza gana más tokens, ya que ayudar a dirigir el proyecto es una contribución importante en sí misma!", + "updated": 1633545710019 + } + ] }, { "style": "Note", "text": "You may earn your first few tokens with the Airdrops Program just by setting up your User Profile. But before you do that, you need to do a couple more tutorials to complete your education!", - "updated": 1629835202298 + "updated": 1629835202298, + "translations": [ + { + "language": "ES", + "text": "Puede ganar sus primeros pocos tokens con el Airdrops Program con solo programar su User Profile. Pero antes de que lo haga, necesita hacer un parmás de tutoriales para completar su educación!", + "updated": 1633545813091 + } + ] } ] } \ No newline at end of file