MQL5學習之簡單移動平均線MA的編寫

昨天還是有點高估自己了,MACD相對較難一點,改學MA的編寫,首先明確MA的計算,假如有4個值,p=[1,2, 3, 4],?period=3,

則v[0]=p[0], v[1]=p[1],v[2]=(p[0]+p[1]+p[2])/3=2,

v[3]=(v[2]*3+p[3]-p[0])/3,

然后將v[3]的計算公式化簡單就得到v[3]=v[2] + (p[3]-p[0])/3,把period,初始值i代進來,注意i從period開始:

v[i]=v[i-1] + (p[i]-p[i-period])/period

一句話解釋即為第i個平均值的計算為i-1的位置的平均值加上一個計算值,這個計算值由第i位置的價格減去步長前的價格再除于步長period得到。

然后即可以來觀察一下移動平均線的代碼了:

//+------------------------------------------------------------------+
//|                                        Custom Moving Average.mq5 |
//|                             Copyright 2000-2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"//--- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_type2   DRAW_LINE
#property indicator_color2  Silver
//--- input parameters
input int            InpMAPeriod1=20;
input int            InpMAPeriod2=60;
//--- indicator buffer
double ExtLineBuffer1[];
double ExtLineBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit(){
//--- indicator buffers mappingSetIndexBuffer(0,ExtLineBuffer1,INDICATOR_DATA);SetIndexBuffer(1,ExtLineBuffer2,INDICATOR_DATA);
//--- set accuracyIndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- set first bar from what index will be drawnPlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpMAPeriod1);PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpMAPeriod2);
//--- name for DataWindowstring short_name ="SMA";IndicatorSetString(INDICATOR_SHORTNAME,short_name+"("+string(InpMAPeriod1)+")");IndicatorSetString(INDICATOR_SHORTNAME,short_name+"("+string(InpMAPeriod2)+")");
//--- set drawing line empty valuePlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);}
//+------------------------------------------------------------------+
//|  Moving Average                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,const int prev_calculated,const int begin,const double &price[]){if(rates_total<InpMAPeriod1-1+begin)return(0);
//--- first calculation or number of bars was changedif(prev_calculated==0){ArrayInitialize(ExtLineBuffer1,0);PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpMAPeriod1-1+begin);PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpMAPeriod2-1+begin);}
//--- calculationCalculateSimpleMA(rates_total,prev_calculated,begin,price,ExtLineBuffer1, InpMAPeriod1);if(rates_total<InpMAPeriod2-1+begin)return(rates_total); else {CalculateSimpleMA(rates_total,prev_calculated,begin,price,ExtLineBuffer2, InpMAPeriod2);}
//--- return value of prev_calculated for next callreturn(rates_total);}
//+------------------------------------------------------------------+
//|   simple moving average                                          |
//+------------------------------------------------------------------+
void CalculateSimpleMA(int rates_total,int prev_calculated,int begin,const double &price[], double &buffer[], int period){int i,start;
//--- first calculation or number of bars was changedif(prev_calculated==0){start=period+begin;//--- set empty value for first start barsfor(i=0; i<start-1; i++)buffer[i]=0.0;//--- calculate first visible valuedouble first_value=0;for(i=begin; i<start; i++)first_value+=price[i];first_value/=period;buffer[start-1]=first_value;}elsestart=prev_calculated-1;
//--- main loopfor(i=start; i<rates_total && !IsStopped(); i++)buffer[i]=buffer[i-1]+(price[i]-price[i-period])/period;}

#property indicator_chart_window 這一行表達為主圖顯示,若想顯示到副圖,可改為#property indicator_separate_window

這一行表達為需要畫兩個變量:#property indicator_plots ? 2

這一行表達第二個畫出來的變量用灰色:#property indicator_color2 ?Silver

程序:

input int ? ? ? ? ? ?InpMAPeriod1=20;

input int ? ? ? ? ? ?InpMAPeriod2=60;表示輸入兩個參數,一個為20,一個為60

初始化時需要針對變量0和變量1分別初始化:

? ?SetIndexBuffer(0,ExtLineBuffer1,INDICATOR_DATA);

? ?SetIndexBuffer(1,ExtLineBuffer2,INDICATOR_DATA);

代碼CalculateSimpleMA中計算MA的核心代碼為:

   for(i=start; i<rates_total && !IsStopped(); i++)buffer[i]=buffer[i-1]+(price[i]-price[i-period])/period;}

然后我們運行代碼,會發現彈出參數,剛好是前面代碼中定義的變量

運行出來的20均,60均的圖形如下:

然后與通達信上的相比較,發現是一致的,說明計算無誤

從目前實踐的看起來,MQL5難度要顯著高于通達信或是北極星什么的,唯一的好處是可以做極其復雜的計算,無限制的變量,類什么的,并可以做文件存儲,網絡傳輸,幾乎能想到的一切,比如后面對接實盤時,官方對接實盤是收費的,如果你有程序化交易的程序接口,完全可在算法中直接http協議完成實盤交易。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719155.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719155.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719155.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

瀏覽器展示Blob/File文件

1. 瀏覽器展示Blob/File文件 I.Blob格式轉Base64格式 當我們接收到后端傳輸過來的文件時&#xff0c;很多時候我們需要將傳過來的文件轉為Base64格式。如后端傳來驗證碼圖片時等 下面將提供函數&#xff1a; // Blob轉Base64 export const blobToBase64 (blob: Blob) >ne…

ChatGPT論文指南|ChatGPT如何助力論文中的數據分析!【建議收藏】

點擊下方▼▼▼▼鏈接直達AIPaperPass &#xff01; AIPaperPass - AI論文寫作指導平臺 公眾號原文▼▼▼▼&#xff1a; ChatGPT論文指南|ChatGPT如何助力論文中的數據分析&#xff01;【建議收藏】 小編在之前的論文寫作流程中&#xff0c;介紹了大量論文文字工作&#xff…

Effective objective-c-- 內存管理

Effective objective-c-- 內存管理 前言理解引用計數引用計數工作原理屬性存取方法中的內存管理自動釋放池保留環要點 以ARC簡化引用計數使用ARC時必須遵循的方法和命名規則變量的內存管理語義ARC如何清理實例變量覆寫內存管理方法要點 在dealloc方法中只釋放引用并解除監聽要點…

Mybatis-Plus 5分鐘快速上手,10分鐘熟練使用

小伙伴們好&#xff0c;歡迎關注&#xff0c;一起學習&#xff0c;無限進步 以下為學習 mybatis-plus 過程中的筆記 mybatis-plus 官網地址&#xff1a;https://mp.baomidou.com/ 文章目錄 特性快速開始mybatis-plus 配置插入測試及雪花算法主鍵生成策略查詢更新刪除查詢指定字…

Text2SQL 和 智能問答 的提示詞寫法

Text2SQL 生成 Query SQL System Message You are a {dialect} expert. Given an input question, creat a syntactically correct {dialect} query to run. Unless the user specifies in the question a specific number of examples to obtain, query for at most {top_k} r…

Linux 創建.NET 服務

文章目錄 創建服務啟用服務啟動 & 重啟服務查看服務狀態問題排查 創建服務 將服務文件上傳到 /home/mes/api-mes-dev, 其他服務修改對應的目錄在 /usr/lib/systemd/system/ 創建 mesapi-dev.service, 其他服務修改對應文件名 [Unit] Descriptionmesapi-dev service[Servi…

探索Linux世界:初次接觸和基本指令(文件操作)

文章目錄 1.基本介紹和準備2.基本指令和Linux的基本操作3.幾個重要基本指令3.1 ls - 列出文件和目錄3.1.1文件的知識3.1.2 .和..文件 3.2pwd - 顯示當前工作目錄3.2.1路徑知識 3.3 cd - 切換目錄3.4 touch - 創建文件或更新時間戳3.5mkdir - 創建新目錄3.6rm - 刪除文件或目錄3…

leetcode熱題100學習計劃-鏈表-反轉鏈表

思路 使用頭插法逆轉鏈表 注&#xff1a;鏈表一般為操作方便&#xff0c;頭結點不存值&#xff0c;是一個虛擬節點 代碼 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val)…

深入了解 Android 中的 FrameLayout 布局

FrameLayout 是 Android 中常用的布局之一&#xff0c;它允許子視圖堆疊在一起&#xff0c;可以在不同位置放置子視圖。在這篇博客中&#xff0c;我們將詳細介紹 FrameLayout 的屬性及其作用。 <FrameLayout xmlns:android"http://schemas.android.com/apk/res/androi…

【數據結構和算法初階(C語言)】帶環鏈表問題詳解(快慢指針的燒腦應用)

目錄 1.鋪墊-----帶環鏈表基本了解 2. 題目&#xff1a;環形鏈表 3.環形鏈表|| ?編輯 3.1題解1 3.2 題解2 4.總結 1.鋪墊-----帶環鏈表基本了解 環形鏈表題目啟迪&#xff1a; 環形鏈表特點&#xff1a;遍歷鏈表會出現一模一樣的地址 2. 題目&#xff1a;環形鏈表 給…

數字化轉型導師鵬:政府數字化轉型政務服務類案例研究

政府數字化轉型政務服務類案例研究 課程背景&#xff1a; 很多地方政府存在以下問題&#xff1a; 不清楚標桿省政府數字化轉型的政務服務類成功案例 不清楚地級市政府數字化轉型的政務服務類成功案例 不清楚縣區級政府數字化轉型的政務服務類成功案例 課程特色&#x…

基于C語言實現內存型數據庫(kv存儲)

基于C語言實現內存型數據庫(kv存儲) 文章目錄 基于C語言實現內存型數據庫(kv存儲)1. 項目背景1.1 Redis介紹1.2 項目預期及基本架構 2. 服務端原理及代碼框架2.1 網絡數據回環的實現2.2 array的實現2.3 rbtree的實現2.4 btree的實現2.5 hash的實現2.6 dhash的實現2.7 skiplist的…

XV4001KC數字輸出 車載用(piezoman)

EPSON的XV4001KC角速度傳感器是為滿足汽車行業對高精度和高可靠性需求而設計的。它不僅提供了高級的運動監測特性&#xff0c;高精度的角速度測量和溫度監測功能&#xff0c;而且其緊湊的設計6.04.83.3mm尺寸對于空間受限的車載環境來說&#xff0c;是一大優勢&#xff0c;使得…

二十篇esp345

from machine import I2C,Pin from ssd1306 import SSD1306_I2C i2c I2C(sdaPin(“Y8”), sclPin(“Y6”)) oled SSD1306_I2C(128, 64, i2c, addr0x3c) oled.text(“Hello World!”, 0, 0) oled.text(“MicroPython”, 0, 20) oled.text(“By 01Studio”, 0, 50) oled.show()…

vue 中在子頁面中使用watch監聽父頁面數據而導致接口多次調用

vue 中在子頁面中使用watch監聽父頁面數據而導致接口多次調用 解決方式 debounce function debounce(func, delay) {let timerId;return function(...args) {clearTimeout(timerId);timerId setTimeout(() > {func.apply(this, args);}, delay);}; }watch中 watch:{監聽值…

AIGC 知識:機器學習中的“微調“和“遷移學習“有什么區別?

以下是關于**微調 (fine-tuning)和遷移學習 (Transfer learning)**的區別&#xff0c;涉及到機器學習和深度學習的上下文&#xff1a; 遷移學習&#xff1a; 概述&#xff1a;遷移學習涉及使用預訓練模型作為新任務或領域的起點。目標&#xff1a;利用預訓練模型在大型數據集上…

政務瀏覽器——打通信創閉環最后一公里

當前&#xff0c;信創建設工作主要集中在芯片、操作系統、數據庫以及pc整機&#xff0c;這些領域基本可用&#xff0c;或者達到了市場主流水平。但是&#xff0c;政務辦事場景下的信創落地仍然困難重重&#xff0c;很多地方不得不裝雙系統或買兩臺設備來來平衡日常業務和信創考…

Qt:基于QQuickFramebufferObject顯示QImage到QML中

GItHub地址 簡介 本倉庫實現了一個在QML框架中&#xff0c;顯示QImage數據的QML控件&#xff0c;取名為JQImageItem 本控件針對的場合是需要顯示并且頻繁修改QImage的場景&#xff0c;例如視頻顯示。 提供了2個實現版本&#xff0c;一個是基于QQuickFramebufferObject&…

STM32CubeIDE基礎學習-軟件安裝,環境搭建

STM32CubeIDE基礎學習-軟件介紹及環境搭建步驟 文章目錄 STM32CubeIDE基礎學習-軟件介紹及環境搭建步驟前言第1章 STM32CubeIDE 介紹1.1 軟件描述1.2 軟件支持的功能及特點 第2章 STM32CubeIDE 軟件安裝2.1 STM32CubeIDE 軟件獲取方法2.2 STM32CubeIDE 軟件安裝步驟2.2.1 錯誤安…

C++模板完整版

顧得泉&#xff1a;個人主頁 個人專欄&#xff1a;《Linux操作系統》 《C從入門到精通》 《LeedCode刷題》 鍵盤敲爛&#xff0c;年薪百萬&#xff01; 一、泛型編程 如何實現一個通用的交換函數呢&#xff1f; void Swap(int& left, int& right) {int temp left…