13.4 C
New York
Monday, October 13, 2025

My helpful features in mql4 language – Buying and selling Concepts – 14 September 2025


LIST

  1. Normalize lot
  2. Shifting datain an array
  3. Reviewing all symbols out there overview
  4. Variable sort conversion
  5. Opening an order (binary choices)
  6. Seek for Fibonacci ranges
  7. Urgent the button (object)
  8. Truncation of characters within the instrument worth
  9. Splitting a string into components
  10. Code execution on the primary tick of a brand new bar
  11. MultiTimeFrame
  12. Launching an advisor on a Renko (offline) chart

There are conditions when you must spherical lots.

For instance, in martingale when multiplying lots.

To do that, we have to know to which decimal place we have to spherical.

string stepS=string(MarketInfo(_Symbol,MODE_LOTSTEP));
int nor_lot=0;
if(StringFind(stepS,".")!=-1) nor_lot=MathAbs(StringFind(stepS,".")-StringLen(stepS)+1);

double Lot_rounded=NormalizeDouble(4887.897,nor_lot) 

2. Shifting information in an array

On this code, we copy the array into itself however with a shift.

Shift the information again by 2 components. (The sixth turns into the 4th, and so forth.)

Uncopied components (far proper of the ‘shift’ amount) will retain their values.

double buf[6]={2.33,4,8,6,7,8.8};
int shift=2;
ArrayCopy(buf,buf,0,shift); 

Transfer ahead by 1 component.

Uncopied components (far left of the ‘shift’ amount) will retain their values.

double buf[6]={2.33,4,8,6,7,8.8};
int shift=1;
ArrayCopy(buf,buf,shift,0); 

3. Reviewing all symbols out there overview

On this code, we discover out what symbols we now have  and write them to the buffer.

The variable ‘all_pairs’ is liable for choosing forex pairs from the MarketWatch record (plus pairs utilized by operating indicators, scripts, or buying and selling advisors) or from all forex pairs supplied by the dealer, together with hidden ones.

bool all_pairs=false;

int symbols_tot=SymbolsTotal(all_pairs);
string symbols[]; ArrayResize(symbols,symbols_tot);

for(int i=0;i<symbols_tot;i++)
{
  symbols[i]=SymbolName(i,all_pairs);
}

4. Variable sort conversion

If, for instance, you must convert a variable sort from datetime to string, you are able to do it like this.

datetime time_cur=TimeCurrent();
Alert(TimeToString(time_cur)); 

You possibly can write it that method.

datetime time_cur=TimeCurrent();
Alert(string(time_cur)); 

5. Opening an order (binary choices)

The one distinction is within the touch upon the order. It’s essential to write it down like this.

enter int expiration_minits = 5;
...
OrderSend(Image(),OP_BUY,Lot,Ask,0,0,0,"BO exp:"+string(expiration_minits*60),Magic,0,clrNONE); 

6. Seek for Fibonacci ranges

You can not discover out the costs of the degrees themselves. You possibly can solely calculate them.

 string name_fibo="Fibo";


  int ranges=int(ObjectGetInteger(0,name_fibo,OBJPROP_LEVELS));
  double fib_prices[]; ArrayResize(fib_prices,ranges);
  double price_lev0=ObjectGetDouble(0,name_fibo,OBJPROP_PRICE,1);
  double price_lev100=ObjectGetDouble(0,name_fibo,OBJPROP_PRICE,0);
  bool wayUP=false; if(price_lev0<price_lev100) wayUP=true;
  double perc100_points=MathAbs(price_lev0-price_lev100);


     double stage=0;
     for(int i=0;i<ranges;i++)
     {
      stage=ObjectGetDouble(0,name_fibo,OBJPROP_LEVELVALUE,i);
      if(wayUP) fib_prices[i]=price_lev0+perc100_points*stage;
      else
      fib_prices[i]=price_lev0-perc100_points*stage;     
     } 

     for(int i=0;i<ranges;i++)
     {
     Alert(fib_prices[i]);
     }

7. Urgent the button (object)

OnChartEvent() doesn’t work within the tester. Nonetheless, there’s one common resolution for urgent the button within the tester and reside buying and selling.

 if(ObjectGetInteger(0,"BUY_button",OBJPROP_STATE))

{

ObjectSetInteger(0,"BUY_button",OBJPROP_STATE,false);

... 

} 

8. Truncation of characters within the instrument worth

Solely works for costs. If it is one thing else, then as a substitute of Digits, you must write a quantity that is the same as the variety of decimal locations.

enter int Characters_delete = 1;
...
string information=DoubleToString(Bid,Digits); 
string resoult=StringSubstr(information,0,StringLen(information)-Characters_delete); 

9. Splitting a string into components

For instance, we have to cut up a string with tons and place them in a buffer.

enter string Heaps="0.01,0.03,0.06";
...
string str_spl[];
int dimension=StringSplit(Heaps,StringGetCharacter(",",0),str_spl);
ArrayResize(lots_buf,dimension);

for(int i=0;i<dimension;i++)
{
lots_buf[i]=double(str_spl[i]);
} 

for(int i=ArraySize(lots_buf)-1;i>=0;i--)
{
Alert(lots_buf[i]);
} 

10. Code execution on the primary tick of a brand new bar

First possibility.

All code past this level can be executed on the primary tick of the brand new bar.

int prev_bars=0;
...
if(prev_bars==Bars) return;
prev_bars=Bars; 

Second possibility.

The code in sq. brackets can be executed on the primary tick of the brand new bar.

int prev_bars=0;
...
if(prev_bars!=Bars)
{
prev_bars=Bars;
} 

When you must calculate information from the senior TF. For instance, RSI.

enter ENUM_TIMEFRAMES TF = PERIOD_CURRENT;
double rsi_buf[];
...
for(int i=0;i<Bars-(IndicatorCounted()-1);i++)
{
rsi_buf[i]=iRSI(Image(),TF,14,iBarShift(Image(),TF,Time[i]));
} 

12. Launching an advisor on a Renko (offline) chart

Renko is an offline chart.

A brand new tick is not going to trigger the advisor code to start out executing.

It’s essential to use this development.

double prev_bid;

 int OnInit()
 {  
 
 if(ChartGetInteger(0,CHART_IS_OFFLINE))
 {
 prev_bid=Shut[0];

 whereas(!IsStopped())
 {
 RefreshRates();
  if(prev_bid!=Shut[0]) {prev_bid=Shut[0];OnTick();}
 Sleep(100);
 }
 }



 return(INIT_SUCCEEDED);
} 

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles