EA-Setka-2/framework/kernel/mql4/kernel_market.mqh
super.admin a4b861dd93 convert
2025-05-30 14:50:44 +02:00

264 lines
No EOL
6.5 KiB
MQL5

#ifndef FRAMEWORK_KERNEL_MARKET_MQH
#define FRAMEWORK_KERNEL_MARKET_MQH
class kernel_market {
public:
static double price_buy ( string symbol ) {
return MarketInfo ( symbol, MODE_ASK );
}
static double price_sell ( string symbol ) {
return MarketInfo ( symbol, MODE_BID );
}
static double price_day_min ( string symbol ) {
return MarketInfo ( symbol, MODE_LOW );
}
static double price_day_min ( ) {
return price_day_min ( CURRENT_SYMBOL );
}
static double price_day_max ( string symbol ) {
return MarketInfo ( symbol, MODE_HIGH );
}
static double price_day_max ( ) {
return price_day_max ( CURRENT_SYMBOL );
}
static double tick_value ( string symbol ) {
double res = MarketInfo ( symbol, MODE_TICKVALUE );
for (int i=0; i < 10; i++)
{
if (res != 0)
break;
Sleep(100);
res = MarketInfo ( symbol, MODE_TICKVALUE );
if ( i == 9 && res == 0)
{
Print(__FUNCTION__," Cant get TickValue! Attempt to calculate!");
res = CalcTickValue();
//Print(__FUNCTION__, " Can't acquire TickValue! Ending program.");
//OnDeinit(10);
}
}
return res;
}
static double tick_value () {
return tick_value ( CURRENT_SYMBOL );
}
static double tick_size ( string symbol ) {
return MarketInfo ( symbol, MODE_TICKSIZE );
}
static double tick_size () {
return tick_size ( CURRENT_SYMBOL );
}
static datetime tick_last_time ( string symbol ) {
return ( datetime ) MarketInfo ( symbol, MODE_TIME );
}
static datetime tick_last_time () {
return tick_last_time ( CURRENT_SYMBOL );
}
static double lot_min ( string symbol ) {
return MarketInfo ( symbol, MODE_MINLOT );
}
static double lot_min () {
return lot_min ( CURRENT_SYMBOL );
}
static double lot_size ( string symbol ) {
return MarketInfo ( symbol, MODE_LOTSIZE );
}
static double lot_size () {
return lot_size ( CURRENT_SYMBOL );
}
static double lot_step ( string symbol ) {
return MarketInfo ( symbol, MODE_LOTSTEP );
}
static double lot_step () {
return lot_step ( CURRENT_SYMBOL );
}
static double lot_max ( string symbol ) {
return MarketInfo ( symbol, MODE_MAXLOT );
}
static double lot_max () {
return lot_max ( CURRENT_SYMBOL );
}
static enum_swap_type swap_type ( string symbol ) {
return ( enum_swap_type ) MarketInfo ( symbol, MODE_SWAPTYPE );
}
static enum_swap_type swap_type () {
return swap_type ( CURRENT_SYMBOL );
}
static double swap_long ( string symbol ) {
return MarketInfo ( symbol, MODE_SWAPLONG );
}
static double swap_long ( ) {
return swap_long ( CURRENT_SYMBOL );
}
static double swap_short ( string symbol ) {
return MarketInfo ( symbol, MODE_SWAPSHORT );
}
static double swap_short ( ) {
return swap_short ( CURRENT_SYMBOL );
}
static enum_margin_calc_type margin_calc_type ( string symbol ) {
return ( enum_margin_calc_type ) MarketInfo ( symbol, MODE_MARGINCALCMODE );
}
static enum_margin_calc_type margin_calc_type () {
return margin_calc_type ( CURRENT_SYMBOL );
}
static double margin_required ( string symbol ) {
return MarketInfo ( symbol, MODE_MARGINREQUIRED );
}
static double margin_required ( ) {
return margin_required ( CURRENT_SYMBOL );
}
static double margin_hedged ( string symbol ) {
return MarketInfo ( symbol, MODE_MARGINHEDGED );
}
static double margin_hedged ( ) {
return margin_hedged ( CURRENT_SYMBOL );
}
static double margin_maintenance ( string symbol ) {
return MarketInfo ( symbol, MODE_MARGINMAINTENANCE );
}
static double margin_maintenance () {
return margin_maintenance ( CURRENT_SYMBOL );
}
static double margin_init ( string symbol ) {
return MarketInfo ( symbol, MODE_MARGININIT );
}
static double margin_init () {
return margin_init ( CURRENT_SYMBOL );
}
static double point ( string symbol ) {
return MarketInfo ( symbol, MODE_POINT );
}
static double point () {
return point ( CURRENT_SYMBOL );
}
static datetime starting ( string symbol ) {
return ( datetime ) MarketInfo ( symbol, MODE_STARTING );
}
static datetime starting ( ) {
return ( datetime ) starting ( CURRENT_SYMBOL );
}
static datetime expiration ( string symbol ) {
return ( datetime ) MarketInfo ( symbol, MODE_EXPIRATION );
}
static datetime expiration () {
return ( datetime ) expiration ( CURRENT_SYMBOL );
}
static bool trade_allowed ( string symbol ) {
return (bool)MarketInfo ( symbol, MODE_TRADEALLOWED );
}
static bool trade_allowed () {
return trade_allowed ( CURRENT_SYMBOL );
}
static double stop_level ( string symbol ) {
return MarketInfo ( symbol, MODE_STOPLEVEL );
}
static double stop_level () {
return stop_level ( CURRENT_SYMBOL );
}
static double freeze_level ( string symbol ) {
return MarketInfo ( symbol, MODE_FREEZELEVEL );
}
static double freeze_level () {
return freeze_level ( CURRENT_SYMBOL );
}
static int spread ( string symbol ) {
return ( int ) MarketInfo ( symbol, MODE_SPREAD );
}
static int spread () {
return spread ( CURRENT_SYMBOL );
}
static int digits ( string symbol ) {
return ( int ) MarketInfo ( symbol, MODE_DIGITS );
}
static int digits () {
return ( int ) digits ( CURRENT_SYMBOL );
}
static enum_profit_calc_type profit_calc_type ( string symbol ) {
return ( enum_profit_calc_type ) MarketInfo ( symbol, MODE_PROFITCALCMODE );
}
static enum_profit_calc_type profit_calc_type () {
return profit_calc_type ( CURRENT_SYMBOL );
}
static double CalcTickValue()
{
int count = kernel_order::count();
double open_price,
price,
lots,
profit;
for (int i = 0; i < count; i++)
{
if (kernel_order::select_by_index( i ) && kernel_order::symbol() == CURRENT_SYMBOL)
{
open_price = kernel_order::open_price();
price = (kernel_order::type()== order_operation_buy || kernel_order::type() == order_operation_buy_stop)?
kernel_market::price_sell(CURRENT_SYMBOL):
kernel_market::price_buy(CURRENT_SYMBOL);
lots = kernel_order::lots();
profit = kernel_order::get_profit(true);
if(profit != 0 && lots != 0 && open_price != price)
return MathAbs(open_price - price)/profit/lots;
}
}
Print(__FUNCTION__," ",__LINE__," Can't calculate TickValue!");
return 1;
}
};
#endif