Работа завершена
Техническое задание
Hi
I have tried over the last few days to build a simple crossover indicator with alerts using various chat bots . But I have come to the simple resolution that none of us [me & bots ] have skills to make it work . So what do I require
I want a custom 13 day moving average to crossover either an Adaptive ma /Hull ma { my attempts involved using a Hull but either is fine } and to send me an push notification via txt on crossover simple as that .
Below are my attempts the txt me version uses a Twillo number i,m thinking that may not be necessary i,ll let you tell me what you think
1 st crossover
//+------------------------------------------------------------------+
//| Zoot Suit.mq4 |
//| Copyright 2024, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| ZootSuit.mq4 |
//| |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
// Define period as a global variable
input int Period = 13; // Or whatever value you intend to use
// Define buffers
double hullBuffer[];
double emaBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// Indicator buffers mapping
SetIndexBuffer(0, hullBuffer);
SetIndexBuffer(1, emaBuffer);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
// Calculate the Hull moving average
for (int i = prev_calculated; i < rates_total; i++)
{
hullBuffer[i] = HullMovingAverage(close, Period, i);
}
// Calculate the custom simple moving average
for (int i = prev_calculated; i < rates_total; i++)
{
double sum = 0.0;
for (int j = i - Period + 1; j <= i; ++j) {
sum += close[j];
}
emaBuffer[i] = sum / Period;
}
// Check for crossover and send push notification
if (rates_total >= 2 && hullBuffer[rates_total - 2] > emaBuffer[rates_total - 2] && hullBuffer[rates_total - 1] < emaBuffer[rates_total - 1])
{
SendNotification("HMA crossed below custom EMA");
}
// Return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//| Hull Moving Average Calculation |
//+------------------------------------------------------------------+
double HullMovingAverage(const double &price[],
const int period,
const int shift)
{
double wma1 = iMA(Symbol(), 0, period / 2, 0, MODE_WMA, PRICE_CLOSE, shift);
double wma2 = iMA(Symbol(), 0, period, 0, MODE_WMA, PRICE_CLOSE, shift);
double hull = 2 * wma1 - wma2;
return hull;
2 nd send txt message
//+------------------------------------------------------------------+
//| SendTextMessage().mq4 |
//| puggy |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "puggy"
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
}
//+------------------------------------------------------------------+
void SendTextMessage(string recipient, string message)
{
string url = "https://api.twilio.com/2010-04-01/Accounts/Your_Account_SID/Messages.json";
string username = "Your_Account_SID";
string password = "Your_Auth_Token";
string headers = "Authorization: Basic " + Base64Encode(username + ":" + password);
string postData = "To=" + recipient + "&From=Your_Twilio_Phone_Number&Body=" + message;
int request = WebRequest("POST", url, headers, postData, 5000);
if (request > 0)
{
string response = WebRequestGetResult(request);
Print("Twilio response: ", response);
}
else
{
Print("Failed to send HTTP request to Twilio");
}