TF-altProjekte/Experts/7219/griderKatMultiAEA.mq4

2611 lines
201 KiB
MQL4
Raw Permalink Normal View History

2025-05-30 16:31:33 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| griderKatMultiAEA.mq4 |
//| Copyright 2019, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#define pdxversion "9.27"
#property copyright "Klymenko Roman (needtome@icloud.com)"
#property link "https://www.mql5.com/en/users/needtome"
#property version pdxversion
#property strict
enum TypeOfPos
{
MY_BUY,
MY_SELL,
MY_BUYSTOP,
MY_BUYLIMIT,
MY_SELLSTOP,
MY_SELLLIMIT,
MY_BUYSLTP,
MY_SELLSLTP,
MY_ALLPOS,
};
enum TypeOfLang{
MY_ENG, // English
MY_RUS, // Russian
};
enum TypeOfLots //Lots Mode
{
MY_FIXED,//Fixed
MY_ARIFMET,// Arifmet
MY_GEOMET,// Geomet
};
enum TypeOfSeries //Series Mode
{
MY_SERIES_PLUS,//In the direction of the series
MY_SERIES_MINUS,// Against the direction of the series
};
enum TypeOfMA //MA Type
{
MA_FIRST,//Lower or higher moving
MA_SECOND,// Ascending or descending
};
enum TypeOfDir //Direction Type
{
MA_DIR_BOTH,//Any
MA_DIR_LONG,// Only Long
MA_DIR_SHORT,// Only Short
};
input int EA_Magic=345543;
input string my_cmt="giderKatEA"; //Comment
input double minSpread=0; // Enter only with spread, less
input TypeOfLots typeLot=MY_GEOMET; // Chain increase
input double equityLess=0; //Close all when equity is decreased by, $
input bool replaceFirstSymbol=false; // Replace symbol No. 1 with a graph symbol
input int closeAtTotal=0; //Close at total profit
sinput string delimeter_01_1=""; // ---------- Symbol No. 1 ----------
input bool useSym_1=true; // Allow trading on this symbol
input string symName_1=""; // Symbol
input double Lot_1=0.05; // Lot size
input int gridStep_1=30; // Grid size, points
input TypeOfDir typeDir_1=MA_DIR_BOTH; // Entry directions
sinput string delimeter_02_1=""; // --- Close all positions
input double takeProfit_1=0; //On profit, $
input double takeProfit1step_1=0; //When profit in step 1, $
input double takeProfit2step_1=0; //When profit in step 2, $
input double takeProfit4step_1=0; //When profit in step 4, $
input uint gridStepCountClose_1=2; // Close everything when trading, number
sinput string delimeter_07_1=""; // --- Towards the bar
input bool BARS_enabled_1=false; //Use bar entry
input ENUM_TIMEFRAMES BARS_Timeframe_1=PERIOD_D1; // Timeframe
input int BARS_RSI_Period_1=0; //Start only on RSI signal with period
sinput string delimeter_08_1=""; // --- Series of bars
input int SERIES_count_1=0; //Enter at N bars one way
input TypeOfSeries SERIES_type_1=MY_SERIES_PLUS; // Entry direction
input ENUM_TIMEFRAMES SERIES_Timeframe_1=PERIOD_M15; // Timeframe
sinput string delimeter_09_1=""; // --- MA
input ENUM_TIMEFRAMES MA_Timeframe_1=PERIOD_D1; // Timeframe
input int MA_PERIOD_1=0; //Period
input TypeOfMA MA_TYPE_1=MA_FIRST; // Type of strategy
input bool MA_invert_1=false; // Invert signal
input bool MA_across_price_1=false; // Only when crossing the price with MA
input bool MA_across_always_1=false; // At all steps when crossing the price
sinput string delimeter_10_1=""; // --- RSI
input ENUM_TIMEFRAMES RSI_Timeframe_1=PERIOD_M5; // Timeframe
input int RSI_PERIOD_1=0; //Period
input bool RSI_enter_return_1= false; // Enter when exiting borders
input bool RSI_only_first_1= true; // Use RSI only on first login
input bool RSI_invert_1= false; // Invert signal
sinput string delimeter_11_1=""; // --- Bolinger Bands
input ENUM_TIMEFRAMES BB_Timeframe_1=PERIOD_M5; // Timeframe
input int BB_PERIOD_1=0; //Period
input int BB_SHIFT_1=0; //Offset
input double BB_DEVIATION_1=2; //Number of standard deviations
input bool BB_only_first_1= false; // Use BB only on first login
input bool BB_INVERT_1=false; //Invert signal
sinput string delimeter_01_2=""; // ---------- Symbol No. 2 ----------
input bool useSym_2=false; // Allow trading on this symbol
input string symName_2=""; // Symbol
input double Lot_2=0.05; // Lot size
input int gridStep_2=30; // Grid size, points
input TypeOfDir typeDir_2=MA_DIR_BOTH; // Entry directions
sinput string delimeter_02_2=""; // --- Close all positions
input double takeProfit_2=0; //On profit, $
input double takeProfit1step_2=0; //When profit in step 1, $
input double takeProfit2step_2=0; //When profit in step 2, $
input double takeProfit4step_2=0; //When profit in step 4, $
input uint gridStepCountClose_2=2; // Close everything when trading, number
sinput string delimeter_07_2=""; // --- Towards the bar
input bool BARS_enabled_2=false; //Use bar entry
input ENUM_TIMEFRAMES BARS_Timeframe_2=PERIOD_D1; // Timeframe
input int BARS_RSI_Period_2=0; //Start only on RSI signal with period
sinput string delimeter_08_2=""; // --- Series of bars
input int SERIES_count_2=0; //Enter at N bars one way
input TypeOfSeries SERIES_type_2=MY_SERIES_PLUS; // Entry direction
input ENUM_TIMEFRAMES SERIES_Timeframe_2=PERIOD_M15; // Timeframe
sinput string delimeter_09_2=""; // --- MA
input ENUM_TIMEFRAMES MA_Timeframe_2=PERIOD_D1; // Timeframe
input int MA_PERIOD_2=0; //Period
input TypeOfMA MA_TYPE_2=MA_FIRST; // Type of strategy
input bool MA_invert_2=false; // Invert signal
input bool MA_across_price_2=false; // Only when crossing the price with MA
input bool MA_across_always_2=false; // Only when crossing the price with MA
sinput string delimeter_10_2=""; // --- RSI
input ENUM_TIMEFRAMES RSI_Timeframe_2=PERIOD_M5; // Timeframe
input int RSI_PERIOD_2=0; //Period
input bool RSI_enter_return_2= false; // Enter when exiting borders
input bool RSI_only_first_2= true; // Use RSI only on first login
input bool RSI_invert_2= false; // Invert signal
sinput string delimeter_11_2=""; // --- Bolinger Bands
input ENUM_TIMEFRAMES BB_Timeframe_2=PERIOD_M5; // Timeframe
input int BB_PERIOD_2=0; //Period
input int BB_SHIFT_2=0; //Offset
input double BB_DEVIATION_2=2; //Number of standard deviations
input bool BB_only_first_2= false; // Use BB only on first login
input bool BB_INVERT_2=false; //Invert signal
sinput string delimeter_01_3=""; // ---------- Symbol No. 3 ----------
input bool useSym_3=false; // Allow trading on this symbol
input string symName_3=""; // Symbol
input double Lot_3=0.05; // Lot size
input int gridStep_3=30; // Grid size, points
input TypeOfDir typeDir_3=MA_DIR_BOTH; // Entry directions
sinput string delimeter_02_3=""; // --- Close all positions
input double takeProfit_3=0; //On profit, $
input double takeProfit1step_3=0; //When profit in step 1, $
input double takeProfit2step_3=0; //When profit in step 2, $
input double takeProfit4step_3=0; //When profit in step 4, $
input uint gridStepCountClose_3=2; // Close everything when trading, number
sinput string delimeter_07_3=""; // --- Towards the bar
input bool BARS_enabled_3=false; //Use bar entry
input ENUM_TIMEFRAMES BARS_Timeframe_3=PERIOD_D1; // Timeframe
input int BARS_RSI_Period_3=0; //Start only on RSI signal with period
sinput string delimeter_08_3=""; // --- Series of bars
input int SERIES_count_3=0; //Enter at N bars one way
input TypeOfSeries SERIES_type_3=MY_SERIES_PLUS; // Entry direction
input ENUM_TIMEFRAMES SERIES_Timeframe_3=PERIOD_M15; // Timeframe
sinput string delimeter_09_3=""; // --- MA
input ENUM_TIMEFRAMES MA_Timeframe_3=PERIOD_D1; // Timeframe
input int MA_PERIOD_3=0; //Period
input TypeOfMA MA_TYPE_3=MA_FIRST; // Type of strategy
input bool MA_invert_3=false; // Invert signal
input bool MA_across_price_3=false; // Only when crossing the price with MA
input bool MA_across_always_3=false; // At all steps when crossing the price
sinput string delimeter_10_3=""; // --- RSI
input ENUM_TIMEFRAMES RSI_Timeframe_3=PERIOD_M5; // Timeframe
input int RSI_PERIOD_3=0; //Period
input bool RSI_enter_return_3= false; // Enter when exiting borders
input bool RSI_only_first_3= true; // Use RSI only on first login
input bool RSI_invert_3= false; // Invert signal
sinput string delimeter_11_3=""; // --- Bolinger Bands
input ENUM_TIMEFRAMES BB_Timeframe_3=PERIOD_M5; // Timeframe
input int BB_PERIOD_3=0; //Period
input int BB_SHIFT_3=0; //Offset
input double BB_DEVIATION_3=2; //Number of standard deviations
input bool BB_only_first_3= false; // Use BB only on first login
input bool BB_INVERT_3=false; //Invert signal
sinput string delimeter_01_4=""; // ---------- Symbol No. 4 ----------
input bool useSym_4=false; // Allow trading on this symbol
input string symName_4=""; // Symbol
input double Lot_4=0.05; // Lot size
input int gridStep_4=30; // Grid size, points
input TypeOfDir typeDir_4=MA_DIR_BOTH; // Entry directions
sinput string delimeter_02_4=""; // --- Close all positions
input double takeProfit_4=0; //On profit, $
input double takeProfit1step_4=0; //When profit in step 1, $
input double takeProfit2step_4=0; //When profit in step 2, $
input double takeProfit4step_4=0; //When profit in step 4, $
input uint gridStepCountClose_4=2; // Close everything when trading, number
sinput string delimeter_07_4=""; // --- Towards the bar
input bool BARS_enabled_4=false; //Use bar entry
input ENUM_TIMEFRAMES BARS_Timeframe_4=PERIOD_D1; // Timeframe
input int BARS_RSI_Period_4=0; //Start only on RSI signal with period
sinput string delimeter_08_4=""; // --- Series of bars
input int SERIES_count_4=0; //Enter at N bars one way
input TypeOfSeries SERIES_type_4=MY_SERIES_PLUS; // Entry direction
input ENUM_TIMEFRAMES SERIES_Timeframe_4=PERIOD_M15; // Timeframe
sinput string delimeter_09_4=""; // --- MA
input ENUM_TIMEFRAMES MA_Timeframe_4=PERIOD_D1; // Timeframe
input int MA_PERIOD_4=0; //Period
input TypeOfMA MA_TYPE_4=MA_FIRST; // Type of strategy
input bool MA_invert_4=false; // Invert signal
input bool MA_across_price_4=false; // Only when crossing the price with MA
input bool MA_across_always_4=false; // At all steps when crossing the price
sinput string delimeter_10_4=""; // --- RSI
input ENUM_TIMEFRAMES RSI_Timeframe_4=PERIOD_M5; // Timeframe
input int RSI_PERIOD_4=0; //Period
input bool RSI_enter_return_4= false; // Enter when exiting borders
input bool RSI_only_first_4= true; // Use RSI only on first login
input bool RSI_invert_4= false; // Invert signal
sinput string delimeter_11_4=""; // --- Bolinger Bands
input ENUM_TIMEFRAMES BB_Timeframe_4=PERIOD_M5; // Timeframe
input int BB_PERIOD_4=0; //Period
input int BB_SHIFT_4=0; //Offset
input double BB_DEVIATION_4=2; //Number of standard deviations
input bool BB_only_first_4= false; // Use BB only on first login
input bool BB_INVERT_4=false; //Invert signal
sinput string delimeter_01_5=""; // ---------- Symbol No. 5 ----------
input bool useSym_5=false; // Allow trading on this symbol
input string symName_5=""; // Symbol
input double Lot_5=0.05; // Lot size
input int gridStep_5=30; // Grid size, points
input TypeOfDir typeDir_5=MA_DIR_BOTH; // Entry directions
sinput string delimeter_02_5=""; // --- Close all positions
input double takeProfit_5=0; //On profit, $
input double takeProfit1step_5=0; //When profit in step 1, $
input double takeProfit2step_5=0; //When profit in step 2, $
input double takeProfit4step_5=0; //When profit in step 4, $
input uint gridStepCountClose_5=2; // Close everything when trading, number
sinput string delimeter_07_5=""; // --- Towards the bar
input bool BARS_enabled_5=false; //Use bar entry
input ENUM_TIMEFRAMES BARS_Timeframe_5=PERIOD_D1; // Timeframe
input int BARS_RSI_Period_5=0; //Start only on RSI signal with period
sinput string delimeter_08_5=""; // --- Series of bars
input int SERIES_count_5=0; //Enter at N bars one way
input TypeOfSeries SERIES_type_5=MY_SERIES_PLUS; // Entry direction
input ENUM_TIMEFRAMES SERIES_Timeframe_5=PERIOD_M15; // Timeframe
sinput string delimeter_09_5=""; // --- MA
input ENUM_TIMEFRAMES MA_Timeframe_5=PERIOD_D1; // Timeframe
input int MA_PERIOD_5=0; //Period
input TypeOfMA MA_TYPE_5=MA_FIRST; // Type of strategy
input bool MA_invert_5=false; // Invert signal
input bool MA_across_price_5=false; // Only when crossing the price with MA
input bool MA_across_always_5=false; // At all steps when crossing the price
sinput string delimeter_10_5=""; // --- RSI
input ENUM_TIMEFRAMES RSI_Timeframe_5=PERIOD_M5; // Timeframe
input int RSI_PERIOD_5=0; //Period
input bool RSI_enter_return_5= false; // Enter when exiting borders
input bool RSI_only_first_5= true; // Use RSI only on first login
input bool RSI_invert_5= false; // Invert signal
sinput string delimeter_11_5=""; // --- Bolinger Bands
input ENUM_TIMEFRAMES BB_Timeframe_5=PERIOD_M5; // Timeframe
input int BB_PERIOD_5=0; //Period
input int BB_SHIFT_5=0; //Offset
input double BB_DEVIATION_5=2; //Number of standard deviations
input bool BB_only_first_5= false; // Use BB only on first login
input bool BB_INVERT_5=false; //Invert signal
sinput string delimeter_01_6=""; // ---------- Symbol No. 6 ----------
input bool useSym_6=false; // Allow trading on this symbol
input string symName_6=""; // Symbol
input double Lot_6=0.05; // Lot size
input int gridStep_6=30; // Grid size, points
input TypeOfDir typeDir_6=MA_DIR_BOTH; // Entry directions
sinput string delimeter_02_6=""; // --- Close all positions
input double takeProfit_6=0; //On profit, $
input double takeProfit1step_6=0; //When profit in step 1, $
input double takeProfit2step_6=0; //When profit in step 2, $
input double takeProfit4step_6=0; //When profit in step 4, $
input uint gridStepCountClose_6=2; // Close everything when trading, number
sinput string delimeter_07_6=""; // --- Towards the bar
input bool BARS_enabled_6=false; //Use bar entry
input ENUM_TIMEFRAMES BARS_Timeframe_6=PERIOD_D1; // Timeframe
input int BARS_RSI_Period_6=0; //Start only on RSI signal with period
sinput string delimeter_08_6=""; // --- Series of bars
input int SERIES_count_6=0; //Enter at N bars one way
input TypeOfSeries SERIES_type_6=MY_SERIES_PLUS; // Entry direction
input ENUM_TIMEFRAMES SERIES_Timeframe_6=PERIOD_M15; // Timeframe
sinput string delimeter_09_6=""; // --- MA
input ENUM_TIMEFRAMES MA_Timeframe_6=PERIOD_D1; // Timeframe
input int MA_PERIOD_6=0; //Period
input TypeOfMA MA_TYPE_6=MA_FIRST; // Type of strategy
input bool MA_invert_6=false; // Invert signal
input bool MA_across_price_6=false; // Only when crossing the price with MA
input bool MA_across_always_6=false; // At all steps when crossing the price
sinput string delimeter_10_6=""; // --- RSI
input ENUM_TIMEFRAMES RSI_Timeframe_6=PERIOD_M5; // Timeframe
input int RSI_PERIOD_6=0; //Period
input bool RSI_enter_return_6= false; // Enter when exiting borders
input bool RSI_only_first_6= true; // Use RSI only on first login
input bool RSI_invert_6= false; // Invert signal
sinput string delimeter_11_6=""; // --- Bolinger Bands
input ENUM_TIMEFRAMES BB_Timeframe_6=PERIOD_M5; // Timeframe
input int BB_PERIOD_6=0; //Period
input int BB_SHIFT_6=0; //Offset
input double BB_DEVIATION_6=2; //Number of standard deviations
input bool BB_only_first_6= false; // Use BB only on first login
input bool BB_INVERT_6=false; //Invert signal
sinput string delimeter_01_7=""; // ---------- Symbol No. 7 ----------
input bool useSym_7=false; // Allow trading on this symbol
input string symName_7=""; // Symbol
input double Lot_7=0.05; // Lot size
input int gridStep_7=30; // Grid size, points
input TypeOfDir typeDir_7=MA_DIR_BOTH; // Entry directions
sinput string delimeter_02_7=""; // --- Close all positions
input double takeProfit_7=0; //On profit, $
input double takeProfit1step_7=0; //When profit in step 1, $
input double takeProfit2step_7=0; //When profit in step 2, $
input double takeProfit4step_7=0; //When profit in step 4, $
input uint gridStepCountClose_7=2; // Close everything when trading, number
sinput string delimeter_07_7=""; // --- Towards the bar
input bool BARS_enabled_7=false; //Use bar entry
input ENUM_TIMEFRAMES BARS_Timeframe_7=PERIOD_D1; // Timeframe
input int BARS_RSI_Period_7=0; //Start only on RSI signal with period
sinput string delimeter_08_7=""; // --- Series of bars
input int SERIES_count_7=0; //Enter at N bars one way
input TypeOfSeries SERIES_type_7=MY_SERIES_PLUS; // Entry direction
input ENUM_TIMEFRAMES SERIES_Timeframe_7=PERIOD_M15; // Timeframe
sinput string delimeter_09_7=""; // --- MA
input ENUM_TIMEFRAMES MA_Timeframe_7=PERIOD_D1; // Timeframe
input int MA_PERIOD_7=0; //Period
input TypeOfMA MA_TYPE_7=MA_FIRST; // Type of strategy
input bool MA_invert_7=false; // Invert signal
input bool MA_across_price_7=false; // Only when crossing the price with MA
input bool MA_across_always_7=false; // At all steps when crossing the price
sinput string delimeter_10_7=""; // --- RSI
input ENUM_TIMEFRAMES RSI_Timeframe_7=PERIOD_M5; // Timeframe
input int RSI_PERIOD_7=0; //Period
input bool RSI_enter_return_7= false; // Enter when exiting borders
input bool RSI_only_first_7= true; // Use RSI only on first login
input bool RSI_invert_7= false; // Invert signal
sinput string delimeter_11_7=""; // --- Bolinger Bands
input ENUM_TIMEFRAMES BB_Timeframe_7=PERIOD_M5; // Timeframe
input int BB_PERIOD_7=0; //Period
input int BB_SHIFT_7=0; //Offset
input double BB_DEVIATION_7=2; //Number of standard deviations
input bool BB_only_first_7= false; // Use BB only on first login
input bool BB_INVERT_7=false; //Invert signal
sinput string delimeter_01_8=""; // ---------- Symbol No. 8 ----------
input bool useSym_8=false; // Allow trading on this symbol
input string symName_8=""; // Symbol
input double Lot_8=0.05; // Lot size
input int gridStep_8=30; // Grid size, points
input TypeOfDir typeDir_8=MA_DIR_BOTH; // Entry directions
sinput string delimeter_02_8=""; // --- Close all positions
input double takeProfit_8=0; //On profit, $
input double takeProfit1step_8=0; //When profit in step 1, $
input double takeProfit2step_8=0; //When profit in step 2, $
input double takeProfit4step_8=0; //When profit in step 4, $
input uint gridStepCountClose_8=2; // Close everything when trading, number
sinput string delimeter_07_8=""; // --- Towards the bar
input bool BARS_enabled_8=false; //Use bar entry
input ENUM_TIMEFRAMES BARS_Timeframe_8=PERIOD_D1; // Timeframe
input int BARS_RSI_Period_8=0; //Start only on RSI signal with period
sinput string delimeter_08_8=""; // --- Series of bars
input int SERIES_count_8=0; //Enter at N bars one way
input TypeOfSeries SERIES_type_8=MY_SERIES_PLUS; // Entry direction
input ENUM_TIMEFRAMES SERIES_Timeframe_8=PERIOD_M15; // Timeframe
sinput string delimeter_09_8=""; // --- MA
input ENUM_TIMEFRAMES MA_Timeframe_8=PERIOD_D1; // Timeframe
input int MA_PERIOD_8=0; //Period
input TypeOfMA MA_TYPE_8=MA_FIRST; // Type of strategy
input bool MA_invert_8=false; // Invert signal
input bool MA_across_price_8=false; // Only when crossing the price with MA
input bool MA_across_always_8=false; // At all steps when crossing the price
sinput string delimeter_10_8=""; // --- RSI
input ENUM_TIMEFRAMES RSI_Timeframe_8=PERIOD_M5; // Timeframe
input int RSI_PERIOD_8=0; //Period
input bool RSI_enter_return_8= false; // Enter when exiting borders
input bool RSI_only_first_8= true; // Use RSI only on first login
input bool RSI_invert_8= false; // Invert signal
sinput string delimeter_11_8=""; // --- Bolinger Bands
input ENUM_TIMEFRAMES BB_Timeframe_8=PERIOD_M5; // Timeframe
input int BB_PERIOD_8=0; //Period
input int BB_SHIFT_8=0; //Offset
input double BB_DEVIATION_8=2; //Number of standard deviations
input bool BB_only_first_8= false; // Use BB only on first login
input bool BB_INVERT_8=false; //Invert signal
sinput string delimeter_01_9=""; // ---------- Symbol No. 9 ----------
input bool useSym_9=false; // Allow trading on this symbol
input string symName_9=""; // Symbol
input double Lot_9=0.05; // Lot size
input int gridStep_9=30; // Grid size, points
input TypeOfDir typeDir_9=MA_DIR_BOTH; // Entry directions
sinput string delimeter_02_9=""; // --- Close all positions
input double takeProfit_9=0; //On profit, $
input double takeProfit1step_9=0; //When profit in step 1, $
input double takeProfit2step_9=0; //When profit in step 2, $
input double takeProfit4step_9=0; //When profit in step 4, $
input uint gridStepCountClose_9=2; // Close everything when trading, number
sinput string delimeter_07_9=""; // --- Towards the bar
input bool BARS_enabled_9=false; //Use bar entry
input ENUM_TIMEFRAMES BARS_Timeframe_9=PERIOD_D1; // Timeframe
input int BARS_RSI_Period_9=0; //Start only on RSI signal with period
sinput string delimeter_08_9=""; // --- Series of bars
input int SERIES_count_9=0; //Enter at N bars one way
input TypeOfSeries SERIES_type_9=MY_SERIES_PLUS; // Entry direction
input ENUM_TIMEFRAMES SERIES_Timeframe_9=PERIOD_M15; // Timeframe
sinput string delimeter_09_9=""; // --- MA
input ENUM_TIMEFRAMES MA_Timeframe_9=PERIOD_D1; // Timeframe
input int MA_PERIOD_9=0; //Period
input TypeOfMA MA_TYPE_9=MA_FIRST; // Type of strategy
input bool MA_invert_9=false; // Invert signal
input bool MA_across_price_9=false; // Only when crossing the price with MA
input bool MA_across_always_9=false; // At all steps when crossing the price
sinput string delimeter_10_9=""; // --- RSI
input ENUM_TIMEFRAMES RSI_Timeframe_9=PERIOD_M5; // Timeframe
input int RSI_PERIOD_9=0; //Period
input bool RSI_enter_return_9= false; // Enter when exiting borders
input bool RSI_only_first_9= true; // Use RSI only on first login
input bool RSI_invert_9= false; // Invert signal
sinput string delimeter_11_9=""; // --- Bolinger Bands
input ENUM_TIMEFRAMES BB_Timeframe_9=PERIOD_M5; // Timeframe
input int BB_PERIOD_9=0; //Period
input int BB_SHIFT_9=0; //Offset
input double BB_DEVIATION_9=2; //Number of standard deviations
input bool BB_only_first_9= false; // Use BB only on first login
input bool BB_INVERT_9=false; //Invert signal
sinput string delimeter_01_10=""; // ---------- Symbol No. 10 ----------
input bool useSym_10=false; // Allow trading on this symbol
input string symName_10=""; // Symbol
input double Lot_10=0.05; // Lot size
input int gridStep_10=30; // Grid size, points
input TypeOfDir typeDir_10=MA_DIR_BOTH; // Entry directions
sinput string delimeter_02_10=""; // --- Close all positions
input double takeProfit_10=0; //On profit, $
input double takeProfit1step_10=0; //When profit in step 1, $
input double takeProfit2step_10=0; //When profit in step 2, $
input double takeProfit4step_10=0; //When profit in step 4, $
input uint gridStepCountClose_10=2; // Close everything when trading, number
sinput string delimeter_07_10=""; // --- Towards the bar
input bool BARS_enabled_10=false; //Use bar entry
input ENUM_TIMEFRAMES BARS_Timeframe_10=PERIOD_D1; // Timeframe
input int BARS_RSI_Period_10=0; //Start only on RSI signal with period
sinput string delimeter_08_10=""; // --- Series of bars
input int SERIES_count_10=0; //Enter at N bars one way
input TypeOfSeries SERIES_type_10=MY_SERIES_PLUS; // Entry direction
input ENUM_TIMEFRAMES SERIES_Timeframe_10=PERIOD_M15; // Timeframe
sinput string delimeter_09_10=""; // --- MA
input ENUM_TIMEFRAMES MA_Timeframe_10=PERIOD_D1; // Timeframe
input int MA_PERIOD_10=0; //Period
input TypeOfMA MA_TYPE_10=MA_FIRST; // Type of strategy
input bool MA_invert_10=false; // Invert signal
input bool MA_across_price_10=false; // Only when crossing the price with MA
input bool MA_across_always_10=false; // At all steps when crossing the price
sinput string delimeter_10_10=""; // --- RSI
input ENUM_TIMEFRAMES RSI_Timeframe_10=PERIOD_M5; // Timeframe
input int RSI_PERIOD_10=0; //Period
input bool RSI_enter_return_10= false; // Enter when exiting borders
input bool RSI_only_first_10= true; // Use RSI only on first login
input bool RSI_invert_10= false; // Invert signal
sinput string delimeter_11_10=""; // --- Bolinger Bands
input ENUM_TIMEFRAMES BB_Timeframe_10=PERIOD_M5; // Timeframe
input int BB_PERIOD_10=0; //Period
input int BB_SHIFT_10=0; //Offset
input double BB_DEVIATION_10=2; //Number of standard deviations
input bool BB_only_first_10= false; // Use BB only on first login
input bool BB_INVERT_10=false; //Invert signal
sinput string delimeter_01_11=""; // ---------- Symbol No. 11 ----------
input bool useSym_11=false; // Allow trading on this symbol
input string symName_11=""; // Symbol
input double Lot_11=0.05; // Lot size
input int gridStep_11=30; // Grid size, points
input TypeOfDir typeDir_11=MA_DIR_BOTH; // Entry directions
sinput string delimeter_02_11=""; // --- Close all positions
input double takeProfit_11=0; //On profit, $
input double takeProfit1step_11=0; //When profit in step 1, $
input double takeProfit2step_11=0; //When profit in step 2, $
input double takeProfit4step_11=0; //When profit in step 4, $
input uint gridStepCountClose_11=2; // Close everything when trading, number
sinput string delimeter_07_11=""; // --- Towards the bar
input bool BARS_enabled_11=false; //Use bar entry
input ENUM_TIMEFRAMES BARS_Timeframe_11=PERIOD_D1; // Timeframe
input int BARS_RSI_Period_11=0; //Start only on RSI signal with period
sinput string delimeter_08_11=""; // --- Series of bars
input int SERIES_count_11=0; //Enter at N bars one way
input TypeOfSeries SERIES_type_11=MY_SERIES_PLUS; // Entry direction
input ENUM_TIMEFRAMES SERIES_Timeframe_11=PERIOD_M15; // Timeframe
sinput string delimeter_09_11=""; // --- MA
input ENUM_TIMEFRAMES MA_Timeframe_11=PERIOD_D1; // Timeframe
input int MA_PERIOD_11=0; //Period
input TypeOfMA MA_TYPE_11=MA_FIRST; // Type of strategy
input bool MA_invert_11=false; // Invert signal
input bool MA_across_price_11=false; // Only when crossing the price with MA
input bool MA_across_always_11=false; // At all steps when crossing the price
sinput string delimeter_10_11=""; // --- RSI
input ENUM_TIMEFRAMES RSI_Timeframe_11=PERIOD_M5; // Timeframe
input int RSI_PERIOD_11=0; //Period
input bool RSI_enter_return_11= false; // Enter when exiting borders
input bool RSI_only_first_11= true; // Use RSI only on first login
input bool RSI_invert_11= false; // Invert signal
sinput string delimeter_11_11=""; // --- Bollinger Bands
input ENUM_TIMEFRAMES BB_Timeframe_11=PERIOD_M5; // Timeframe
input int BB_PERIOD_11=0; //Period
input int BB_SHIFT_11=0; //Offset
input double BB_DEVIATION_11=2; //Number of standard deviations
input bool BB_only_first_11= false; // Use BB only on first login
input bool BB_INVERT_11=false; //Invert signal
sinput string delimeter_13=""; // --- Other
input TypeOfLang LANG=MY_RUS; // Language
#ifdef __MQL5__
#include <Trade\Trade.mqh>
CTrade Trade;
enum TypeOfFilling // Filling Mode
{
FOK,//ORDER_FILLING_FOK
RETURN,// ORDER_FILLING_RETURN
IOC,//ORDER_FILLING_IOC
};
input TypeOfFilling useORDER_FILLING_RETURN=FOK; //Order filling mode
#endif
TypeOfDir typeDir=MA_DIR_BOTH; // Entry direction
double takeProfit=0; //When profit is, $
double takeProfit1step=0; //Profit at step 1, $
double takeProfit2step=0; //Profit at step 2, $
double takeProfit4step=0; //Profit at step 4, $
uint gridStepCountClose=0; // Close all at trade number
bool BARS_enabled=false; //Use entry by bar only
ENUM_TIMEFRAMES BARS_Timeframe=PERIOD_D1; // Timeframe
int BARS_RSI_Period=0; //Start only upon RSI signal with specific period
int SERIES_count=0; //Enter if N bars in one direction
TypeOfSeries SERIES_type=MY_SERIES_PLUS; // Entry direction
ENUM_TIMEFRAMES SERIES_Timeframe=PERIOD_M15; // Timeframe
ENUM_TIMEFRAMES MA_Timeframe=PERIOD_D1; // Timeframe
int MA_PERIOD=0; //Period
TypeOfMA MA_TYPE=MA_FIRST; // Strategy type
bool MA_invert=false; // Invert the signal
bool MA_across_price=false; // Only when price crosses MA
bool MA_across_always=false; // In all steps when price is crossed
ENUM_TIMEFRAMES RSI_Timeframe=PERIOD_M5; // Timeframe
int RSI_PERIOD=0; //Period
bool RSI_enter_return= false; // Enter when moves beyond borders
bool RSI_only_first= false; // Use RSI only for the first entry
bool RSI_invert= false; // Invert the signal
ENUM_TIMEFRAMES BB_Timeframe=PERIOD_M5; // Timeframe
int BB_PERIOD=0; //Period
int BB_SHIFT=0; //Shift
double BB_DEVIATION=2; //Number if standard deviations
bool BB_only_first= false; // Use BB only on first login
bool BB_INVERT=false; //Invert the signal
MqlTick lastme;
uint LongPos[11];
uint ShortPos[11];
double LongVol[11];
double ShortVol[11];
string prefix_graph="griderKat_";
string msg_lines[];
uchar lines_size=0;
double curLot;
double mSpread;
int h[11];
int h2[11];
int h3[11];
int h4[11];
int hIndex=0;
double buf0[];
double buf1[];
double buf2[];
int cur_offset;
int cur_offset_mult;
bool noLong=false;
bool noShort=false;
datetime Old_Time[11];
double LastLong=0;
double LastShort=0;
bool RSI_start[11];
bool BB_start[11];
bool MA_start[11];
uint MA_cur_dir[11];
ulong minVolTicket = 0;
ulong maxVolTicket = 0;
double minVolIs = 0;
double maxVolIs = 0;
double minVolProfit = 0;
double maxVolProfit = 0;
struct translate{
string err1;
string err2;
string err3;
string err4;
string err5;
string err6;
string err7;
string err8;
string err9;
string err64;
string err65;
string err128;
string err129;
string err130;
string err131;
string err132;
string err133;
string err134;
string err135;
string err136;
string err137;
string err138;
string err139;
string err140;
string err141;
string err145;
string err146;
string err147;
string err148;
string err0;
string retcode;
string retcode10004;
string retcode10006;
string retcode10007;
string retcode10010;
string retcode10011;
string retcode10012;
string retcode10013;
string retcode10014;
string retcode10015;
string retcode10016;
string retcode10017;
string retcode10018;
string retcode10019;
string retcode10020;
string retcode10021;
string retcode10022;
string retcode10023;
string retcode10024;
string retcode10025;
string retcode10026;
string retcode10027;
string retcode10028;
string retcode10029;
string retcode10030;
string retcode10031;
string retcode10032;
string retcode10033;
string retcode10034;
string retcode10035;
string retcode10036;
string retcode10038;
string retcode10039;
string retcode10040;
string retcode10041;
string retcode10042;
string retcode10043;
string retcode10044;
};
translate langs;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(!MQLInfoInteger(MQL_TRADE_ALLOWED)){
Comment("The Expert Advisor is not allowed to trade! ("+(string) EA_Magic+")");
return(INIT_SUCCEEDED);
}
if( GlobalVariableCheck(prefix_graph+"_equity") ){
Comment("Equity on begin: "+(string) GlobalVariableGet(prefix_graph+"_equity"));
}
init_lang();
for(int i=0; i<11; i++){
Old_Time[i]=0;
LongPos[i]=0;
ShortPos[i]=0;
LongVol[i]=0;
ShortVol[i]=0;
RSI_start[i]=false;
BB_start[i]=false;
MA_start[i]=false;
MA_cur_dir[i]=0;
}
cur_offset_mult=0;
#ifdef __MQL5__
if( StringLen(symName_1) && useSym_1 ){
string curSym = symName_1;
if (replaceFirstSymbol) {
curSym = _Symbol;
}
if(MA_PERIOD_1>0){
h[0] = iMA(curSym, MA_Timeframe_1, MA_PERIOD_1, 0, MODE_SMA, PRICE_CLOSE);
}else if(RSI_PERIOD_1>0){
h2[0] = iRSI(curSym, RSI_Timeframe_1, RSI_PERIOD_1, PRICE_CLOSE);
}else if(BARS_RSI_Period_1>0){
h3[0] = iRSI(curSym, PERIOD_M5, BARS_RSI_Period_1, PRICE_CLOSE);
}else if(BB_PERIOD_1>0){
h4[0] = iBands(curSym, BB_Timeframe_1, BB_PERIOD_1, BB_SHIFT_1, BB_DEVIATION_1, PRICE_CLOSE);
}
}
if( StringLen(symName_2) && useSym_2 ){
if( MA_PERIOD_2>0){
h[1] = iMA(symName_2, MA_Timeframe_2, MA_PERIOD_2, 0, MODE_SMA, PRICE_CLOSE);
}else if(RSI_PERIOD_2>0){
h2[1] = iRSI(symName_2, RSI_Timeframe_2, RSI_PERIOD_2, PRICE_CLOSE);
}else if(BARS_RSI_Period_2>0){
h3[1] = iRSI(symName_2, PERIOD_M5, BARS_RSI_Period_2, PRICE_CLOSE);
}else if(BB_PERIOD_2>0){
h4[1] = iBands(symName_2, BB_Timeframe_2, BB_PERIOD_2, BB_SHIFT_2, BB_DEVIATION_2, PRICE_CLOSE);
}
}
if( StringLen(symName_3) && useSym_3 ){
if( MA_PERIOD_3>0){
h[2] = iMA(symName_3, MA_Timeframe_3, MA_PERIOD_3, 0, MODE_SMA, PRICE_CLOSE);
}else if(RSI_PERIOD_3>0){
h2[2] = iRSI(symName_3, RSI_Timeframe_3, RSI_PERIOD_3, PRICE_CLOSE);
}else if(BARS_RSI_Period_3>0){
h3[2] = iRSI(symName_3, PERIOD_M5, BARS_RSI_Period_3, PRICE_CLOSE);
}else if(BB_PERIOD_3>0){
h4[2] = iBands(symName_3, BB_Timeframe_3, BB_PERIOD_3, BB_SHIFT_3, BB_DEVIATION_3, PRICE_CLOSE);
}
}
if( StringLen(symName_4) && useSym_4 ){
if( MA_PERIOD_4>0){
h[3] = iMA(symName_4, MA_Timeframe_4, MA_PERIOD_4, 0, MODE_SMA, PRICE_CLOSE);
}else if(RSI_PERIOD_4>0){
h2[3] = iRSI(symName_4, RSI_Timeframe_4, RSI_PERIOD_4, PRICE_CLOSE);
}else if(BARS_RSI_Period_4>0){
h3[3] = iRSI(symName_4, PERIOD_M5, BARS_RSI_Period_4, PRICE_CLOSE);
}else if(BB_PERIOD_4>0){
h4[3] = iBands(symName_4, BB_Timeframe_4, BB_PERIOD_4, BB_SHIFT_4, BB_DEVIATION_4, PRICE_CLOSE);
}
}
if( StringLen(symName_5) && useSym_5 ){
if( MA_PERIOD_5>0){
h[4] = iMA(symName_5, MA_Timeframe_5, MA_PERIOD_5, 0, MODE_SMA, PRICE_CLOSE);
}else if(RSI_PERIOD_5>0){
h2[4] = iRSI(symName_5, RSI_Timeframe_5, RSI_PERIOD_5, PRICE_CLOSE);
}else if(BARS_RSI_Period_5>0){
h3[4] = iRSI(symName_5, PERIOD_M5, BARS_RSI_Period_5, PRICE_CLOSE);
}else if(BB_PERIOD_5>0){
h4[4] = iBands(symName_5, BB_Timeframe_5, BB_PERIOD_5, BB_SHIFT_5, BB_DEVIATION_5, PRICE_CLOSE);
}
}
if( StringLen(symName_6) && useSym_6 ){
if( MA_PERIOD_6>0){
h[5] = iMA(symName_6, MA_Timeframe_6, MA_PERIOD_6, 0, MODE_SMA, PRICE_CLOSE);
}else if(RSI_PERIOD_6>0){
h2[5] = iRSI(symName_6, RSI_Timeframe_6, RSI_PERIOD_6, PRICE_CLOSE);
}else if(BARS_RSI_Period_6>0){
h3[5] = iRSI(symName_6, PERIOD_M5, BARS_RSI_Period_6, PRICE_CLOSE);
}else if(BB_PERIOD_6>0){
h4[5] = iBands(symName_6, BB_Timeframe_6, BB_PERIOD_6, BB_SHIFT_6, BB_DEVIATION_6, PRICE_CLOSE);
}
}
if( StringLen(symName_7) && useSym_7 ){
if( MA_PERIOD_7>0){
h[6] = iMA(symName_7, MA_Timeframe_7, MA_PERIOD_7, 0, MODE_SMA, PRICE_CLOSE);
}else if(RSI_PERIOD_7>0){
h2[6] = iRSI(symName_7, RSI_Timeframe_7, RSI_PERIOD_7, PRICE_CLOSE);
}else if(BARS_RSI_Period_7>0){
h3[6] = iRSI(symName_7, PERIOD_M5, BARS_RSI_Period_7, PRICE_CLOSE);
}else if(BB_PERIOD_7>0){
h4[6] = iBands(symName_7, BB_Timeframe_7, BB_PERIOD_7, BB_SHIFT_7, BB_DEVIATION_7, PRICE_CLOSE);
}
}
if( StringLen(symName_8) && useSym_8 ){
if( MA_PERIOD_8>0){
h[7] = iMA(symName_8, MA_Timeframe_8, MA_PERIOD_8, 0, MODE_SMA, PRICE_CLOSE);
}else if(RSI_PERIOD_8>0){
h2[7] = iRSI(symName_8, RSI_Timeframe_8, RSI_PERIOD_8, PRICE_CLOSE);
}else if(BARS_RSI_Period_8>0){
h3[7] = iRSI(symName_8, PERIOD_M5, BARS_RSI_Period_8, PRICE_CLOSE);
}else if(BB_PERIOD_8>0){
h4[7] = iBands(symName_8, BB_Timeframe_8, BB_PERIOD_8, BB_SHIFT_8, BB_DEVIATION_8, PRICE_CLOSE);
}
}
if( StringLen(symName_9) && useSym_9 ){
if( MA_PERIOD_9>0){
h[8] = iMA(symName_9, MA_Timeframe_9, MA_PERIOD_9, 0, MODE_SMA, PRICE_CLOSE);
}else if(RSI_PERIOD_9>0){
h2[8] = iRSI(symName_9, RSI_Timeframe_9, RSI_PERIOD_9, PRICE_CLOSE);
}else if(BARS_RSI_Period_9>0){
h3[8] = iRSI(symName_9, PERIOD_M5, BARS_RSI_Period_9, PRICE_CLOSE);
}else if(BB_PERIOD_9>0){
h4[8] = iBands(symName_9, BB_Timeframe_9, BB_PERIOD_9, BB_SHIFT_9, BB_DEVIATION_9, PRICE_CLOSE);
}
}
if( StringLen(symName_10) && useSym_10 ){
if( MA_PERIOD_10>0){
h[9] = iMA(symName_10, MA_Timeframe_10, MA_PERIOD_10, 0, MODE_SMA, PRICE_CLOSE);
}else if(RSI_PERIOD_10>0){
h2[9] = iRSI(symName_10, RSI_Timeframe_10, RSI_PERIOD_10, PRICE_CLOSE);
}else if(BARS_RSI_Period_10>0){
h3[9] = iRSI(symName_10, PERIOD_M5, BARS_RSI_Period_10, PRICE_CLOSE);
}else if(BB_PERIOD_10>0){
h4[9] = iBands(symName_10, BB_Timeframe_10, BB_PERIOD_10, BB_SHIFT_10, BB_DEVIATION_10, PRICE_CLOSE);
}
}
if( StringLen(symName_11) && useSym_11 ){
if( MA_PERIOD_11>0){
h[10] = iMA(symName_11, MA_Timeframe_11, MA_PERIOD_11, 0, MODE_SMA, PRICE_CLOSE);
}else if(RSI_PERIOD_11>0){
h2[10] = iRSI(symName_11, RSI_Timeframe_11, RSI_PERIOD_11, PRICE_CLOSE);
}else if(BARS_RSI_Period_11>0){
h3[10] = iRSI(symName_11, PERIOD_M5, BARS_RSI_Period_11, PRICE_CLOSE);
}else if(BB_PERIOD_11>0){
h4[10] = iBands(symName_11, BB_Timeframe_11, BB_PERIOD_11, BB_SHIFT_11, BB_DEVIATION_11, PRICE_CLOSE);
}
}
#endif
if( !EventSetTimer(7) ){
Comment("Timer NOT SET!");
}else{
Comment("");
}
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
ObjectsDeleteAll(0, prefix_graph);
#ifdef __MQL5__
if( StringLen(symName_1) && useSym_1 ){
if( MA_PERIOD_1>0 ){
IndicatorRelease(h[0]);
}
if( RSI_PERIOD_1>0 ){
IndicatorRelease(h2[0]);
}
if( BARS_RSI_Period_1>0 ){
IndicatorRelease(h3[0]);
}
if( BB_PERIOD_1>0 ){
IndicatorRelease(h4[0]);
}
}
if( StringLen(symName_2) && useSym_2 ){
if( MA_PERIOD_2>0 ){
IndicatorRelease(h[1]);
}
if( RSI_PERIOD_2>0 ){
IndicatorRelease(h2[1]);
}
if( BARS_RSI_Period_2>0 ){
IndicatorRelease(h3[1]);
}
if( BB_PERIOD_2>0 ){
IndicatorRelease(h4[1]);
}
}
if( StringLen(symName_3) && useSym_3 ){
if( MA_PERIOD_3>0 ){
IndicatorRelease(h[2]);
}
if( RSI_PERIOD_3>0 ){
IndicatorRelease(h2[2]);
}
if( BARS_RSI_Period_3>0 ){
IndicatorRelease(h3[2]);
}
if( BB_PERIOD_3>0 ){
IndicatorRelease(h4[2]);
}
}
if( StringLen(symName_4) && useSym_4 ){
if( MA_PERIOD_4>0 ){
IndicatorRelease(h[3]);
}
if( RSI_PERIOD_4>0 ){
IndicatorRelease(h2[3]);
}
if( BARS_RSI_Period_4>0 ){
IndicatorRelease(h3[3]);
}
if( BB_PERIOD_4>0 ){
IndicatorRelease(h4[3]);
}
}
if( StringLen(symName_5) && useSym_5 ){
if( MA_PERIOD_5>0 ){
IndicatorRelease(h[4]);
}
if( RSI_PERIOD_5>0 ){
IndicatorRelease(h2[4]);
}
if( BARS_RSI_Period_5>0 ){
IndicatorRelease(h3[4]);
}
if( BB_PERIOD_5>0 ){
IndicatorRelease(h4[4]);
}
}
if( StringLen(symName_6) && useSym_6 ){
if( MA_PERIOD_6>0 ){
IndicatorRelease(h[5]);
}
if( RSI_PERIOD_6>0 ){
IndicatorRelease(h2[5]);
}
if( BARS_RSI_Period_6>0 ){
IndicatorRelease(h3[5]);
}
if( BB_PERIOD_6>0 ){
IndicatorRelease(h4[5]);
}
}
if( StringLen(symName_7) && useSym_7 ){
if( MA_PERIOD_7>0 ){
IndicatorRelease(h[6]);
}
if( RSI_PERIOD_7>0 ){
IndicatorRelease(h2[6]);
}
if( BARS_RSI_Period_7>0 ){
IndicatorRelease(h3[6]);
}
if( BB_PERIOD_7>0 ){
IndicatorRelease(h4[6]);
}
}
if( StringLen(symName_8) && useSym_8 ){
if( MA_PERIOD_8>0 ){
IndicatorRelease(h[7]);
}
if( RSI_PERIOD_8>0 ){
IndicatorRelease(h2[7]);
}
if( BARS_RSI_Period_8>0 ){
IndicatorRelease(h3[7]);
}
if( BB_PERIOD_8>0 ){
IndicatorRelease(h4[7]);
}
}
if( StringLen(symName_9) && useSym_9 ){
if( MA_PERIOD_9>0 ){
IndicatorRelease(h[8]);
}
if( RSI_PERIOD_9>0 ){
IndicatorRelease(h2[8]);
}
if( BARS_RSI_Period_9>0 ){
IndicatorRelease(h3[8]);
}
if( BB_PERIOD_9>0 ){
IndicatorRelease(h4[8]);
}
}
if( StringLen(symName_10) && useSym_10 ){
if( MA_PERIOD_10>0 ){
IndicatorRelease(h[9]);
}
if( RSI_PERIOD_10>0 ){
IndicatorRelease(h2[9]);
}
if( BARS_RSI_Period_10>0 ){
IndicatorRelease(h3[9]);
}
if( BB_PERIOD_10>0 ){
IndicatorRelease(h4[9]);
}
}
if( StringLen(symName_11) && useSym_11 ){
if( MA_PERIOD_11>0 ){
IndicatorRelease(h[10]);
}
if( RSI_PERIOD_11>0 ){
IndicatorRelease(h2[10]);
}
if( BARS_RSI_Period_11>0 ){
IndicatorRelease(h3[10]);
}
if( BB_PERIOD_11>0 ){
IndicatorRelease(h4[10]);
}
}
#endif
EventKillTimer();
}
void startTimer(string sym, int hI, double Lt, int gStep){
hIndex=hI;
curLot=Lt;
cur_offset=gStep;
mSpread=minSpread;
if(SymbolInfoInteger(sym, SYMBOL_DIGITS)==5 || SymbolInfoInteger(sym, SYMBOL_DIGITS)==3){
cur_offset*=10;
if( mSpread>0 ){
mSpread*=10;
}
}
getmeinfo_btn(sym, EA_Magic);
if( checkTakeProfit(sym)){
closeAllPos(sym);
}
if( !pdxIsNewBar(sym, hI) ){
return;
}
SymbolInfoTick(sym, lastme);
if( lastme.bid==0 ){
return;
}
startCheckPositions(EA_Magic, sym, Lt);
}
void OnTimer()
{
if( equityLess>0 && AccountInfoDouble(ACCOUNT_BALANCE)-AccountInfoDouble(ACCOUNT_EQUITY)>= equityLess ){
closeAllPos();
}
if (closeAtTotal > 0 && AccountInfoDouble(ACCOUNT_EQUITY) - AccountInfoDouble(ACCOUNT_BALANCE) > closeAtTotal ) {
closeAllPos();
}
if( useSym_1 && StringLen(symName_1) ){
typeDir=typeDir_1;
takeProfit=takeProfit_1;
takeProfit1step=takeProfit1step_1;
takeProfit2step=takeProfit2step_1;
takeProfit4step=takeProfit4step_1;
gridStepCountClose=gridStepCountClose_1;
BARS_enabled=BARS_enabled_1;
BARS_Timeframe=BARS_Timeframe_1;
BARS_RSI_Period=BARS_RSI_Period_1;
SERIES_count=SERIES_count_1;
SERIES_type=SERIES_type_1;
SERIES_Timeframe=SERIES_Timeframe_1;
MA_Timeframe=MA_Timeframe_1;
MA_PERIOD=MA_PERIOD_1;
MA_TYPE=MA_TYPE_1;
MA_invert=MA_invert_1;
MA_across_price=MA_across_price_1;
MA_across_always=MA_across_always_1;
RSI_Timeframe=RSI_Timeframe_1;
RSI_PERIOD=RSI_PERIOD_1;
RSI_enter_return= RSI_enter_return_1;
RSI_only_first= RSI_only_first_1;
RSI_invert= RSI_invert_1;
BB_Timeframe=BB_Timeframe_1;
BB_PERIOD=BB_PERIOD_1;
BB_SHIFT=BB_SHIFT_1;
BB_DEVIATION=BB_DEVIATION_1;
BB_only_first= BB_only_first_1;
BB_INVERT=BB_INVERT_1;
string curSym = symName_1;
if (replaceFirstSymbol) {
curSym = _Symbol;
}
startTimer(curSym, 0, Lot_1, gridStep_1);
}
if( useSym_2 && StringLen(symName_2) ){
typeDir=typeDir_2;
takeProfit=takeProfit_2;
takeProfit1step=takeProfit1step_2;
takeProfit2step=takeProfit2step_2;
takeProfit4step=takeProfit4step_2;
gridStepCountClose=gridStepCountClose_2;
BARS_enabled=BARS_enabled_2;
BARS_Timeframe=BARS_Timeframe_2;
BARS_RSI_Period=BARS_RSI_Period_2;
SERIES_count=SERIES_count_2;
SERIES_type=SERIES_type_2;
SERIES_Timeframe=SERIES_Timeframe_2;
MA_Timeframe=MA_Timeframe_2;
MA_PERIOD=MA_PERIOD_2;
MA_TYPE=MA_TYPE_2;
MA_invert=MA_invert_2;
MA_across_price=MA_across_price_2;
MA_across_always=MA_across_always_2;
RSI_Timeframe=RSI_Timeframe_2;
RSI_PERIOD=RSI_PERIOD_2;
RSI_enter_return= RSI_enter_return_2;
RSI_only_first= RSI_only_first_2;
RSI_invert= RSI_invert_2;
BB_Timeframe=BB_Timeframe_2;
BB_PERIOD=BB_PERIOD_2;
BB_SHIFT=BB_SHIFT_2;
BB_DEVIATION=BB_DEVIATION_2;
BB_only_first= BB_only_first_2;
BB_INVERT=BB_INVERT_2;
startTimer(symName_2, 1, Lot_2, gridStep_2);
}
if( useSym_3 && StringLen(symName_3) ){
typeDir=typeDir_3;
takeProfit=takeProfit_3;
takeProfit1step=takeProfit1step_3;
takeProfit2step=takeProfit2step_3;
takeProfit4step=takeProfit4step_3;
gridStepCountClose=gridStepCountClose_3;
BARS_enabled=BARS_enabled_3;
BARS_Timeframe=BARS_Timeframe_3;
BARS_RSI_Period=BARS_RSI_Period_3;
SERIES_count=SERIES_count_3;
SERIES_type=SERIES_type_3;
SERIES_Timeframe=SERIES_Timeframe_3;
MA_Timeframe=MA_Timeframe_3;
MA_PERIOD=MA_PERIOD_3;
MA_TYPE=MA_TYPE_3;
MA_invert=MA_invert_3;
MA_across_price=MA_across_price_3;
MA_across_always=MA_across_always_3;
RSI_Timeframe=RSI_Timeframe_3;
RSI_PERIOD=RSI_PERIOD_3;
RSI_enter_return= RSI_enter_return_3;
RSI_only_first= RSI_only_first_3;
RSI_invert= RSI_invert_3;
BB_Timeframe=BB_Timeframe_3;
BB_PERIOD=BB_PERIOD_3;
BB_SHIFT=BB_SHIFT_3;
BB_DEVIATION=BB_DEVIATION_3;
BB_only_first= BB_only_first_3;
BB_INVERT=BB_INVERT_3;
startTimer(symName_3, 2, Lot_3, gridStep_3);
}
if( useSym_4 && StringLen(symName_4) ){
typeDir=typeDir_4;
takeProfit=takeProfit_4;
takeProfit1step=takeProfit1step_4;
takeProfit2step=takeProfit2step_4;
takeProfit4step=takeProfit4step_4;
gridStepCountClose=gridStepCountClose_4;
BARS_enabled=BARS_enabled_4;
BARS_Timeframe=BARS_Timeframe_4;
BARS_RSI_Period=BARS_RSI_Period_4;
SERIES_count=SERIES_count_4;
SERIES_type=SERIES_type_4;
SERIES_Timeframe=SERIES_Timeframe_4;
MA_Timeframe=MA_Timeframe_4;
MA_PERIOD=MA_PERIOD_4;
MA_TYPE=MA_TYPE_4;
MA_invert=MA_invert_4;
MA_across_price=MA_across_price_4;
MA_across_always=MA_across_always_4;
RSI_Timeframe=RSI_Timeframe_4;
RSI_PERIOD=RSI_PERIOD_4;
RSI_enter_return= RSI_enter_return_4;
RSI_only_first= RSI_only_first_4;
RSI_invert= RSI_invert_4;
BB_Timeframe=BB_Timeframe_4;
BB_PERIOD=BB_PERIOD_4;
BB_SHIFT=BB_SHIFT_4;
BB_DEVIATION=BB_DEVIATION_4;
BB_only_first= BB_only_first_4;
BB_INVERT=BB_INVERT_4;
startTimer(symName_4, 3, Lot_4, gridStep_4);
}
if( useSym_5 && StringLen(symName_5) ){
typeDir=typeDir_5;
takeProfit=takeProfit_5;
takeProfit1step=takeProfit1step_5;
takeProfit2step=takeProfit2step_5;
takeProfit4step=takeProfit4step_5;
gridStepCountClose=gridStepCountClose_5;
BARS_enabled=BARS_enabled_5;
BARS_Timeframe=BARS_Timeframe_5;
BARS_RSI_Period=BARS_RSI_Period_5;
SERIES_count=SERIES_count_5;
SERIES_type=SERIES_type_5;
SERIES_Timeframe=SERIES_Timeframe_5;
MA_Timeframe=MA_Timeframe_5;
MA_PERIOD=MA_PERIOD_5;
MA_TYPE=MA_TYPE_5;
MA_invert=MA_invert_5;
MA_across_price=MA_across_price_5;
MA_across_always=MA_across_always_5;
RSI_Timeframe=RSI_Timeframe_5;
RSI_PERIOD=RSI_PERIOD_5;
RSI_enter_return= RSI_enter_return_5;
RSI_only_first= RSI_only_first_5;
RSI_invert= RSI_invert_5;
BB_Timeframe=BB_Timeframe_5;
BB_PERIOD=BB_PERIOD_5;
BB_SHIFT=BB_SHIFT_5;
BB_DEVIATION=BB_DEVIATION_5;
BB_only_first= BB_only_first_5;
BB_INVERT=BB_INVERT_5;
startTimer(symName_5, 4, Lot_5, gridStep_5);
}
if( useSym_6 && StringLen(symName_6) ){
typeDir=typeDir_6;
takeProfit=takeProfit_6;
takeProfit1step=takeProfit1step_6;
takeProfit2step=takeProfit2step_6;
takeProfit4step=takeProfit4step_6;
gridStepCountClose=gridStepCountClose_6;
BARS_enabled=BARS_enabled_6;
BARS_Timeframe=BARS_Timeframe_6;
BARS_RSI_Period=BARS_RSI_Period_6;
SERIES_count=SERIES_count_6;
SERIES_type=SERIES_type_6;
SERIES_Timeframe=SERIES_Timeframe_6;
MA_Timeframe=MA_Timeframe_6;
MA_PERIOD=MA_PERIOD_6;
MA_TYPE=MA_TYPE_6;
MA_invert=MA_invert_6;
MA_across_price=MA_across_price_6;
MA_across_always=MA_across_always_6;
RSI_Timeframe=RSI_Timeframe_6;
RSI_PERIOD=RSI_PERIOD_6;
RSI_enter_return= RSI_enter_return_6;
RSI_only_first= RSI_only_first_6;
RSI_invert= RSI_invert_6;
BB_Timeframe=BB_Timeframe_6;
BB_PERIOD=BB_PERIOD_6;
BB_SHIFT=BB_SHIFT_6;
BB_DEVIATION=BB_DEVIATION_6;
BB_only_first= BB_only_first_6;
BB_INVERT=BB_INVERT_6;
startTimer(symName_6, 5, Lot_6, gridStep_6);
}
if( useSym_7 && StringLen(symName_7) ){
typeDir=typeDir_7;
takeProfit=takeProfit_7;
takeProfit1step=takeProfit1step_7;
takeProfit2step=takeProfit2step_7;
takeProfit4step=takeProfit4step_7;
gridStepCountClose=gridStepCountClose_7;
BARS_enabled=BARS_enabled_7;
BARS_Timeframe=BARS_Timeframe_7;
BARS_RSI_Period=BARS_RSI_Period_7;
SERIES_count=SERIES_count_7;
SERIES_type=SERIES_type_7;
SERIES_Timeframe=SERIES_Timeframe_7;
MA_Timeframe=MA_Timeframe_7;
MA_PERIOD=MA_PERIOD_7;
MA_TYPE=MA_TYPE_7;
MA_invert=MA_invert_7;
MA_across_price=MA_across_price_7;
MA_across_always=MA_across_always_7;
RSI_Timeframe=RSI_Timeframe_7;
RSI_PERIOD=RSI_PERIOD_7;
RSI_enter_return= RSI_enter_return_7;
RSI_only_first= RSI_only_first_7;
RSI_invert= RSI_invert_7;
BB_Timeframe=BB_Timeframe_7;
BB_PERIOD=BB_PERIOD_7;
BB_SHIFT=BB_SHIFT_7;
BB_DEVIATION=BB_DEVIATION_7;
BB_only_first= BB_only_first_7;
BB_INVERT=BB_INVERT_7;
startTimer(symName_7, 6, Lot_7, gridStep_7);
}
if( useSym_8 && StringLen(symName_8) ){
typeDir=typeDir_8;
takeProfit=takeProfit_8;
takeProfit1step=takeProfit1step_8;
takeProfit2step=takeProfit2step_8;
takeProfit4step=takeProfit4step_8;
gridStepCountClose=gridStepCountClose_8;
BARS_enabled=BARS_enabled_8;
BARS_Timeframe=BARS_Timeframe_8;
BARS_RSI_Period=BARS_RSI_Period_8;
SERIES_count=SERIES_count_8;
SERIES_type=SERIES_type_8;
SERIES_Timeframe=SERIES_Timeframe_8;
MA_Timeframe=MA_Timeframe_8;
MA_PERIOD=MA_PERIOD_8;
MA_TYPE=MA_TYPE_8;
MA_invert=MA_invert_8;
MA_across_price=MA_across_price_8;
MA_across_always=MA_across_always_8;
RSI_Timeframe=RSI_Timeframe_8;
RSI_PERIOD=RSI_PERIOD_8;
RSI_enter_return= RSI_enter_return_8;
RSI_only_first= RSI_only_first_8;
RSI_invert= RSI_invert_8;
BB_Timeframe=BB_Timeframe_8;
BB_PERIOD=BB_PERIOD_8;
BB_SHIFT=BB_SHIFT_8;
BB_DEVIATION=BB_DEVIATION_8;
BB_only_first= BB_only_first_8;
BB_INVERT=BB_INVERT_8;
startTimer(symName_8, 7, Lot_8, gridStep_8);
}
if( useSym_9 && StringLen(symName_9) ){
typeDir=typeDir_9;
takeProfit=takeProfit_9;
takeProfit1step=takeProfit1step_9;
takeProfit2step=takeProfit2step_9;
takeProfit4step=takeProfit4step_9;
gridStepCountClose=gridStepCountClose_9;
BARS_enabled=BARS_enabled_9;
BARS_Timeframe=BARS_Timeframe_9;
BARS_RSI_Period=BARS_RSI_Period_9;
SERIES_count=SERIES_count_9;
SERIES_type=SERIES_type_9;
SERIES_Timeframe=SERIES_Timeframe_9;
MA_Timeframe=MA_Timeframe_9;
MA_PERIOD=MA_PERIOD_9;
MA_TYPE=MA_TYPE_9;
MA_invert=MA_invert_9;
MA_across_price=MA_across_price_9;
MA_across_always=MA_across_always_9;
RSI_Timeframe=RSI_Timeframe_9;
RSI_PERIOD=RSI_PERIOD_9;
RSI_enter_return= RSI_enter_return_9;
RSI_only_first= RSI_only_first_9;
RSI_invert= RSI_invert_9;
BB_Timeframe=BB_Timeframe_9;
BB_PERIOD=BB_PERIOD_9;
BB_SHIFT=BB_SHIFT_9;
BB_DEVIATION=BB_DEVIATION_9;
BB_only_first= BB_only_first_9;
BB_INVERT=BB_INVERT_9;
startTimer(symName_9, 8, Lot_9, gridStep_9);
}
if( useSym_10 && StringLen(symName_10) ){
typeDir=typeDir_10;
takeProfit=takeProfit_10;
takeProfit1step=takeProfit1step_10;
takeProfit2step=takeProfit2step_10;
takeProfit4step=takeProfit4step_10;
gridStepCountClose=gridStepCountClose_10;
BARS_enabled=BARS_enabled_10;
BARS_Timeframe=BARS_Timeframe_10;
BARS_RSI_Period=BARS_RSI_Period_10;
SERIES_count=SERIES_count_10;
SERIES_type=SERIES_type_10;
SERIES_Timeframe=SERIES_Timeframe_10;
MA_Timeframe=MA_Timeframe_10;
MA_PERIOD=MA_PERIOD_10;
MA_TYPE=MA_TYPE_10;
MA_invert=MA_invert_10;
MA_across_price=MA_across_price_10;
MA_across_always=MA_across_always_10;
RSI_Timeframe=RSI_Timeframe_10;
RSI_PERIOD=RSI_PERIOD_10;
RSI_enter_return= RSI_enter_return_10;
RSI_only_first= RSI_only_first_10;
RSI_invert= RSI_invert_10;
BB_Timeframe=BB_Timeframe_10;
BB_PERIOD=BB_PERIOD_10;
BB_SHIFT=BB_SHIFT_10;
BB_DEVIATION=BB_DEVIATION_10;
BB_only_first= BB_only_first_10;
BB_INVERT=BB_INVERT_10;
startTimer(symName_10, 9, Lot_10, gridStep_10);
}
if( useSym_11 && StringLen(symName_11) ){
typeDir=typeDir_11;
takeProfit=takeProfit_11;
takeProfit1step=takeProfit1step_11;
takeProfit2step=takeProfit2step_11;
takeProfit4step=takeProfit4step_11;
gridStepCountClose=gridStepCountClose_11;
BARS_enabled=BARS_enabled_11;
BARS_Timeframe=BARS_Timeframe_11;
BARS_RSI_Period=BARS_RSI_Period_11;
SERIES_count=SERIES_count_11;
SERIES_type=SERIES_type_11;
SERIES_Timeframe=SERIES_Timeframe_11;
MA_Timeframe=MA_Timeframe_11;
MA_PERIOD=MA_PERIOD_11;
MA_TYPE=MA_TYPE_11;
MA_invert=MA_invert_11;
MA_across_price=MA_across_price_11;
MA_across_always=MA_across_always_11;
RSI_Timeframe=RSI_Timeframe_11;
RSI_PERIOD=RSI_PERIOD_11;
RSI_enter_return= RSI_enter_return_11;
RSI_only_first= RSI_only_first_11;
RSI_invert= RSI_invert_11;
BB_Timeframe=BB_Timeframe_11;
BB_PERIOD=BB_PERIOD_11;
BB_SHIFT=BB_SHIFT_11;
BB_DEVIATION=BB_DEVIATION_11;
BB_only_first= BB_only_first_11;
BB_INVERT=BB_INVERT_11;
startTimer(symName_11, 10, Lot_11, gridStep_11);
}
}
void startCheckPositions(int magic, string symbol, double Lt){
if( (LongPos[hIndex]==0 && ShortPos[hIndex] == 0) || (RSI_PERIOD>0 && ( !RSI_only_first || (LongPos[hIndex]==0 && ShortPos[hIndex] == 0) ) ) || ( BB_PERIOD>0 && ( !BB_only_first || (LongPos[hIndex]==0 && ShortPos[hIndex] == 0) ) ) || (MA_PERIOD>0 && MA_across_always) ){
if( mSpread>0 && MathAbs(lastme.bid-lastme.ask) > mSpread*SymbolInfoDouble(symbol, SYMBOL_POINT) ){
return;
}
checkDirection(symbol);
}
if( LongPos[hIndex] + ShortPos[hIndex] == 0 ){
if(!noLong){
if(!pdxSendOrder(MY_BUY, lastme.bid, 0, 0, curLot, 0, "", symbol, magic)){
}
}else if(!noShort){
if(!pdxSendOrder(MY_SELL, lastme.ask, 0, 0, curLot, 0, "", symbol, magic)){
}
}
}else{
if(LongPos[hIndex]>0 ){
switch(typeLot){
case MY_ARIFMET:
curLot=maxVolIs+Lt;
break;
case MY_GEOMET:
if(LongPos[hIndex]>1) curLot=Lt*(MathPow(2, LongPos[hIndex]-1));
break;
}
if( ( RSI_PERIOD>0 && !RSI_only_first ) || ( BB_PERIOD>0 && !BB_only_first ) || (MA_PERIOD>0 && MA_across_always) ){
if( !noLong ){
if( gridStepCountClose>0 && gridStepCountClose<=LongPos[hIndex] ){
closeAllPos(symbol, MY_ALLPOS, magic);
return;
}
if(!pdxSendOrder(MY_BUY, lastme.bid, 0, 0, curLot, 0, "", symbol, magic)){
}
}
}else if(LastLong-lastme.ask >= (cur_offset+cur_offset_mult*(LongPos[hIndex]-1))*SymbolInfoDouble(symbol, SYMBOL_POINT) ){
if( gridStepCountClose>0 && gridStepCountClose<=LongPos[hIndex] ){
closeAllPos(symbol, MY_ALLPOS, magic);
return;
}
if(!pdxSendOrder(MY_BUY, lastme.bid, 0, 0, curLot, 0, "", symbol, magic)){
}
}
}
if(ShortPos[hIndex]>0 ){
switch(typeLot){
case MY_ARIFMET:
curLot=maxVolIs+Lt;
break;
case MY_GEOMET:
if(ShortPos[hIndex]>1) curLot=Lt*(MathPow(2, ShortPos[hIndex]-1));
break;
}
if( ( RSI_PERIOD>0 && !RSI_only_first ) || ( BB_PERIOD>0 && !BB_only_first ) || (MA_PERIOD>0 && MA_across_always) ){
if( !noShort ){
if( gridStepCountClose>0 && gridStepCountClose<=ShortPos[hIndex] ){
closeAllPos(symbol, MY_ALLPOS, magic);
return;
}
if(!pdxSendOrder(MY_SELL, lastme.ask, 0, 0, curLot, 0, "", symbol, magic)){
}
}
}else if(lastme.bid-LastShort >= (cur_offset+cur_offset_mult*(ShortPos[hIndex]-1))*SymbolInfoDouble(symbol, SYMBOL_POINT) ){
if( gridStepCountClose>0 && gridStepCountClose<=ShortPos[hIndex] ){
closeAllPos(symbol, MY_ALLPOS, magic);
return;
}
if(!pdxSendOrder(MY_SELL, lastme.ask, 0, 0, curLot, 0, "", symbol, magic)){
}
}
}
}
}
void checkDirection(string symbol){
noLong=false;
noShort=false;
if(MA_PERIOD>0){
#ifdef __MQL5__
switch(MA_TYPE){
case MA_FIRST:
CopyBuffer(h[hIndex], 0, 0, 1, buf0);
if( buf0[0]>lastme.bid ){
if( MA_cur_dir[hIndex]==0 ){
MA_cur_dir[hIndex]=1;
}else if( MA_cur_dir[hIndex]==2 ){
MA_cur_dir[hIndex]=1;
MA_start[hIndex]=true;
}
noLong=true;
if( MA_across_price ){
if( MA_start[hIndex] ){
MqlRates rates[];
ArraySetAsSeries(rates, true);
if( CopyRates( symbol, PERIOD_H1, 1, 1, rates)==1 ){
if( buf0[0] >= rates[0].open ){
noShort=true;
}else{
MA_start[hIndex]=false;
}
}
}else{
noShort=true;
}
}
}else if( buf0[0]<lastme.bid ){
if( MA_cur_dir[hIndex]==0 ){
MA_cur_dir[hIndex]=2;
}else if( MA_cur_dir[hIndex]==1 ){
MA_cur_dir[hIndex]=2;
MA_start[hIndex]=true;
}
noShort=true;
if( MA_across_price ){
if( MA_start[hIndex] ){
MqlRates rates[];
ArraySetAsSeries(rates, true);
if( CopyRates( symbol, PERIOD_H1, 1, 1, rates)==1 ){
if( buf0[0] <= rates[0].open ){
noLong=true;
}else{
MA_start[hIndex]=false;
}
}
}else{
noLong=true;
}
}
}
break;
case MA_SECOND:
CopyBuffer(h[hIndex], 0, 0, 7, buf0);
if( buf0[0]>buf0[6] ){
if( MA_cur_dir[hIndex]==0 ){
MA_cur_dir[hIndex]=1;
}else if( MA_cur_dir[hIndex]==2 ){
MA_cur_dir[hIndex]=1;
MA_start[hIndex]=true;
}
noShort=true;
}else if( buf0[0]<buf0[6] ){
if( MA_cur_dir[hIndex]==0 ){
MA_cur_dir[hIndex]=2;
}else if( MA_cur_dir[hIndex]==1 ){
MA_cur_dir[hIndex]=2;
MA_start[hIndex]=true;
}
noLong=true;
}
break;
}
#else
switch(MA_TYPE){
case MA_FIRST:
if( iMA(symbol, MA_Timeframe, MA_PERIOD, 0, MODE_SMA, PRICE_CLOSE, 0)>lastme.bid ){
if( MA_invert ){
noShort=true;
}else{
noLong=true;
}
}else if( iMA(symbol, MA_Timeframe, MA_PERIOD, 0, MODE_SMA, PRICE_CLOSE, 0)<lastme.bid ){
if( MA_invert ){
noLong=true;
}else{
noShort=true;
}
}
break;
case MA_SECOND:
if( iMA(symbol, MA_Timeframe, MA_PERIOD, 0, MODE_SMA, PRICE_CLOSE, 0)>iMA(symbol, MA_Timeframe, MA_PERIOD, 0, MODE_SMA, PRICE_CLOSE, 6) ){
if( MA_invert ){
noLong=true;
}else{
noShort=true;
}
}else if( iMA(symbol, MA_Timeframe, MA_PERIOD, 0, MODE_SMA, PRICE_CLOSE, 0)<iMA(symbol, MA_Timeframe, MA_PERIOD, 0, MODE_SMA, PRICE_CLOSE, 6) ){
if( MA_invert ){
noShort=true;
}else{
noLong=true;
}
}
break;
}
#endif
}
if(RSI_PERIOD>0){
double res1=0;
double res2=0;
#ifdef __MQL5__
CopyBuffer(h2[hIndex], 0, 0, 2, buf0);
res1=buf0[0];
res2=buf0[1];
#else
res1=iRSI(symbol, RSI_Timeframe, RSI_PERIOD, PRICE_CLOSE, 0);
res2=iRSI(symbol, RSI_Timeframe, RSI_PERIOD, PRICE_CLOSE, 1);
#endif
if( RSI_start[hIndex] ){
if( !RSI_enter_return && res1>70 ){
if( RSI_invert ){
noShort=true;
}else{
noLong=true;
}
RSI_start[hIndex]=false;
}else if( RSI_enter_return && res2>70 && res1<70 ){
if( RSI_invert ){
noShort=true;
}else{
noLong=true;
}
RSI_start[hIndex]=false;
}else if( !RSI_enter_return && res1<30 ){
if( RSI_invert ){
noLong=true;
}else{
noShort=true;
}
RSI_start[hIndex]=false;
}else if( RSI_enter_return && res2<30 && res1>30 ){
if( RSI_invert ){
noLong=true;
}else{
noShort=true;
}
RSI_start[hIndex]=false;
}else{
noLong=true;
noShort=true;
}
}else{
noLong=true;
noShort=true;
if( (res1<50 && res2>50) || (res2<50 && res1>50) ){
RSI_start[hIndex]=true;
}
}
}
if(BB_PERIOD>0){
double res0=0;
double res1=0;
double res2=0;
#ifdef __MQL5__
CopyBuffer(h4[hIndex], 0, 0, 1, buf0);
CopyBuffer(h4[hIndex], 1, 0, 1, buf1);
CopyBuffer(h4[hIndex], 2, 0, 1, buf2);
res0=buf0[0];
res1=buf1[0];
res2=buf2[0];
#else
res0=iBands(symbol, BB_Timeframe, BB_PERIOD, BB_DEVIATION, BB_SHIFT, PRICE_CLOSE, 0, 0);
res1=iBands(symbol, BB_Timeframe, BB_PERIOD, BB_DEVIATION, BB_SHIFT, PRICE_CLOSE, 1, 0);
res2=iBands(symbol, BB_Timeframe, BB_PERIOD, BB_DEVIATION, BB_SHIFT, PRICE_CLOSE, 2, 0);
#endif
if( BB_start[hIndex] ){
if( res1<=lastme.bid ){
if( BB_INVERT ){
noShort=true;
}else{
noLong=true;
}
BB_start[hIndex]=false;
}else if( res2>=lastme.bid ){
if( BB_INVERT ){
noLong=true;
}else{
noShort=true;
}
BB_start[hIndex]=false;
}else{
noLong=true;
noShort=true;
}
}else{
noLong=true;
noShort=true;
MqlRates rates[];
ArraySetAsSeries(rates, true);
// @0=LH5 1K;> CopyRates( symbol, PERIOD_H1, 1, 1, rates)==1 !!!
if( CopyRates( symbol, PERIOD_H1, 0, 1, rates)==1 ){
if( (res0<rates[0].open && res0>rates[0].close) || (res0>rates[0].open && res0<rates[0].close) ){
BB_start[hIndex]=true;
}
}
}
}
if( SERIES_count>0 ){
MqlRates rates[];
ArraySetAsSeries(rates, true);
if( CopyRates( symbol, SERIES_Timeframe, 1, SERIES_count, rates)==SERIES_count ){
bool isOkLong=true;
bool isOkShort=true;
for( int i=0; i<SERIES_count; i++ ){
if( rates[i].close>rates[i].open ){
switch(SERIES_type){
case MY_SERIES_MINUS:
isOkLong=false;
break;
default:
isOkShort=false;
}
}else if( rates[i].close<rates[i].open ){
switch(SERIES_type){
case MY_SERIES_MINUS:
isOkShort=false;
break;
default:
isOkLong=false;
}
}
if( !isOkShort && !isOkLong ){
break;
}
}
if(!isOkShort){
noShort=true;
}
if(!isOkLong){
noLong=true;
}
}else{
noShort=true;
noLong=true;
}
}
bool BARS_noLong=false;
bool BARS_noShort=false;
if(BARS_enabled ){
MqlRates rates[];
ArraySetAsSeries(rates, true);
if( CopyRates( symbol, BARS_Timeframe, 0, 2, rates)==2 ){
if( rates[1].close > rates[1].open ){
BARS_noShort=true;
}else if( rates[1].close < rates[1].open ){
BARS_noLong=true;
}else{
BARS_noShort=true;
BARS_noLong=true;
}
}
if( BARS_noLong ){
noLong=true;
if( BARS_RSI_Period>0 ){
double res1=0;
#ifdef __MQL5__
CopyBuffer(h3[hIndex], 0, 0, 1, buf0);
res1=buf0[0];
#else
res1=iRSI(symbol, PERIOD_M5, BARS_RSI_Period, PRICE_CLOSE, 0);
#endif
if( res1<=70 ){
noShort=true;
}
}
}
if( BARS_noShort ){
noShort=true;
if( BARS_RSI_Period>0 ){
double res1=0;
#ifdef __MQL5__
CopyBuffer(h3[hIndex], 0, 0, 1, buf0);
res1=buf0[0];
#else
res1=iRSI(symbol, PERIOD_M5, BARS_RSI_Period, PRICE_CLOSE, 0);
#endif
if( res1>=30 ){
noLong=true;
}
}
}
}
if( typeDir == MA_DIR_LONG ){
noShort=true;
}else if( typeDir == MA_DIR_SHORT ){
noLong=true;
}
}
bool pdxIsNewBar(string symbol, int hI){
datetime New_Time[1];
if(CopyTime(symbol,_Period,0,1,New_Time)>0){
if(Old_Time[hI]!=New_Time[0]){
Old_Time[hI]=New_Time[0];
return true;
}
}
return false;
}
bool checkTakeProfit(string symbol, TypeOfPos type = MY_ALLPOS, int magic = 0){
if( takeProfit<=0 ) return false;
double curProfit=0;
double profit=0;
if( magic==0 ){
magic=EA_Magic;
}
#ifdef __MQL5__
int cntMyPos=PositionsTotal();
for(int ti=cntMyPos-1; ti>=0; ti--){
if(PositionGetSymbol(ti)!=symbol) continue;
if(magic>0 && PositionGetInteger(POSITION_MAGIC)!=magic) continue;
if(type==MY_BUY && PositionGetInteger(POSITION_TYPE)!=POSITION_TYPE_BUY ) continue;
if(type==MY_SELL && PositionGetInteger(POSITION_TYPE)!=POSITION_TYPE_SELL ) continue;
profit+=PositionGetDouble(POSITION_PROFIT);
profit+=PositionGetDouble(POSITION_SWAP);
}
#else
int cntMyPos=OrdersTotal();
if(cntMyPos>0){
for(int ti=cntMyPos-1; ti>=0; ti--){
if(OrderSelect(ti,SELECT_BY_POS,MODE_TRADES)==false) continue;
if( OrderType()==OP_BUY || OrderType()==OP_SELL ){}else{ continue; }
if(OrderSymbol()!=symbol) continue;
if(magic>0 && OrderMagicNumber()!=magic) continue;
if(type==MY_BUY && OrderType()!=OP_BUY ) continue;
if(type==MY_SELL && OrderType()!=OP_SELL ) continue;
profit+=OrderCommission();
profit+=OrderProfit();
profit+=OrderSwap();
}
}
#endif
if( takeProfit1step>0 && (LongPos[hIndex]+ShortPos[hIndex])==1 ){
if(profit>takeProfit1step){
return true;
}
}else if( takeProfit2step>0 && (LongPos[hIndex]+ShortPos[hIndex])==2 ){
if(profit>takeProfit2step){
return true;
}
}else if( takeProfit4step>0 && (LongPos[hIndex]+ShortPos[hIndex])==4 ){
if(profit>takeProfit4step){
return true;
}
}else{
if(profit>takeProfit){
return true;
}
}
return false;
}
void closeAllPos(string symbol="", TypeOfPos type = MY_ALLPOS, int magic = 0){
if( magic==0 ){
magic=EA_Magic;
}
#ifdef __MQL5__
int cntMyPos=PositionsTotal();
for(int ti=cntMyPos-1; ti>=0; ti--){
if( StringLen(symbol) && PositionGetSymbol(ti)!=symbol) continue;
if(magic>0 && PositionGetInteger(POSITION_MAGIC)!=magic) continue;
if(type==MY_BUY && PositionGetInteger(POSITION_TYPE)!=POSITION_TYPE_BUY ) continue;
if(type==MY_SELL && PositionGetInteger(POSITION_TYPE)!=POSITION_TYPE_SELL ) continue;
Trade.PositionClose(PositionGetInteger(POSITION_TICKET));
}
int cntMyPosO=OrdersTotal();
for(int ti=cntMyPosO-1; ti>=0; ti--){
ulong orderTicket=OrderGetTicket(ti);
if(StringLen(symbol) && OrderGetString(ORDER_SYMBOL)!=symbol) continue;
if(magic>0 && OrderGetInteger(ORDER_MAGIC)!=magic) continue;
if(type==MY_BUY && OrderGetInteger(ORDER_TYPE)!=ORDER_TYPE_BUY_STOP ) continue;
if(type==MY_SELL && OrderGetInteger(ORDER_TYPE)!=ORDER_TYPE_SELL_STOP ) continue;
Trade.OrderDelete(orderTicket);
}
#else
int cntMyPos=OrdersTotal();
if(cntMyPos>0){
for(int ti=cntMyPos-1; ti>=0; ti--){
if(OrderSelect(ti,SELECT_BY_POS,MODE_TRADES)==false) continue;
if( StringLen(symbol) && OrderSymbol()!=symbol ) continue;
if(magic>0 && OrderMagicNumber()!=magic) continue;
if( OrderType()==OP_BUY ){
if(type==MY_SELL) continue;
MqlTick latest_price;
if(!SymbolInfoTick(OrderSymbol(),latest_price)){
Alert(GetLastError());
return;
}
if(!OrderClose(OrderTicket(), OrderLots(),latest_price.bid,100)){
}
}else if(OrderType()==OP_SELL){
if(type==MY_BUY) continue;
MqlTick latest_price;
if(!SymbolInfoTick(OrderSymbol(),latest_price)){
Alert(GetLastError());
return;
}
if(!OrderClose(OrderTicket(), OrderLots(),latest_price.ask,100)){
}
}else{
if(type==MY_BUY && OrderType()!=OP_BUYSTOP ) continue;
if(type==MY_SELL && OrderType()!=OP_SELLSTOP ) continue;
if(!OrderDelete(OrderTicket())){
}
}
}
}
#endif
}
bool pdxSendOrder(TypeOfPos mytype, double price, double sl, double tp, double volume, ulong position=0, string comment="", string sym="", int magic=0){
if( !StringLen(sym) ){
sym=_Symbol;
}
if( magic==0 ){
magic=EA_Magic;
}
int curDigits=(int) SymbolInfoInteger(sym, SYMBOL_DIGITS);
if(sl>0){
sl=NormalizeDouble(sl,curDigits);
}
if(tp>0){
tp=NormalizeDouble(tp,curDigits);
}
if(price>0){
price=NormalizeDouble(price,curDigits);
}else{
#ifdef __MQL5__
#else
MqlTick latest_price;
SymbolInfoTick(sym,latest_price);
if( mytype == MY_SELL ){
price=latest_price.ask;
}else if( mytype == MY_BUY ){
price=latest_price.bid;
}
#endif
}
if( StringLen(my_cmt) && comment=="" ){
comment=my_cmt;
}
#ifdef __MQL5__
ENUM_TRADE_REQUEST_ACTIONS action=TRADE_ACTION_DEAL;
ENUM_ORDER_TYPE type=ORDER_TYPE_BUY;
switch(mytype){
case MY_BUY:
action=TRADE_ACTION_DEAL;
type=ORDER_TYPE_BUY;
break;
case MY_BUYSLTP:
action=TRADE_ACTION_SLTP;
type=ORDER_TYPE_BUY;
break;
case MY_BUYSTOP:
action=TRADE_ACTION_PENDING;
type=ORDER_TYPE_BUY_STOP;
break;
case MY_BUYLIMIT:
action=TRADE_ACTION_PENDING;
type=ORDER_TYPE_BUY_LIMIT;
break;
case MY_SELL:
action=TRADE_ACTION_DEAL;
type=ORDER_TYPE_SELL;
break;
case MY_SELLSLTP:
action=TRADE_ACTION_SLTP;
type=ORDER_TYPE_SELL;
break;
case MY_SELLSTOP:
action=TRADE_ACTION_PENDING;
type=ORDER_TYPE_SELL_STOP;
break;
case MY_SELLLIMIT:
action=TRADE_ACTION_PENDING;
type=ORDER_TYPE_SELL_LIMIT;
break;
}
MqlTradeRequest mrequest;
MqlTradeResult mresult;
ZeroMemory(mrequest);
mrequest.action = action;
mrequest.sl = sl;
mrequest.tp = tp;
mrequest.symbol = sym;
if(position>0){
mrequest.position = position;
}
if(StringLen(comment)){
mrequest.comment=comment;
}
if(action!=TRADE_ACTION_SLTP){
if(price>0){
mrequest.price = price;
}
if(volume>0){
mrequest.volume = volume;
}
mrequest.type = type;
mrequest.magic = magic;
switch(useORDER_FILLING_RETURN){
case FOK:
mrequest.type_filling = ORDER_FILLING_FOK;
break;
case RETURN:
mrequest.type_filling = ORDER_FILLING_RETURN;
break;
case IOC:
mrequest.type_filling = ORDER_FILLING_IOC;
break;
}
mrequest.deviation=100;
}
if(OrderSend(mrequest,mresult)){
if(mresult.retcode==10009 || mresult.retcode==10008){
if(action!=TRADE_ACTION_SLTP){
switch(type){
case ORDER_TYPE_BUY:
// Alert("Order Buy #:",mresult.order," sl",sl," tp",tp," p",price," !!");
break;
case ORDER_TYPE_SELL:
// Alert("Order Sell #:",mresult.order," sl",sl," tp",tp," p",price," !!");
break;
}
}else{
// Alert("Order Modify SL #:",mresult.order," sl",sl," tp",tp," !!");
}
return true;
}else{
msgErr(GetLastError(), mresult.retcode);
}
}
#else
int type=OP_BUY;
switch(mytype){
case MY_BUY:
type=OP_BUY;
break;
case MY_BUYSTOP:
type=OP_BUYSTOP;
break;
case MY_BUYLIMIT:
type=OP_BUYLIMIT;
break;
case MY_SELL:
type=OP_SELL;
break;
case MY_SELLSTOP:
type=OP_SELLSTOP;
break;
case MY_SELLLIMIT:
type=OP_SELLLIMIT;
break;
}
if(OrderSend(sym, type, volume, price, 100, sl, tp, comment, magic, 0)<0){
msgErr(GetLastError());
}else{
switch(type){
case OP_BUY:
Alert("Order Buy sl",sl," tp",tp," p",price," !!");
break;
case OP_SELL:
Alert("Order Sell sl",sl," tp",tp," p",price," !!");
break;
}
return true;
}
#endif
return false;
}
void msgErr(int err, int retcode=0){
string curErr="";
switch(err){
case 1:
curErr=langs.err1;
break;
case 2:
curErr=langs.err2;
break;
case 3:
curErr=langs.err3;
break;
case 4:
curErr=langs.err4;
break;
case 5:
curErr=langs.err5;
break;
case 6:
curErr=langs.err6;
break;
case 7:
curErr=langs.err7;
break;
case 8:
curErr=langs.err8;
break;
case 9:
curErr=langs.err9;
break;
case 64:
curErr=langs.err64;
break;
case 65:
curErr=langs.err65;
break;
case 128:
curErr=langs.err128;
break;
case 129:
curErr=langs.err129;
break;
case 130:
curErr=langs.err130;
break;
case 131:
curErr=langs.err131;
break;
case 132:
curErr=langs.err132;
break;
case 133:
curErr=langs.err133;
break;
case 134:
curErr=langs.err134;
break;
case 135:
curErr=langs.err135;
break;
case 136:
curErr=langs.err136;
break;
case 137:
curErr=langs.err137;
break;
case 138:
curErr=langs.err138;
break;
case 139:
curErr=langs.err139;
break;
case 140:
curErr=langs.err140;
break;
case 141:
curErr=langs.err141;
break;
case 145:
curErr=langs.err145;
break;
case 146:
curErr=langs.err146;
break;
case 147:
curErr=langs.err147;
break;
case 148:
curErr=langs.err148;
break;
default:
curErr=langs.err0+": "+(string) err;
}
if(retcode>0){
curErr+=" ";
switch(retcode){
case 10004:
curErr+=langs.retcode10004;
break;
case 10006:
curErr+=langs.retcode10006;
break;
case 10007:
curErr+=langs.retcode10007;
break;
case 10010:
curErr+=langs.retcode10010;
break;
case 10011:
curErr+=langs.retcode10011;
break;
case 10012:
curErr+=langs.retcode10012;
break;
case 10013:
curErr+=langs.retcode10013;
break;
case 10014:
curErr+=langs.retcode10014;
break;
case 10015:
curErr+=langs.retcode10015;
break;
case 10016:
curErr+=langs.retcode10016;
break;
case 10017:
curErr+=langs.retcode10017;
break;
case 10018:
curErr+=langs.retcode10018;
break;
case 10019:
curErr+=langs.retcode10019;
break;
case 10020:
curErr+=langs.retcode10020;
break;
case 10021:
curErr+=langs.retcode10021;
break;
case 10022:
curErr+=langs.retcode10022;
break;
case 10023:
curErr+=langs.retcode10023;
break;
case 10024:
curErr+=langs.retcode10024;
break;
case 10025:
curErr+=langs.retcode10025;
break;
case 10026:
curErr+=langs.retcode10026;
break;
case 10027:
curErr+=langs.retcode10027;
break;
case 10028:
curErr+=langs.retcode10028;
break;
case 10029:
curErr+=langs.retcode10029;
break;
case 10030:
curErr+=langs.retcode10030;
break;
case 10031:
curErr+=langs.retcode10031;
break;
case 10032:
curErr+=langs.retcode10032;
break;
case 10033:
curErr+=langs.retcode10033;
break;
case 10034:
curErr+=langs.retcode10034;
break;
case 10035:
curErr+=langs.retcode10035;
break;
case 10036:
curErr+=langs.retcode10036;
break;
case 10038:
curErr+=langs.retcode10038;
break;
case 10039:
curErr+=langs.retcode10039;
break;
case 10040:
curErr+=langs.retcode10040;
break;
case 10041:
curErr+=langs.retcode10041;
break;
case 10042:
curErr+=langs.retcode10042;
break;
case 10043:
curErr+=langs.retcode10043;
break;
case 10044:
curErr+=langs.retcode10044;
break;
}
}
Alert(curErr);
}
void init_lang(){
switch(LANG){
case MY_ENG:
langs.err1="No error, but unknown result. (1)";
langs.err2="General error (2)";
langs.err3="Incorrect parameters (3)";
langs.err4="Trade server busy (4)";
langs.err5="Old client terminal version (5)";
langs.err6="No connection to trade server (6)";
langs.err7="Not enough rights (7)";
langs.err8="Too frequent requests (8)";
langs.err9="Invalid operation disruptive server operation (9)";
langs.err64="Account blocked (64)";
langs.err65="Invalid account number (65)";
langs.err128="Expired waiting period for transaction (128)";
langs.err129="Invalid price (129)";
langs.err130="Wrong stop loss (130)";
langs.err131="Wrong volume (131)";
langs.err132="Market closed (132)";
langs.err133="Trade prohibited (133)";
langs.err134="Not enough money to complete transaction. (134)";
langs.err135="Price changed (135)";
langs.err136="No prices (136)";
langs.err137="Broker busy (137)";
langs.err138="New prices (138)";
langs.err139="Order blocked and already being processed (139)";
langs.err140="Only purchase allowed (140)";
langs.err141="Too many requests (141)";
langs.err145="Modification prohibited because order too close to market. (145)";
langs.err146="Trading subsystem busy (146)";
langs.err147="Using order expiration date prohibited by broker (147)";
langs.err148="Number of open and pending orders reached limit set by broker (148)";
langs.err0="Error occurred while running request";
langs.retcode="Reason";
langs.retcode10004="Requote";
langs.retcode10006="Request rejected";
langs.retcode10007="Request canceled by trader";
langs.retcode10010="Only part of request completed";
langs.retcode10011="Request processing error";
langs.retcode10012="Request canceled by timeout";
langs.retcode10013="Invalid request";
langs.retcode10014="Invalid volume in request";
langs.retcode10015="Invalid price in request";
langs.retcode10016="Invalid stops in request";
langs.retcode10017="Trade disabled";
langs.retcode10018="Market closed";
langs.retcode10019="Not enough money to complete request";
langs.retcode10020="Prices changed";
langs.retcode10021="No quotes to process request";
langs.retcode10022="Invalid order expiration date in request";
langs.retcode10023="Order state changed";
langs.retcode10024="Too frequent requests";
langs.retcode10025="No changes in request";
langs.retcode10026="Autotrading disabled by server";
langs.retcode10027="Autotrading disabled by client terminal";
langs.retcode10028="Request locked for processing";
langs.retcode10029="Order or position frozen";
langs.retcode10030="Invalid order filling type";
langs.retcode10031="No connection with trade server";
langs.retcode10032="Operation allowed only for live accounts";
langs.retcode10033="Number of pending orders reached limit";
langs.retcode10034="Volume of orders and positions for symbol reached limit";
langs.retcode10035="Incorrect or prohibited order type";
langs.retcode10036="Position with specified POSITION_IDENTIFIER already closed";
langs.retcode10038="Close volume exceeds current position volume";
langs.retcode10039="Close order already exists for specified position";
langs.retcode10040="Number of open items exceeded";
langs.retcode10041="Pending order activation request rejected, order canceled";
langs.retcode10042="Only long positions allowed";
langs.retcode10043="Only short positions allowed";
langs.retcode10044="Only position closing allowed";
break;
case MY_RUS:
langs.err0="> 2@5<O 2K?>;=5=8O 70?@>A0 ?@>87>H;0 >H81:0";
langs.err1="5B >H81:8, => @57C;LB0B =58725AB5= (1)";
langs.err2="1I0O >H81:0 (2)";
langs.err3="5?@028;L=K5 ?0@0<5B@K (3)";
langs.err4="">@3>2K9 A5@25@ 70=OB (4)";
langs.err5="!B0@0O 25@A8O :;85=BA:>3> B5@<8=0;0 (5)";
langs.err6="5B A2O78 A B>@3>2K< A5@25@>< (6)";
langs.err7="54>AB0B>G=> ?@02 (7)";
langs.err8="!;8H:>< G0ABK5 70?@>AK (8)";
langs.err9="54>?CAB8<0O >?5@0F8O =0@CH0NI0O DC=:F8>=8@>20=85 A5@25@0 (9)";
langs.err64="!G5B 701;>:8@>20= (64)";
langs.err65="5?@028;L=K9 =><5@ AG5B0 (65)";
langs.err128="AB5: A@>: >6840=8O A>25@H5=8O A45;:8 (128)";
langs.err129="5?@028;L=0O F5=0 (129)";
langs.err130="5?@028;L=K5 AB>?K (130)";
langs.err131="5?@028;L=K9 >1J5< (131)";
langs.err132=" K=>: 70:@KB (132)";
langs.err133="">@3>2;O 70?@5I5=0 (133)";
langs.err134="54>AB0B>G=> 45=53 4;O A>25@H5=8O >?5@0F88 (134)";
langs.err135="&5=0 87<5=8;0AL (135)";
langs.err136="5B F5= (136)";
langs.err137="@>:5@ 70=OB (137)";
langs.err138=">2K5 F5=K (138)";
langs.err139="@45@ 701;>:8@>20= 8 C65 >1@010BK205BAO (139)";
langs.err140=" 07@5H5=0 B>;L:> ?>:C?:0 (140)";
langs.err141="!;8H:>< <=>3> 70?@>A>2 (141)";
langs.err145=">48D8:0F8O 70?@5I5=0, B0: :0: >@45@ A;8H:>< 1;87>: : @K=:C (145)";
langs.err146=">4A8AB5<0 B>@3>2;8 70=OB0 (146)";
langs.err147="A?>;L7>20=85 40BK 8AB5G5=8O >@45@0 70?@5I5=> 1@>:5@>< (147)";
langs.err148=">;8G5AB2> >B:@KBKE 8 >B;>65==KE >@45@>2 4>AB83;> ?@545;0, CAB0=>2;5==>3> 1@>:5@>< (148)";
langs.retcode="@8G8=0";
langs.retcode10004=" 5:2>B0";
langs.retcode10006="0?@>A >B:;>=5=";
langs.retcode10007="0?@>A >B<5=5= B@5945@><";
langs.retcode10010="0O2:0 2K?>;=5=0 G0AB8G=>";
langs.retcode10011="H81:0 >1@01>B:8 70?@>A0";
langs.retcode10012="0?@>A >B<5=5= ?> 8AB5G5=8N 2@5<5=8";
langs.retcode10013="5?@028;L=K9 70?@>A";
langs.retcode10014="5?@028;L=K9 >1J5< 2 70?@>A5";
langs.retcode10015="5?@028;L=0O F5=0 2 70?@>A5";
langs.retcode10016="5?@028;L=K5 AB>?K 2 70?@>A5";
langs.retcode10017="">@3>2;O 70?@5I5=0";
langs.retcode10018=" K=>: 70:@KB";
langs.retcode10019="5B 4>AB0B>G=KE 45=56=KE A@54AB2 4;O 2K?>;=5=8O 70?@>A0";
langs.retcode10020="&5=K 87<5=8;8AL";
langs.retcode10021="BACBAB2CNB :>B8@>2:8 4;O >1@01>B:8 70?@>A0";
langs.retcode10022="525@=0O 40B0 8AB5G5=8O >@45@0 2 70?@>A5";
langs.retcode10023="!>AB>O=85 >@45@0 87<5=8;>AL";
langs.retcode10024="!;8H:>< G0ABK5 70?@>AK";
langs.retcode10025=" 70?@>A5 =5B 87<5=5=89";
langs.retcode10026="2B>B@5948=3 70?@5I5= A5@25@><";
langs.retcode10027="2B>B@5948=3 70?@5I5= :;85=BA:8< B5@<8=0;><";
langs.retcode10028="0?@>A 701;>:8@>20= 4;O >1@01>B:8";
langs.retcode10029="@45@ 8;8 ?>78F8O 70<>@>65=K";
langs.retcode10030="#:070= =5?>445@68205<K9 B8? 8A?>;=5=8O >@45@0 ?> >AB0B:C ";
langs.retcode10031="5B A>548=5=8O A B>@3>2K< A5@25@><";
langs.retcode10032="?5@0F8O @07@5H5=0 B>;L:> 4;O @50;L=KE AG5B>2";
langs.retcode10033=">AB83=CB ;8<8B =0 :>;8G5AB2> >B;>65==KE >@45@>2";
langs.retcode10034=">AB83=CB ;8<8B =0 >1J5< >@45@>2 8 ?>78F89 4;O 40==>3> A8<2>;0";
langs.retcode10035="525@=K9 8;8 70?@5IQ==K9 B8? >@45@0";
langs.retcode10036=">78F8O A C:070==K< POSITION_IDENTIFIER C65 70:@KB0";
langs.retcode10038="0:@K205<K9 >1J5< ?@52KH05B B5:CI89 >1J5< ?>78F88";
langs.retcode10039=";O C:070==>9 ?>78F88 C65 5ABL >@45@ =0 70:@KB85";
langs.retcode10040=">;8G5AB2> >B:@KBKE ?>78F89 ?@52KH5=>";
langs.retcode10041="0?@>A =0 0:B820F8N >B;>65==>3> >@45@0 >B:;>=5=, 0 A0< >@45@ >B<5=5=";
langs.retcode10042=" 07@5H5=K B>;L:> 4;8==K5 ?>78F88";
langs.retcode10043=" 07@5H5=K B>;L:> :>@>B:85 ?>78F88";
langs.retcode10044=" 07@5H5=> B>;L:> 70:@K20BL ACI5AB2CNI85 ?>78F88";
break;
}
}
void getmeinfo_btn(string symname, int magic){
double profit=0;
double positionExist=false;
LongVol[hIndex]=0;
ShortVol[hIndex]=0;
datetime oldTimeLong=0;
datetime oldTimeShort=0;
LastLong=0;
LastShort=0;
minVolTicket = 0;
maxVolTicket = 0;
minVolIs = 0;
maxVolIs = 0;
minVolProfit = 0;
maxVolProfit = 0;
LongPos[hIndex]=0;
ShortPos[hIndex]=0;
// count the number of open Long and Short positions,
// as well as their total profit
#ifdef __MQL5__
int cntMyPos=PositionsTotal();
for(int ti=cntMyPos-1; ti>=0; ti--){
if(PositionGetSymbol(ti)!=symname) continue;
if(magic>0 && PositionGetInteger(POSITION_MAGIC)!=magic) continue;
positionExist=true;
double curProfit = 0;
curProfit+=PositionGetDouble(POSITION_PROFIT);
curProfit+=PositionGetDouble(POSITION_SWAP);
if (minVolIs == 0 || minVolIs > PositionGetDouble(POSITION_VOLUME)) {
minVolIs = PositionGetDouble(POSITION_VOLUME);
minVolTicket = PositionGetInteger(POSITION_TICKET);
minVolProfit = curProfit;
}
if (maxVolIs == 0 || maxVolIs < PositionGetDouble(POSITION_VOLUME)) {
maxVolIs = PositionGetDouble(POSITION_VOLUME);
maxVolTicket = PositionGetInteger(POSITION_TICKET);
maxVolProfit = curProfit;
}
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY){
LongVol[hIndex]+=PositionGetDouble(POSITION_VOLUME);
LongPos[hIndex]++;
if( !oldTimeLong || oldTimeLong<PositionGetInteger(POSITION_TIME) ){
oldTimeLong=(datetime) PositionGetInteger(POSITION_TIME);
LastLong=PositionGetDouble(POSITION_PRICE_OPEN);
}
}else{
ShortVol[hIndex]+=PositionGetDouble(POSITION_VOLUME);
ShortPos[hIndex]++;
if( !oldTimeShort || oldTimeShort<PositionGetInteger(POSITION_TIME) ){
oldTimeShort=(datetime) PositionGetInteger(POSITION_TIME);
LastShort=PositionGetDouble(POSITION_PRICE_OPEN);
}
}
profit += curProfit;
}
#else
int cntMyPos=OrdersTotal();
if(cntMyPos>0){
for(int ti=cntMyPos-1; ti>=0; ti--){
if(OrderSelect(ti,SELECT_BY_POS,MODE_TRADES)==false) continue;
if( OrderType()==OP_BUY || OrderType()==OP_SELL ){}else{ continue; }
if(OrderSymbol()!=symname) continue;
if(magic>0 && OrderMagicNumber()!=magic) continue;
positionExist=true;
double curProfit = 0;
curProfit+=OrderCommission();
curProfit+=OrderProfit();
curProfit+=OrderSwap();
if (minVolIs == 0 || minVolIs > OrderLots()) {
minVolIs = OrderLots();
minVolTicket = OrderTicket();
minVolProfit = curProfit;
}
if (maxVolIs == 0 || maxVolIs < OrderLots()) {
maxVolIs = OrderLots();
maxVolTicket = OrderTicket();
maxVolProfit = curProfit;
}
if(OrderType()==OP_BUY){
LongVol[hIndex]+=OrderLots();
LongPos[hIndex]++;
if( !oldTimeLong || oldTimeLong<OrderOpenTime() ){
oldTimeLong=OrderOpenTime();
LastLong=OrderOpenPrice();
}
}else{
ShortVol[hIndex]+=OrderLots();
ShortPos[hIndex]++;
if( !oldTimeShort || oldTimeShort<OrderOpenTime() ){
oldTimeShort=OrderOpenTime();
LastShort=OrderOpenPrice();
}
}
profit += curProfit;
}
}
#endif
}
void createObject(string name, int weight, string title){
// if there is no 'name' button on the chart, create it
if(ObjectFind(0, name)<0){
// define the shift relative to the chart right angle where the button is to be displayed
long offset= ChartGetInteger(0, CHART_WIDTH_IN_PIXELS)-87;
long offsetY=0;
for(int ti=0; ti<ObjectsTotal((long) 0); ti++){
string objName= ObjectName(0, ti);
if( StringFind(objName, prefix_graph)<0 ){
continue;
}
long tmpOffset=ObjectGetInteger(0, objName, OBJPROP_YDISTANCE);
if( tmpOffset>offsetY){
offsetY=tmpOffset;
}
}
for(int ti=0; ti<ObjectsTotal((long) 0); ti++){
string objName= ObjectName(0, ti);
if( StringFind(objName, prefix_graph)<0 ){
continue;
}
long tmpOffset=ObjectGetInteger(0, objName, OBJPROP_YDISTANCE);
if( tmpOffset!=offsetY ){
continue;
}
tmpOffset=ObjectGetInteger(0, objName, OBJPROP_XDISTANCE);
if( tmpOffset>0 && tmpOffset<offset){
offset=tmpOffset;
}
}
offset-=(weight+1);
if(offset<0){
offset=ChartGetInteger(0, CHART_WIDTH_IN_PIXELS)-87;
offsetY+=25;
offset-=(weight+1);
}
ObjectCreate(0, name, OBJ_BUTTON, 0, 0, 0);
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,offset);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,offsetY);
ObjectSetString(0,name,OBJPROP_TEXT, title);
ObjectSetInteger(0,name,OBJPROP_XSIZE,weight);
ObjectSetInteger(0,name,OBJPROP_FONTSIZE, 8);
ObjectSetInteger(0,name,OBJPROP_COLOR, clrBlack);
ObjectSetInteger(0,name,OBJPROP_YSIZE,25);
ObjectSetInteger(0,name,OBJPROP_BGCOLOR, clrLightGray);
ChartRedraw(0);
}else{
ObjectSetString(0,name,OBJPROP_TEXT, title);
}
}