潮流特區

最新文章

Spring Boot 05 - 為 http json api 加入登入要求

科技新知
MacauYeah・2024-07-02

本節,我們將為之前的http服務,加入認證機制,只有在資料庫現存的用戶可以登入及訪問我們的json api。 下戴模版 慣例,我們用Spring Initializr (Maven) 下載模版,Dependency主要選擇 Spring Web Spring Boot DevTools Spring Security Controller 跟上節一樣,我們起一個Controller,為簡化測試,我們只做http GET api。 由於本blog對於Source Code的顯示不太友好,有需要看source code的,請到Github查看 //src/main/java/io/github/macauyeah/springboot/tutorial/springbootwebapidata/controller/HomeController.java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api") public class HomeController { @GetMapping("/someRecord/{uuid}") public Map readSomeRecord(@PathVariable String uuid) { return Map.of("ret", "your uuid:" + uuid); } } 準備我們的test case,但這次我們預期它應該要出現登入失敗的結果。 //src/test/java/io/github/macauyeah/springboot/tutorial/springbootwebapidata/controller/HomeControllerTest.java @SpringBootTest @AutoConfigureMockMvc public class HomeControllerTest { @Autowired private MockMvc mockMvc; @Test void testNoLogin() throws Exception { RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/api/someRecord/1234") .contentType(MediaType.APPLICATION_JSON); this.mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.status().is4xxClientError()) .andExpect(MockMvcResultMatchers.jsonPath("$.ret").doesNotExist()) .andDo(MockMvcResultHandlers.print()); } } 在我們執行上述的測試,test case 成功過了。我們的基本設定跟上一節其實沒有多大改動,為何現在http api會回傳狀態 401? 那是因為我們在依賴中加了,Spring Security,它配合了Spring Web,就會自動為所有api加入權限檢測。我們的測試中,沒有任何用戶登入,當然會出現 http 401。為了讓我們可以好好管理誰可以使用api,我們就來設定一定Security。 我們加一個WebSecurityConfig.java,暫時指定所有的訪問路徑都必需有USER權限,並且用 http basic的方式登入。 //src/main/java/io/github/macauyeah/springboot/tutorial/springbootwebapidata/config/WebSecurityConfig.java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity public class WebSecurityConfig { @Bean SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(authorizeHttpRequests -> { authorizeHttpRequests.requestMatchers("/**").hasRole("USER"); // 所有的訪問路徑都必需有USER權限 }); http.httpBasic(Customizer.withDefaults()); // 使用http basic作為登入認證的方式 return http.build(); } } 上述例子,只是擋了沒有權限的人,我們還需要讓有登入身份的用戶可以成得取限User權限。 我們繼續修改,WebSecurityConfig,加入只在記憶體有效的InMemoryUser import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.provisioning.InMemoryUserDetailsManager; public class WebSecurityConfig { //.. @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); // 我們的密碼不應該明文儲,比較保險,我們使用BCrypt演算法,為密碼做單向加密。 } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withUsername("admin") .password(passwordEncoder().encode("pass")) .roles("USER").build(); // 我們在記憶中體,加入一個測試用的User,它的名字為admin,密碼為pass,權限為User return new InMemoryUserDetailsManager(user); } 然後加入新的測試,直接模擬Role。結果是通過的。 //src/test/java/io/github/macauyeah/springboot/tutorial/springbootwebapidata/controller/HomeControllerTest.java @Test void testLoginWithRoles() throws Exception { RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/api/someRecord/1234") .contentType(MediaType.APPLICATION_JSON).with( SecurityMockMvcRequestPostProcessors.user("someone") .roles("USER", "ADMIN")); // 沒有使用密碼,只使用Role this.mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.status().is2xxSuccessful()) .andExpect(MockMvcResultMatchers.jsonPath("$.ret").value("your uuid:1234")) .andDo(MockMvcResultHandlers.print()); } 再來一個測試,改用密碼登入,分別輸入錯的和正確的密碼。 @Test void testLoginWithWrongPasswordAndNoRole() throws Exception { RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/api/someRecord/1234") .header("Authorization", "Basic randompass") // 輸入錯的密碼,應該回傳http 401 Unauthorized .contentType(MediaType.APPLICATION_JSON); this.mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.status().is4xxClientError()) .andDo(MockMvcResultHandlers.print()); } @Test void testLoginWithPassword() throws Exception { RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/api/someRecord/1234") .header("Authorization", "Basic YWRtaW46cGFzcw==") // http basic 就是把 admin:pass 轉成base64 .contentType(MediaType.APPLICATION_JSON); this.mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.status().is2xxSuccessful()) .andExpect(MockMvcResultMatchers.jsonPath("$.ret").value("your uuid:1234")) .andDo(MockMvcResultHandlers.print()); } 最後,當然是正確的密碼才能通過。若果大家還是半信半疑,我們可以跑起真的正服務(IDE RUN或mvn spring-boot:run),然後用curl去試。 curl http://localhost:8080/api/someRecord/1234 // failed with 401 curl -u "admin:pass" http://localhost:8080/api/someRecord/1234 // successed 使用SQL Database讀取用戶登入資訊 一般而言,我們不可能把所有用戶登資訊打在InMemoryUser中,通常背後有一個資料庫儲存所有的用戶資訊,我們在登入時,讀取它來做對比檢證。 為此,我們在maven中,加入 Spring Data JPA h2 database (或任何你的資料庫,如mysql 、 sql server) 最後一步,我們把InMemoryUser去掉,改為從資料庫讀取。因為原始碼太多,就不全部貼上。最主要的是WebSecurityConfig.java要關掉之前的UserDetailsService,改為提供一個UserServiceImpl類,它會實現UserDetailsService的功能。 @Configuration @EnableWebSecurity public class WebSecurityConfig { // 把原來的Bean先變成註解,其他不變 // @Bean // public UserDetailsService userDetailsService() { // UserDetails user = User.withUsername("admin") // .password(passwordEncoder().encode("pass")) // .roles("USER").build(); // return new InMemoryUserDetailsManager(user); // } } // spring-boot-tutorial/spring-boot-web-api-data/src/main/java/io/github/macauyeah/springboot/tutorial/springbootwebapidata/config/UserServiceImpl.java // other import import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.password.PasswordEncoder; @Service public class UserServiceImpl implements UserDetailsService { @Autowired PasswordEncoder passwordEncoder; @Autowired UserRepo userRepo; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // 因為我們資料庫沒有資料,為了方便測試密碼的加密,我們在java code上直接插入一筆資料。 UserEntity defaultUser = new UserEntity(); defaultUser.setUsername("admin"); defaultUser.setPassword(passwordEncoder.encode("pass")); defaultUser.setRole("USER"); defaultUser.setUuid(UUID.randomUUID().toString()); userRepo.save(defaultUser); // 上述為測試用插入資料,不應該出現在正式使用環境中。 UserEntity user = userRepo.findOneByUsername(username) .orElseThrow(() -> new UsernameNotFoundException(username + " not found")); // 找找資料庫有沒有正在登入的該名使用者username List authorities = List.of(new SimpleGrantedAuthority("ROLE_" + user.getRole())); LOG.debug("got user uuid:{}, username:{}, role:{} from database", user.getUuid(), username, user.getRole()); // 如果前面的 findOneByUsername 有結果回傳,我們就給它一個ROLE_XXX的權限。 return new User(username, user.getPassword(), authorities); // 這裏從沒有檢查過密碼是否有匹配,全部交給Spring Security去做 } } //spring-boot-tutorial/spring-boot-web-api-data/src/main/java/io/github/macauyeah/springboot/tutorial/springbootwebapidata/entity/UserEntity.java // spring-boot-tutorial/spring-boot-web-api-data/src/main/java/io/github/macauyeah/springboot/tutorial/springbootwebapidata/repo/UserRepo.java 上述段落中,筆者省略了UserEntity和UserRepo,它們只是一般的spring-data-jpa概念,有需要可以經文末的連結查看完全原始碼。最需要注意的,是UserEntity的password欄位,在資料庫中是以加密的方式儲存。我們在配匹登入者與資料庫記錄時,也沒有自行檢驗密碼的需要。我們只是在加密過的密碼回傳給Spring Security,Spring框架會自行把登入者輸入的密碼與加密了的密碼作比較。

2024年7月1日-7月7日

玄學星相
熊神進・2024-06-30

一周生肖运程预测 鼠:今个星期事业可能会有转变,所以属鼠的朋友应该主动求变去增旺自己的运势;你可以在工作之余的时间找一些新东西学习,又或者尝试其它的工作;对于职位已经不甚稳定的朋友更要加倍留意,主动求变可令你的运势增强。财运亨通,你努力完成订下的业务目标,只要保持善念及正能力,业务发展自必有神助。身体很健康,心灵也很快乐。 牛:有五黄煞入命,同时比肩之日,气场不吉,需要注意休息和睡眠,避免身体产生疾病或者血光之灾,今个星期不适宜外出旅游或者游山玩水,最好能避开危险性质的工作或者项目,安全为上,不可冒险。财运方面,容易有好坏两个情况,投资需要谨慎为上。为家庭、亲人或房子牵挂,油漆美化、修缮收纳、社交联谊破费,所得变动不大。爱情是单身公害恐惧症。 虎:本周应该多出去旅游或者是走动,这样也有助于提升个人的运势。桃花运不错,随着交际圈扩大而认识更多优秀的异性,宜把握住机会争取脱单。已婚或已有伴侣的你要异性保持距离,以免不必要的肢体亲近接触,令你的伴侣感到不好受。你对工作一丝不苟,务实而真诚,让客户对你留下良好印象。放工后应多留在家里休息,拥有更佳精神状态方能使工作顺利。 兔:运势再度攀升,受到「福德」的加持,各项运势都有极强的表现,尤其在感情运势上。如身体不健康的朋友,建议请一件「化病葫芦」开运吉祥物助身,放在床头以保平安。今星期的财运方面体现在生活上,小心跟人发生一些碰撞,有失财的可能,要多留意随身物品。幸运号码是1, 11号。 龙:本星期有凶星入命宫,可能会有一些突然发生的状况,避免受伤,需要多多注意,做事之前也要谨慎小心。如果去郊外, 请穿长裤保护自己。感情运中无桃花,夫妻不冲不克,不会影响双方之间的关系。只要相互凉解,避免发生纠纷,无需再自寻烦恼,未婚属龙人士尽量争取,建议摆放「心意雨花石」开运吉祥物,旺婚姻招桃花,有利于增强感情。 蛇:未来两三个星期虽仍有挫折,但已渐能降低损害,找出有利突破点,并一一兑现承诺。中长期远景看好,值得为自己一路捱过来而感到自豪。爱情是一种幸福交易。表面看上去财运似乎不错,但不义之财千万不能取,凡事小心谨慎,因为多半会因财招灾,一不小心就会有法律方面的麻烦出现,甚至可能会招致牢狱官灾。 马:今个星期会有自寻烦恼,自作自受的情况。故遇到问题或困难时,不要钻牛角尖,多向专家及有能力的请教,胜过自己独坐苦思。2002年出生的生肖马尤其需要调和心绪,避免因为个人原因而耽误一切工作事宜的进展,拖团队后腿,也会让你的上司对你有不满,阻碍事业发展。幸运数字是0,2号。晚上如果有空,请做一次烧供。 羊:今个星期抵抗力会比较弱,所以病痛自然会多,但如果平日健康没有太大问题的话只需要注意养生之道就可以了。对于单身人士,有机会展现自己的魅力,在团体活动、或朋友的撮合引介下,可以促进你的机缘。能够认识交心对象时,也要懂得把握时机,若能够彼此真心对待,也将会成就良好姻缘。 猴:工作、事业运势较差,会有人、事上的纷争,应息事宁人,以免官司临身。还有就是人际关系方面,要注意口舌之争,不能轻易和别人发生争吵,会影响到你们的情绪。要注意饮食健康以及少抽烟喝酒,多到空气好的地方旅游这样可以有一个好的身体来开创你的新的征程。幸运吉祥物是门冲石。 鸡:由于本周桃花太旺,应该注意感情纠葛而出现三角恋爱之关系而导致感情破裂家庭不稳之事情。要注意保重身体。小心因为感情问题惹祸上身。健康方面,因有「伏尸星」出现,故此属鸡的人必须密切注意身体健康,并要小必留意家居安全,请记住平安二字值千金。吉利方位:西南方、正东方、西北方。 狗:因命宫中有众多的吉星拱照,在运程上会大有起色。有桃花星及红鸾星入命,故未婚者会有机遇,已婚者则要小心谨慎,约束自己的言行了。本周要特别注意交通安全,如有不慎易引发血光之灾。感情方面矛盾重重,应互相体谅包容。对于男孩子家长要看护好眼睛,多吃温性食物,电视、电脑等伤眼的电器最好让孩子少玩。感情吉位:东南、正西。 猪:在这个星期的压力会很大,这会让你们的心情变得焦躁不安,从而老是想要向别人发泄你们的脾气,这就会让你们的家人朋友感到困恼,你们的朋友也会慢慢疏远你们,对你们的人际关系会有很大的影响,所以你们一定要注意调节你们的压力,不能够无形给自己太大的压力,可以的话你们和家人一起出去旅游多看看大自然,能够让你们能够保持愉悦的心情。

玛瑙手串深藏不露的小秘密

宗教玄學
熊神進・2024-06-25

#为什么女生喜欢佩带玛瑙手串 一位网红留言给笔者,她说自从请了笔者的开光玛瑙手串,她接了很多大客户,生意翻倍,笔者请她多些做烟供,布施三恶道。 笔者留意到在国内很多年青姑娘都喜欢佩带玛瑙手串,尤其是刚刚大学毕业的女生,有一次我在北京大学工作时,发现有几位女学生,她们手上佩带了玛瑙手串。 玛瑙手串的价格不贵,一条原石手串,目前是300元以下,这是一个大众可以接受的价格。玛瑙是地球上最常见的矿石,人们早在3000多年前就发现它的存在,可是,厉害的商人在「阿拉善玛瑙」(几十块元一斤)原石的表面进行人工染色来提升鲜艳,有些更将多个「阿拉善玛瑙原石」粘合在一起,制造成较大的形态和斑块,从而提高卖价。 在风水师傅的开光过程中,人工打磨的石太过光滑,我们很难把玄粉浸入石髓, 失去效果。 自古以来,风水师傅便把玛瑙视为宝石中的“第三眼”,象征着「希望」。一条貌不惊人的玛瑙(暗红/暗黑)可改善内分泌,加强血液循环。 大家知不知道为什么大学毕业后,我们做第一份工总是有些不愉快,理由是什么,很简单,就是年轻入世未深,喜欢表现自我,日子久了他/她们才知道七分人事三分工作的道理。我常常建议他/她们佩带玛瑙手串,第一是因为价格大众化,不是很贵;第二是因为它可以产生欢笑正能量,减少我们对工作的不满。 很多年青人喜欢「阿拉善玛瑙」,理由是他/她们被七彩色素迷惑,我认为原生态的玛瑙原石才是符合年轻人的需要,它可以平顺急躁情绪,走上成功之路。 笔者读过水晶检测课程,对于玛瑙手串是有要求的,在巴西工作的时间,我拣选的原石必须含有二氧化硅的水(熔岩本身中的硅酸盐成分分解所产生),因为这种岩石中的蒸气空腔可以给我把元气打进去,形成更大的空腔,产生正能量。 目前这些手串珠子是10mm左右,适宜体重55至65公斤女生佩带,可以佩带左手,亦可以放在包包里,我们建议回家脱下。 玛瑙手串是给女生正能量,如果妳想爱情美满,工作顺利,妳可以佩带这款。

玛瑙手串深藏不露的小秘密

玄學星相
熊神進・2024-06-25

#为什么女生喜欢佩带玛瑙手串 一位网红留言给笔者,她说自从请了笔者的开光玛瑙手串,她接了很多大客户,生意翻倍,笔者请她多些做烟供,布施三恶道。 笔者留意到在国内很多年青姑娘都喜欢佩带玛瑙手串,尤其是刚刚大学毕业的女生,有一次我在北京大学工作时,发现有几位女学生,她们手上佩带了玛瑙手串。 玛瑙手串的价格不贵,一条原石手串,目前是300元以下,这是一个大众可以接受的价格。玛瑙是地球上最常见的矿石,人们早在3000多年前就发现它的存在,可是,厉害的商人在「阿拉善玛瑙」(几十块元一斤)原石的表面进行人工染色来提升鲜艳,有些更将多个「阿拉善玛瑙原石」粘合在一起,制造成较大的形态和斑块,从而提高卖价。 在风水师傅的开光过程中,人工打磨的石太过光滑,我们很难把玄粉浸入石髓, 失去效果。 自古以来,风水师傅便把玛瑙视为宝石中的“第三眼”,象征着「希望」。一条貌不惊人的玛瑙(暗红/暗黑)可改善内分泌,加强血液循环。 大家知不知道为什么大学毕业后,我们做第一份工总是有些不愉快,理由是什么,很简单,就是年轻入世未深,喜欢表现自我,日子久了他/她们才知道七分人事三分工作的道理。我常常建议他/她们佩带玛瑙手串,第一是因为价格大众化,不是很贵;第二是因为它可以产生欢笑正能量,减少我们对工作的不满。 很多年青人喜欢「阿拉善玛瑙」,理由是他/她们被七彩色素迷惑,我认为原生态的玛瑙原石才是符合年轻人的需要,它可以平顺急躁情绪,走上成功之路。 笔者读过水晶检测课程,对于玛瑙手串是有要求的,在巴西工作的时间,我拣选的原石必须含有二氧化硅的水(熔岩本身中的硅酸盐成分分解所产生),因为这种岩石中的蒸气空腔可以给我把元气打进去,形成更大的空腔,产生正能量。 目前这些手串珠子是10mm左右,适宜体重55至65公斤女生佩带,可以佩带左手,亦可以放在包包里,我们建议回家脱下。 玛瑙手串是给女生正能量,如果妳想爱情美满,工作顺利,妳可以佩带这款。

玛瑙手串深藏不露的小秘密

宗教玄學
熊神進・2024-06-25

#为什么女生喜欢佩带玛瑙手串 一位网红留言给笔者,她说自从请了笔者的开光玛瑙手串,她接了很多大客户,生意翻倍,笔者请她多些做烟供,布施三恶道。 笔者留意到在国内很多年青姑娘都喜欢佩带玛瑙手串,尤其是刚刚大学毕业的女生,有一次我在北京大学工作时,发现有几位女学生,她们手上佩带了玛瑙手串。 玛瑙手串的价格不贵,一条原石手串,目前是300元以下,这是一个大众可以接受的价格。玛瑙是地球上最常见的矿石,人们早在3000多年前就发现它的存在,可是,厉害的商人在「阿拉善玛瑙」(几十块元一斤)原石的表面进行人工染色来提升鲜艳,有些更将多个「阿拉善玛瑙原石」粘合在一起,制造成较大的形态和斑块,从而提高卖价。 在风水师傅的开光过程中,人工打磨的石太过光滑,我们很难把玄粉浸入石髓, 失去效果。 自古以来,风水师傅便把玛瑙视为宝石中的“第三眼”,象征着「希望」。一条貌不惊人的玛瑙(暗红/暗黑)可改善内分泌,加强血液循环。 大家知不知道为什么大学毕业后,我们做第一份工总是有些不愉快,理由是什么,很简单,就是年轻入世未深,喜欢表现自我,日子久了他/她们才知道七分人事三分工作的道理。我常常建议他/她们佩带玛瑙手串,第一是因为价格大众化,不是很贵;第二是因为它可以产生欢笑正能量,减少我们对工作的不满。 很多年青人喜欢「阿拉善玛瑙」,理由是他/她们被七彩色素迷惑,我认为原生态的玛瑙原石才是符合年轻人的需要,它可以平顺急躁情绪,走上成功之路。 笔者读过水晶检测课程,对于玛瑙手串是有要求的,在巴西工作的时间,我拣选的原石必须含有二氧化硅的水(熔岩本身中的硅酸盐成分分解所产生),因为这种岩石中的蒸气空腔可以给我把元气打进去,形成更大的空腔,产生正能量。 目前这些手串珠子是10mm左右,适宜体重55至65公斤女生佩带,可以佩带左手,亦可以放在包包里,我们建议回家脱下。 玛瑙手串是给女生正能量,如果妳想爱情美满,工作顺利,妳可以佩带这款。

《魔物獵人世界》《魔物獵人崛起》通用心得

手機‧電玩
MacauYeah・2024-06-25

好久沒有寫Game心得分享,那是因為筆者也真的很久沒有開新坑。最近因為《魔物獵人》有新作預告,大家又好好地重新把《魔物獵人世界》拿出來練練手。筆者也順便把過去的買了沒有怎玩的《冰原》DLC拿出來,好好地玩一遍,總算完了一個心願。 因為玩了兩款近作,對於魔物獵人系統多少有一點入門心得,就來梳理一下,方便新朋友入坑時不再碰壁。 防具 隨著主線推進,不單武器可以強化,防具也可以繼續強化。強化等級因為階段推進而有突破。筆者以前就是不知道這件事,前期以為防具早已升滿,但後來一直貓車,才知道防具防禦力太低,需要經過重複強化提高防禦力。 防禦、體力增幅技能 防禦力、體力最大值兩者當然是越高越好。但在推進度前期,什至後期因為需要額外技能,防禦、體力不一定全滿。有必要時防禦增幅時選一半,體力增幅點滿比較好。因為後期挨怪物一套連招,即使防禦多高,也不能不回血。而體力增幅通常較易點滿,避免因為異常狀態影響而被連招到死,可以增加容錯率。而且後期回血道具一般直接使用秘藥,一次過回滿血條。所以筆者認為體力增幅比防禦增幅更有效。 防禦力疊加 若果你像筆者一樣菜,後期必需要使用各種方式疊加防禦力。主要方式有三個。食貓飯、道具持有、道具使用。貓飯在《魔物獵人世界》和《魔物獵人崛起》,都有機率成份,不過好在後期,總有票卷可以提升機率,筆者都偏向把投資在防禦力上。道具持有,主要在XX之爪和XX護符之上,帶著出戰就好,兩者最多各帶一份,但可以疊加。道具使用,就是硬化藥、硬化粉塵、忍耐種子。三種可以同時使用,可疊加,但硬化粉塵、忍耐種子有時效。 精靈加護 有一定機率減少傷害,但筆者後期不夠技能欄位,沒有去配。它也是增加容錯的機率,但防禦、體力、精靈加護全要的話,攻擊技能就更少了。所以筆者放棄它。 龍車 中後期,魔物都會四處跑,發怒時更是撞來撞去,總之就是讓你打空氣。筆者初時也不知道怎樣對策,總是跟著魔物屁股走。但其實這樣更費時,其實你可以原地等待,有空就調合或為武器上Buff,反正它很快就會回頭。想更有效的提升DPS,應該花時間去量度回來時的落點。魔物從遠處過來,但其實中途很少變向,比較有條件預判和輸出。若為團戰,因為有隊友分散仇恨,才需要主動追上魔物。 打點 初接觸這系列時,筆者就不斷看到【肉質】這一詞,但其實玩到現在,筆者都不太掌握。但通常都是集中打魔物的頭就了事。當打頭都出現彈刀時,再攻擊其他地方。有條件有心情,可以逐隻魔物研究,長期打到有效位置,傷害差很多,才能會易出現魔物倒地的狀態。 配裝 別人的配裝,其實自己並不一定能用,特別是那些TA影片(Time Attack)。MH系統的技能取得,都很有運氣成份,所以想要的技能不一定馬上能配到,大家主要去找自己武器的核心技能就OK。有些武器可能有多個流派,而且隨著時間累積,素材的隨機出現,我們有必要定期整理裝備組合。不同攻略網站,都會分享畢業裝,不過筆者到現在,都未去到這個攻守兼備的狀態。還是忘提畢業裝吧,後期的強怪,還是要針對性地重點挑整。 救援、團戰 有時卡關,有條件就叫救援吧,不必刻意自己打。因為進度限制,主線沒有推進的話,強化功能不開放,死磨也不一定有裝備提升。來救援的人一般是已推完主線,回來刷素材的,他們有較高的防禦去吸收傷害。他們不一定比你強,但貓的機率就比較低。但也不排除有時人沒打完主線就來抱大腿,結果搭沉船一起貓車。所以一定一定要準備【生命粉塵】,有必要時,就為殘血的同伴回血。那怕團友很強,也有機會出現異常狀態疊加的情況,為他回個血,他能更加集中輸出。 主機版都要買額外的會員制,才能聯機求助。PC版就沒有這個限制,接通網路就可以招外援。筆者推薦PC版,因為會員制的其他贈品都很雞肋,還不如PC版來得清靜。 以上,就是筆者玩完《魔物獵人世界》和《魔物獵人掘起》兩作的心得,雖然筆者還是很菜,但至少後期也玩得下去。希望以上各點可以為沒通關的朋友帶來實際的幫助。

找到了法螺,一切好开始

宗教玄學
熊神進・2024-06-24

相傳釋迦牟尼誕生時,天人獻下八寶。藏語把佛門八寶稱「扎西達杰,亦叫達杰明蘇」,而我們淨土宗稱「右旋白海螺」,南方地區大部份信衆稱它「法螺」,而風水師傅叫它做「鎮宅法寶」。 古代的電影都常常看到男武士吹「法螺」, 其實「法螺」有三個明顯用途: 法螺用來召集僧衆。 古人在深山修行時,爲避免猛獸追逐, 可吹起「法螺」驅散野獸。 法螺可以呼喚天神,《千手千眼觀世音菩薩廣大圓滿無礙大悲心陀羅尼經》有一句話說:“若爲召呼一切諸天神,當用寶螺手。” 法螺降伏邪魔外道。 在風水學上, 筆者還發現「法螺」可以幫助男女解脫感情煩惱, 因爲「右旋白海螺」是佛的法音,其力量可以廣大悠揚,使一切煩惱人得到解脫。紅塵世界, 男女之間的感情總沒有對與錯, 在筆者眼中, 男女的愛都是債, 你不是前世欠了他, 今生又爲何會遇上?很多女生(已婚,未婚)都會把「法螺」放在家裏, 就是爲瞭解脫俗世煩惱。 「右旋白海螺」是佛教中最重要的法器之一,我們都是把它用來供養上師、三寶。在北方地區, 信衆會把它放在家裏、壇上。在西藏,最受尊崇,被視爲三千世界回蕩不息的聲音。在南方,有些女生把它放臥室,用來趕走「爛桃花」。 「右旋白海螺」是一種佛相, 這是因爲佛陀說法之音好像法螺般美妙,佛陀臍紋以及所有的毛髮都是右旋,眉間衪的白毫右旋而威嚴,這就是佛教說的右旋白螺之相。 據佛經記載:聞法螺聲可滅諸重罪。《不空罥索神變真言經》中說:“若加持螺,諸高處望,大聲吹之,四生之衆生,聞螺聲滅諸重罪,能受身舍已,等生天上。”這段話告訴我們,當你犯了大罪,你供養「右旋白海螺」, 你可以减罪。什麽是大罪,一位女生做了「打胎」「人流」,這就是大罪。 「右旋白海螺」的圖案有幾款, 款款都是佛教人士的心血結晶, 筆者熊神進一直把它們放在尼泊爾精舍, 白色是海螺殼, 銀色是尼泊爾銀的佛吉祥圖案, 手工認真, 由于供養久長,又是天然的,總有色差, 如果追求完美的讀者, 不應該考慮擁有。 人生總有起落, 如果遇到事業不順, 婚姻不好, 健康出問題的日子, 我們可以拿起「右旋白海螺」向西方吹幾口, 在玄學上有個說法: 一吹順風順水; 二吹時來運到; 三吹心想好事用。 佛有八寶添吉祥, 你家中有多少件寶?

github flow - github 開發流程

科技新知
MacauYeah・2024-06-20

那些年那個很穩定卻又不受歡迎的 git flow 開發流程 多年前,朋友就向筆者介紹git的團隊整操作流程。筆者深思過後,的確實用,那些年的git-flow,很美滿,由開發、測試,到發佈、修補漏動(backport),都有清楚明確的指引。 原作者連結:git-flow 大家如果沒有更複雜的需求,真的可以照搬,筆者也很推這一個模型。 但在長期推廣下,筆者發現大部份人其實都不熟git的基本操作,什至連git graph也不看,現在看git flow,就更不可能接受。那怕是有常用git的個人團隊,也是不怎使用分支模型。 前一兩年,筆者也不懂,筆者也努力地簡化git flow。例如把master和develop合而為一,但最後也是少有人可以接受,很多人還是卡在分支那邊,對checkout、merge還是很陌生。在跟更多不同人的協作過後,筆者總於意會到一件事。其實大部份人,只想知道最後、最新的狀態,只會更新 master / main ,也因為個人開發,所以連衝突也不會有,更不需要使用merge。那怕是少型團隊,頂多也是維護main的衝突,間中用用merge,而checkout還是用不著。 其實這個情況,並不限於小型團隊。因為 web app 和 DevOps 的流行,所以越來越少機會要維護多個舊的穩定版本。大家都專心於最後一個開發及發佈版本就完事,用戶的某個版本有問題?更新到最新版本吧。(註:越底層的應用開發模式,因為相容性問題,不可能只保留一個穩定版本。) 那麼我們就大力簡化吧 - github flow 開發流程 既然大部份情況,大家都只在乎 main / master / 預設分支,那我們也沒有必要跟著複雜的 git flow 走。但在 DevOps 的角度下,為保證 main / master 穩定性,大家還是至少要遵守branching 、pull (merge) request 、code review 、auto test 原則 。 github就最簡單的branching 、pull request 、code review 提出了它們的 github flow。 簡而言之,就是每個人在開發時,都先從 main 起一個新分支,不斷更新。待合適的時候,就透過 pull requst,向原項目負責人提出申請,只要項目負責人點頭,就可以把改動傳入 main 中。又因為Github 原本的定位在於個人與個人之間的協作,初時已經需要通過fork建立獨立的倉庫,那怕你不愛分支也必需分支。所以 pull request,code review 的作用更明顯,後逐的協作更理所當然。 但若果回到公司團隊協,Github flow 就應該像筆者之前提出協作方案,各自起分支,最後由某個人守門,把所有結果放到 main 中。(前文連結)

【如何用Trading View寫每天只交易一次的策略】

創富坊
程式交易 www.quants.hk (導師: 財經書藉作家: 麥振威)・2024-06-17

最記得以前有學員曾說過,他過去試過很多的交易策略,最後在實戰時的成績都不太好,然後「嬲嬲地」就每天只看到MACD的第一個訊號便入市,開市後見MACD的快線升穿慢線便買入,相反,若MACD的快線跌穿慢線便造淡,然後見MACD的快線繼續上升便平好倉,造淡時則見MACD的快線繼續下跌就平淡倉,就是這樣簡單! 但效果反而比很多複雜的策略更好。 這個只是他的意見,最後成績如何他沒有告訴我,但筆者自己研究過很多的Daytrade策略也都是每天只交易一次的,因為交易次數太多,交易成本就會增加,而且長時間交易會覺得更亂,特別是遇上連續虧損的時候,而每天只交易一次就是讓自己有足夠時間冷靜下來。 不過,若要用pine script寫這類每天只交易一次的策略,又應怎樣寫? 以下是一個很簡單運用Zero Lag MACD的交易策略,就是快線升穿慢線便買入,當買入後看到連續三支陰陽燭的時間內MACD的快線都在上升,那就平倉離場。 // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © markchunwaipaul //@version=5 strategy("zero lag MACD交易例子", margin_long=100, margin_short=100, initial_capital =1000,default_qty_type = strategy.percent_of_equity,default_qty_value = 100) SN=input(12) LP=input(26) M=input(9) ema1=ta.ema(close,SN) ema2=ta.ema(ema1,SN) ema3=ta.ema(close,LP) ema4=ta.ema(ema3,LP) ZerolagMACDLine=(2*ema1-ema2)-(2*ema3-ema4) ema5=ta.ema(ZerolagMACDLine,M) ema6=ta.ema(ema5,M) ZerolagSignalLine=2*ema5-ema6 Histogram=ZerolagMACDLine-ZerolagSignalLine var bool traded =false closeCond=ta.rising(ZerolagMACDLine,3) noposition=strategy.position_size==0 buyCond=ta.crossover(ZerolagMACDLine,ZerolagSignalLine) if buyCond and noposition strategy.entry("BUY",strategy.long) if closeCond and not noposition strategy.close("BUY") plot(ZerolagMACDLine,title="MACDLine",color=color.yellow ,linewidth=2) plot(ZerolagSignalLine,title="SignalLine",color=color.green,linewidth=2) plot(Histogram, color=color.black, style=plot.style_histogram,linewidth=2) 以上策略的Backtest report: 可以看到這樣寫每天的交易次數肯定不只一次,交易了1023次,獲利交易只有514次,勝率約50.24%,一年的虧損約37.45%。 另以下是同一個策略但每日只交易一次的寫法: // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © markchunwaipaul //@version=5 strategy("用zero lag MACD每日只交易一次例子", margin_long=100, margin_short=100, initial_capital =1000,default_qty_type = strategy.percent_of_equity,default_qty_value = 100) SN=input(12) LP=input(26) M=input(9) ema1=ta.ema(close,SN) ema2=ta.ema(ema1,SN) ema3=ta.ema(close,LP) ema4=ta.ema(ema3,LP) ZerolagMACDLine=(2*ema1-ema2)-(2*ema3-ema4) ema5=ta.ema(ZerolagMACDLine,M) ema6=ta.ema(ema5,M) ZerolagSignalLine=2*ema5-ema6 Histogram=ZerolagMACDLine-ZerolagSignalLine var bool traded =false closeCond=ta.rising(ZerolagMACDLine,3) noposition=strategy.position_size==0 buyCond=ta.crossover(ZerolagMACDLine,ZerolagSignalLine) if buyCond and not traded and noposition strategy.entry("BUY",strategy.long) traded:=true if closeCond and not noposition strategy.close("BUY") if ta.change(time("D"))!=0 traded:=false plot(ZerolagMACDLine,title="MACDLine",color=color.yellow ,linewidth=2) plot(ZerolagSignalLine,title="SignalLine",color=color.green,linewidth=2) plot(Histogram, color=color.black, style=plot.style_histogram,linewidth=2) 留意克體的部份就是加上後令策略變成「每天只交易一次」。 先設定traded為false,然後當買入後便設定為true,由於入市條件加上了not traded,代表要traded 必需為false時才會入市,這樣交易一次後就不會再交易,最後加上ta.change(time("D"))!=0,代表要轉為第二個交易日,traded才會再轉變為false,然後第二日當ZerolagMACD的快線升穿慢線時就會符合入市條件。 策略的backtest report: 同一樣的交易策略,只是將其改變為「每天只交易一次」,可以看到結果也是虧損,不過,虧損幅度卻由37.45%大幅下降至10.75%。另外要留意,筆者寫這兩個策略是沒有計算「佣金」及「滑價」的,而第一個策略在一年裏交易了1023次,但加上「每天只交易一次」這個條件後,一年裏只交易了258次,交易成本會相差很遠,不過勝率就未見有大幅改善,獲利的次數只有132次,勝率只輕微由50.24%提高至51.16%。 交易策略當然不可能這樣簡單,但只要將以上兩個策略作比較便可看到,每天只交易一次的Daytrade策略確實能提高成效。 網頁: www.quants.hk Youtube: https://www.youtube.com/@markchunwai Facebook專頁: https://www.facebook.com/quantshk/ Patreon: https://www.patreon.com/quantshk

2024年6月17日-6月23日

玄學星相
熊神進・2024-06-16

一周生肖運程預測 鼠:今個星期可以主動求變的話,運勢也不會太過差;例如現在做的工作不是太好,與其留守原有的工作等老闆裁員,倒不如自己主動找新的,合適自己的工作更實際;又或者留守在原位也好,可以想想怎樣改變自己的工作方式去配合公司的理念,這些都是可以增旺自己運勢的方法。提防關節毛病,有舊患或有運動習慣者應加倍小心。 牛:本周异性緣分也很旺,己婚的人士要特外注意不要引火燒身,單身的人士這個星期有美好姻緣。人際關係方面因爲有异性緣份的幫助,也會提高人際方面運氣,從而能得到別人更多支持。財運方面,合作旺財,適宜合作,容易因合作而帶來財富,今個星期適宜穿著紅色衣服, 而厨房最宜擺放一套「銀筷子」。 虎:運勢頗佳,只要努力付出,專心工作,定然會得到良好的回報。工作運極佳,能善用所學的知識在工作業務上,令你對工作更有歸屬感,對自己更有信心。財運來源主要是正財,多勞多得。切戒酒色、留意泌尿系統健康,暫勿吊喪,不進動工、動土、搬遷、裝潢則能趨吉避凶。吉利方位:西南方、正東方、西北方。 兔:財運今個星期一般,容易有大破財情况出現,自己一定要多加留意;所以本周切忌投資,尤其投機更加不可。人緣和桃花運旺盛,容易出現合作機會,能够得到團隊的力量,易得貴人之助,對于職場人士,則能得到同事的幫助,能够獲得大家的支持,比較有利于人際關係。建議在包包裏擺放一個桃木桶。 龍:犯太歲的負能量比較多, 今個星期投資要加倍小心,其實最好不要炒股票;工作方面也容易遇到阻滯;是非要特別留意,尤其在工作上,容易遭到小人影響自己工作。這個星期在消費方面要理智,儘量以守財爲主,才能更好的應對生活中因意外灾害造成的破財。要注意保重身體。小心因爲感情問題惹禍上身。 蛇:合作關係不是太良好,你們二人過去的行爲是心照不宣。愛情是濃淡皆宜。財運方面還沒到收穫的時候,趕緊努力種你的「莊稼」。 運勢不甚理想,打工人士工作運氣較爲低迷,宜守不宜攻,應防範小人的陷害,或受黴運牽連,凡事均須三思而後行,健康方面這個星期也非常差,自己或家人之健康狀况均堪憂,須防有不測之灾。 馬:一年過了5個月, 來到6月, 這不是一個好運的月, 馬受到白虎星即將浮現的景象, 情緒變化很大, 基本上來說。需要注意的是,要妥善處理好與親戚朋友之間的關係,以免引發家族矛盾。風水助運物:金剛橛。單身男只能遇上性格剛烈的女性,對方未必是自己的心儀對象。晚上如果有空,請做一次燒供。 羊:在事業運勢中會有貴人相助,以及合夥做生意,或者是朋友幫助自身的運勢,事業會有所提升;經商中爲朋友相助,以及上級提拔。感情運方面,本周算是平穏,但未有對象者今星期則不容易突破,必然要自己多加努力;已有固定對象者則感情穏定。本周提妨生肖:龍、蛇。 猴:「喪門」星入宮,預防家人親友病厄隱患(身體狀况),注意心臟血液循環、筋骨關節隱患,不利探病,暫勿吊喪、行喪、送喪、戒爭鬥。2004年出生的生肖猴尤其需要在本周裏注意各項投資事宜的進展,偏財運不佳的日子裏還是需要保守理財,避免破財敗財的局面出現。不利的生肖:鶏、龍、鼠。 鶏:本周一些工作將會占據你很多時間和心力,你要能够掌握效率,冷靜地去處理,否則只會令已有的計劃拖延。健康上尤其需要注意出行安全,意外事故頻繁的日子裏還是需要謹慎對待每個細節。感情方面,不妨和愛侶到外地旅行,有助感情的增進。同時還要小心凶星,應該提高安全防範意識,以免健康受到影響。 狗:工作上易遭遇瓶頸,也要注意小人陷害,但却也不乏升遷的機會,凡事以和爲貴,自然可以减少無端是非。「劫煞」表示你們在這星期會遇到一些小波折,即使沒有什麽太大的問題但是也會影響你們的心情,讓你們變得暴躁,你們可以嘗試去參加一些修身養性的活動。本周可以去寺廟拜拜,增加正能量。 猪:上星期跟男友有點誤會, 大家冷戰了一段日子, 其實大家都是挂念對方, 只因二人都已婚, 大家都不敢向前走半步。財氣上都會是比較不錯的財氣聚集運勢,但是此財氣會有瓜分之意。也就是說,別人掙得錢財會分給你自身一些,或者是你自身掙到財氣,會分給別人一些,此爲瓜分氣場。今個星期適宜隨身携帶一套「開光古五帝錢」,能够化解凶煞。

【如何用Trading View寫運用多重timeframe的策略】

創富坊
程式交易 www.quants.hk (導師: 財經書藉作家: 麥振威)・2024-06-14

Pinescript的功能其實十分之多,可以寫到不同的指標之餘,甚至可以將一些統計學的概念應用在交易策略之上。 例如我們在facebook介紹的Predicted_price MACD是將Linear Regression 的計算融入MACD中,相信大家現在應不難明白。 https://www.facebook.com/quantshk/posts/pfbid036K93ZaK4LnbZPxrekZUMKSpWcFcbjBLhE122G6h8H3qcUTzoVJ7yX2U1nffCPV1Tl 影片中有兩個例子,分別是看SQQQ及Apple的5分鐘圖,你會發現指標的入市訊號比傳統的MACD更準確,甚至你會看到MACD根本就是顯示市況向好,但Predicted_price MACD卻顯示造淡訊號。事實上,Linear Regression確實很有用,只要與價格有線性關係的數據都可以作分析,會對股價的變化有預測作用。除了Predicted_price MACD,其他我們研發的與Linear Regression相關的交易策略都會陸續介紹給大家。 這篇文章的的題目是如何用Trading View寫運用多種timeframe的策略,這也是最多人會問的問題之一,因為很多人都會喜歡多種時間間隔的策略,例如同時運用5分鐘圖及1分鐘圖表,又或同時用小時圖與5分圖表等。 要寫這樣策略就要用上request.security這個function,用法例如子如下: [macdLine,signalLine,_]=ta.macd(close,12,26,9) signal5min=request.security(syminfo.tickerid,"5",signalLine) macdhourly=request.security(syminfo.tickerid,"60",macdLine) request.security的( ) 內要寫上的有三個部份,包括「要取那一個symbol的資料」、「要什麼時間間隔」、「要取那一個數據」。 「要取那一個symbol的資料」的部份若填上syminfo.tickerid就是要取目前你在Trading View畫面上顯示的數據,例如你圖表上是在看Apple(US:AAPL),若填上syminfo.tickerid就會最Apple(US:AAPL)的數據。 但大家可能會覺得奇怪,為什麼要多填一次,本身不就是想要Apple不同時間間隔的數據嗎? 因為request.security除了可以拿取不同時間間隔圖表的數據外,也可以拿取不同symbol的數據,例如你想看蔚來(US:NIO)的走勢來炒Tesla(US:TSLA),你在這個部份便不能再寫上syminfo.tickerid,你要在主圖上開啟Tesla的圖表,然後在request.security的( )填上蔚來的symbol,那就可以寫到看蔚來的數據炒Tesla的策略。 而「要什麼時間間隔」就很簡單是要取什麼時間間隔的數據,若只寫數字就是代表多少分鐘,例如"5"就代表5分鐘,"60"就代表60分鐘,"D"則代表日線圖的數據,"W"則代表周線圖的數據。 例如你本身的策略是運用1分鐘圖表的,就在主圖表上開啟1分鐘圖,然後加上這句: dailyhigh=request.security(syminfo.tickerid,"D",high[1]) 就可以拿到上一個交易日裏日線圖的最高價,dailyhigh是自已給的名稱,方便大家在計算時再使用。例如你再寫dailyhigh> dailyhigh[1]就代表你的策略中要求上一個交易日的最高價比再上一日的最高價更高。 留意,本身daiyhigh這個數據要自行設定是要取「上一個交易日」的最高價,若在這個名稱再加上[1],便是由上一個交易日開始再倒數一個交易日。 最後是request.security的( ) 內「要取那一個數據」的部份,這部份不一定只能使用最高價、最低價、開市價、收市價等的數據的,也可以是不同指標的數據,甚至是你自行經過計算的答案。 假設你在主圖表上開啟一個1分鐘圖表,你的策略也包括了MACD的運用,先用[macdLine,signalLine,_]=ta.macd(close,12,26,9) 定義了MACD的快線及慢線為macdLine及signalLine。 signal5min=request.security(syminfo.tickerid,"5",signalLine) macdhourly=request.security(syminfo.tickerid,"60",macdLine) 然後我們把5分鐘MACD慢線的數據及小時圖MACD快線的數據命名為signal5min及macdhourly,然後用上request.security,在( )內分別填上signalLine及macdLine便可以。 再加上plot便可以把5分鐘MACD慢線的數據畫出來,然後加一個1分的MACD便能將兩者作比較。 25 另外,筆者發現很多新手都比較抗拒使用plot這個功能,大家都會只集中去留意backtest的結果,而且有了backtest的結果後圖表上根本便有入市訊號的位置,那大家自然會想,若不是要寫一個自己的技術指標,那plot這個功能實沒多大用處。 但筆者的習慣是,每次寫自己的交易策略時,每寫一部份都會先用plot來看看寫出來的是否真的是自己想要的,因為用程式語言去寫交易策略,與大家用目測是完全不同的,很多時候用程式寫出來的未必就是你想要的。你的交易策略可以很複雜,到你寫好後再做backtest,才發現根本不是你想要的,那再重寫就反而會更麻煩。 我們網頁: www.quants.hk Youtube: https://www.youtube.com/@markchunwai Facebook專頁: https://www.facebook.com/quantshk/ Patreon: https://www.patreon.com/quantshk

【如何用Trading View 運用不同技術指標寫交易策略】

創富坊
程式交易 www.quants.hk (導師: 財經書藉作家: 麥振威)・2024-06-13

教授pine script 時最多新手問的就是一些主要的技術指標如何去寫,當你最初練習pine script時就先用一些常用的技術指標來試試寫策略,到熟習後,即使一些未見過的技術指標,只要你在google找到指標的公式,也能自行寫出來。 例如,MACD是內置的指標,第一步是記得trading view的內置指標是要加上「ta.」的,寫法如下: [macdLine,signalLine,_]=ta.macd(close,12,26,9) 再要把MACD的快線在圖表上顯示,就用plot這個功能,寫法如下: plot(macdLine,title="MACDLINE",color=color.red,linewidth=1) 不過,有些指標可能並非內置的,又或即使是內置,但你習慣了自行寫出來,假設大家不懂得什麼是bollinger’s band,然後在網上找到它的公式就是通道的頂部是20日平均線加上兩個標準差,而底部是20日平均線減去兩個準差,那我們就可以自己寫出來。 例如平均線是SMA,要寫出來就要加上「ta.」,先想一個名稱給你每個要計算的答案,什麼名稱都可以,但名稱不可以用數字開頭。例如你想叫平均線的名稱做SMA20,就用以下的寫法: sma20=ta.sma(close,20) 然後又給標準差一個名稱,假設你叫它為ST,那寫法如下: st=ta.stdev(close,20) 然後再分別給多通道的頂部及底部名稱,假設叫做upper及lower upper = sma20+ 2*st lower = sma20 – 2*st 寫法就是這樣簡單,然後upper及lower就可以用作其他計算的部份,例如你的入市策略是最高價升穿bollinger’s band 達5%,那寫法如下: 先給你的入市條件一個名稱,假設名為buyCondition,也給upper高5%的情況一個名稱,假設是upperhigh uppperhigh=upper*1.05 buyCondition=ta.crossover(high,upperhigh) 此外,其他我們常見的技術指標如RSI, ATR等也是內置的,寫法同樣是先給它們一個名稱,例如你想叫它們做rs及atrValue,寫法如下: rs=ta.rsi(close,14) atrValue=atr(14) 其他有些主要常用的技術指標也要自行計算的,如Stochastic,寫法如下: //@version=5 indicator("stochastic") stcLength=input(14) periodK=input(3) periodD=input(3) fastSTC=ta.stoch(close,high,low,stcLength) slowK=ta.sma(fastSTC,periodK) slowD=ta.sma(slowK,periodD) plot(slowK,title="slowK",color=color.red,linewidth=1) plot(slowD,title="slowD",color=color.blue,linewidth=1) 我們再試試寫Rate of change這個指標,先在網上找到它的公式如下: 然後大家可自行先用Trading View 先試試寫出來才看答案,若沒有寫錯,那寫指標這部份的學習便沒有問題了。 Rate of change寫法答案: length = input.int(9) source = input(close) roc_smooth = input(5) roc = ta.sma((100 * (source - source[length])/source[length]),roc_smooth) 最後我們看看super Trend這個指標的寫法,有些時候我們希望指標的參數是可以寫好後直接在圖表上更改的,又或有幾個指標的參數也是一樣的,我們會重覆使用,那就先給參數一個名稱,例如叫做length,可以參考以下superTrend這個指標的寫法: //@version=5 indicator("SuperTrend", overlay=true) length = (10) multiplier = (3) atr = ta.atr(1) basis = ta.highest(high, length) + ta.lowest(low, length) basis := basis / 2 upperBand = basis + (multiplier * atr) lowerBand = basis - (multiplier * atr) trendUp = close > upperBand[1] ? true : close[1] > upperBand[1] ? true : false trendDown = close < lowerBand[1] ? true : close[1] < lowerBand[1] ? true : false plot(trendUp ? upperBand : lowerBand, color=color.blue, linewidth=2, title="SuperTrend") 這裏用了「? :」這種寫法,?前是條件,?後是若符合條件要怎樣,而:後則是若不符合條件要怎樣,若大家看其他Tradind View用家寫的策略,這是十分常見的寫法。 trendDown = close < lowerBand[1] ? true : close[1] < lowerBand[1] ? true : false 這個的意思就是trendDown是名稱,然後看看收市價是否小於上一支陰陽燭的supertrend的底部,若符合條件就是true,否則就再看看上一支陰陽燭的收市價是否低於上一支陰陽燭的supertrend的底部,若符合條件,也是true,但兩個條件也不符合就是false。 我們網頁: www.quants.hk Youtube: https://www.youtube.com/@markchunwai Facebook專頁: https://www.facebook.com/quantshk/ Patreon: https://www.patreon.com/quantshk


破.地獄
機動戰士Gundam GQuuuuuuX -Beginning- Illustration Card 特典場
愛情咀咀咒
摘星廚神:巴黎夢
穿越時空的初吻
你的顏色
摘星廚神.巴黎夢
穿越時空の初吻
贖夢
4DX  Imagine Dragons: Live From The Hollywood Bowl with the LA Film Orchestra 2025
SEVENTEEN RIGHT HERE WORLD TOUR IN CINEMAS
IMAX with Laser 白雪公主
4DX  白雪公主
白雪公主
魔域女巫
高空殺機
4DX  ZEROBASEONE THE FIRST TOUR TIMELESS WORLD IN CINEMAS
Imagine Dragons: Live From The Hollywood Bowl with the LA Film Orchestra 2025
孤獨的美食家
無痛俠
猴
機動戰士Gundam GQuuuuuuX -Beginning-
ZEROBASEONE THE FIRST TOUR TIMELESS WORLD IN CINEMAS
門逃
米奇17號
4DX  劇場版 「進擊的巨人」完結篇 THE LAST ATTACK
4DX  哪吒之魔童鬧海
IMAX with Laser 哪吒之魔童鬧海
看我今天怎麼說
哪吒之魔童鬧海
美國隊長4:勇敢新世界
破.地獄
機動戰士Gundam GQuuuuuuX -Beginning- Illustration Card 特典場