FrBestExp02_4_maloma_mod

Author:

Certainly! Here's a Python translation of your trading bot logic:

import time

def round_down(value):
    """Rounds down to the nearest integer."""
    return int(value)

def trade_logic():
    # Initialization
    start_time = time.time()
    stop_loss_percentage = 30 / 100
    take_profit_multiplier = 3
    lot_size = 0.1
    mlot = round_down(lot_size * 10)
    
    hedging_enabled = True
    local_trading_enabled = False

    orders = get_open_orders()

    s, b = 0, 0

    for order in orders:
        if order['symbol'] == "EURUSD" and not order['comment'].startswith("EA"):
            if order['type'] == 'buy':
                b += 1
            elif order['type'] == 'sell':
                s += 1
    
    summa = calculate_profit()

    # Hedging logic
    hstop = abs(summa) / lot_size * mlot

    hedged = False
    if hedging_enabled and (s + b > 0):
        if ((ssum < -300 and bsum > 300) or (bsum < -300 and ssum > 300)) and (s + b >= 2):
            hedged = True
    
    # Local trading logic
    pl = False
    if local_trading_enabled:
        if summa >= stop_loss_percentage * lot_size * mlot and s + b == 1:
            pl = True
        elif summa > 2 * stop_loss_percentage * lot_size * mlot and s + b == 2:
            pl = True
        elif summa >= 3 * stop_loss_percentage * lot_size * mlot and s + b == 3:
            pl = True
    
    # Decision making for opening new positions
    if (s + b <= 1):
        if ((sigs == 1 and s + b == 0) or (bsum < -150 and local_trading_enabled)):
            open_sell_order()
        
        if ((sigb == 1 and s + b == 0) or (ssum < -150 and local_trading_enabled)):
            open_buy_order()

    # Closing logic
    close_open_orders(hedged, pl)

def get_open_orders():
    """Simulate fetching open orders."""
    return [{'symbol': 'EURUSD', 'type': 'buy', 'comment': ''},
            {'symbol': 'EURUSD', 'type': 'sell', 'comment': ''}]

def calculate_profit():
    """Calculates the profit of all open trades (placeholder)."""
    return 0

def open_sell_order():
    print("Opening sell order")

def open_buy_order():
    print("Opening buy order")

def close_open_orders(hedged, pl):
    for order in get_open_orders():
        if hedged or pl:
            close_order(order)

def close_order(order):
    """Simulates closing an order."""
    print(f"Closing {order['type']} order")

# Start the trading logic
trade_logic()

Key Elements:

  • Order Management: Tracks existing buy and sell orders, adjusting for new ones.
  • Profit Calculation: Placeholder function calculate_profit() calculates total profit across open positions.
  • Hedging Logic: Implements conditions to determine when hedging should be activated based on the current state of trades.
  • Local Trading Logic: Manages logic around local trading settings and stop losses.
  • Opening/Closing Orders: Functions to handle order creation and closure, simulating interaction with a brokerage.

This script is structured for readability and modularity. You can expand upon functions like calculate_profit() and integrate real broker APIs for actual trading actions. Adjust placeholders like open_sell_order() and open_buy_order() as per your requirements.

Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reachedIt Closes Orders by itself
Indicators Used
Moving Average of OscillatorBill Williams Alligator
2 Views
0 Downloads
0 Favorites

Profitability Reports

AUD/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 0
Won Trades 0
Lost trades 0
Win Rate 0.0 %
Expected payoff 0.00
Gross Profit 0.00
Gross Loss 0.00
Total Net Profit 0.00
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 0
Won Trades 0
Lost trades 0
Win Rate 0.0 %
Expected payoff 0.00
Gross Profit 0.00
Gross Loss 0.00
Total Net Profit 0.00
-100%
-50%
0%
50%
100%
NZD/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 0
Won Trades 0
Lost trades 0
Win Rate 0.0 %
Expected payoff 0.00
Gross Profit 0.00
Gross Loss 0.00
Total Net Profit 0.00
-100%
-50%
0%
50%
100%
FrBestExp02_4_maloma_mod
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                                FrBestExp02_4.mq4 |
//|                                                                  |
//|                                   _4 äîï. óñë. Alligator + Pivot |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
extern double  Lots = 1.00;
extern int     Stop_Loss = 1000;
extern int     Take_Profit = 1000;
extern int     Trailing_Stop = 0;

//    Only for M15
extern int Vlim=50;
extern int fper=12,sper=26,sigper=9;// ïåðèîäû èíäèêàòîðà OsMA
extern int stop=300;// Óðîâåíü îòñå÷êè ïðîôèòà
extern int  hedg=1;// ôëàã ðàçðåøåíèÿ õåäæà
extern double  kh=10;// êîýôô.õåäæèðîâàíèÿ
extern int lok;// ôëàã ðàçðåøåíèÿ ëîêèðîâàíèÿ ïîçèöèè
extern int rpr=1;// ôëàã îïðåäåëåíèÿ ïðîñàäêè ïîçû èëè ïî âñåìó òåñòó
extern int ttime=900;// Çàäåðæêà âûñòàâëåíèÿ õåäæ-îðäåðà íà 1 ñâå÷ó
extern int hstop=-3000;// ñòîï-ëîññ äëÿ õåäæà


int cnt;// èíäåêñ öèêëà
int sigs,sigb;// ñóììèðóþùèé ñèãíàë íà ïðîâåäåíèå îïåðàöèè êóïëè-ïðîäàæè

double ssig,bsig;// ñèãíàëû íà êóïëþ-ïðîäàæó îò èíäèêàòîðà ôðàêòàëîâ
double  osmanul,osmaone;// ñèãíàëû èíäèêàòîðà OsMA îò íóëåâîãî è ïåðâîãî áàðîâ
int s,b;// êîëè÷åñòâî àêòèâíûõ ñýëë è áàé îðäåðîâ
int hml;// ôëàã çàêðûòèÿ ïîçèöèè ñ ìèíóñîâûì ïðîôèòîì (çàêðûâàåòñÿ ïîçèöèÿ ñ ìåíüøèì ëîòîì
int pl;// ôëàã çàêðûòèÿ âñåõ ïîçèöèé ïî óñëîâèþ íàëè÷èÿ óñòàíîâëåííîãî ïîëîæèòåëüíîãî ïðîôèòà
double summa;// ñóììàðíûé ïðîôèò ïî âñåì ïîçèöèÿì
double mlot;// âåëè÷èíà òîðãóåìîãî ëîòà
double ssum,bsum;// ïðîôèò ïî îðäåðàì ñýëë è áàé ðàçäåëüíî
double pr;// âåëè÷èíãà ïðîñàäêè
int hblok,shblok,bhblok;// ôëàã áëîêèðîâàíèÿ âûñòàâëåíèÿ õåäæ-îðäåðà è ôëàãè ïîâòîðíîãî çàïóñêà õåäæ-ïðîöåäóðû
double DHMax,DLMin;
bool ft=true;
int rang;
double pt;
int nul;// ïåðåìåííûå äëÿ âû÷èñëåíèÿ ïîâîðîòíîé òî÷êè ïðè çàïóñêå è â 00.00 êàæäûõ ñóòîê
int LastTradeTime;
//---------------------------------------------------------------------------------------------------------------

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
double FractalBest(int Dir)
 {
  double up,dw;
  
   if(High[3]>High[4] && High[3]>High[5] && High[3]>High[2] && High[3]>High[1]){ 
      up=Low[0]-3*Point;
   }
   else{
      up=0;
   }
   if(Low[3]<Low[4] && Low[3]<Low[5] && Low[3]<Low[2] && Low[3]<Low[1]){ 
      dw=High[0]+3*Point;
   }
   else{
      dw=0;
   }
 if (Dir==0) {return(up);}
 if (Dir==1) {return(dw);}
 }

int start(){

   mlot=Lots; // îïðåäåëåíèå âåëè÷èíû ðàáî÷åãî ëîòà
//--------------------------------------------Âû÷èñëåíèÿïîâîðîòíîé òî÷êè------------------------------------------
pt=iCustom(NULL,0,"Pivot",0,0);
//----------------------------------------------------------------------------------------------------------------
   if(CurTime()-LastTradeTime<20)return(0);
//----------------------------Îïðåäåëåíèÿ îáùåãî è ïîçèöèîííîãî ïðîôèòà, à òàêæåïîäñ÷¸ò ïîçèöèé-------------------
   s=0;b=0;summa=0;bsum=0;ssum=0;
      for(cnt=0;cnt<OrdersTotal();cnt++){
         OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
            if(OrderSymbol()==Symbol() && OrderType()==OP_SELL){
               ssum=ssum+OrderProfit();
               s=s+1;
            }
            if(OrderSymbol()==Symbol() && OrderType()==OP_BUY){ 
               bsum=bsum+OrderProfit();
               b=b+1;
            }
      }
   summa=bsum+ssum;summa=MathRound(summa);
//------------------------------------------------------Òðåéëèíã-Ñòîï---------------------------------------------
   if(Trailing_Stop>0 && hedg==1){ 
      for(cnt=0;cnt<OrdersTotal();cnt++){
         OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
            if(OrderSymbol()==Symbol() && OrderProfit()>0){ 
               if(Bid-OrderOpenPrice()>Point*Trailing_Stop){ 
                  if(OrderStopLoss()<Bid-Point*Trailing_Stop){ 
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing_Stop,OrderTakeProfit(),0,Red);
                     return(0);
                  }
               }
               if(OrderOpenPrice()-Ask>Point*Trailing_Stop){ 
                  if(OrderStopLoss()>Ask+Point*Trailing_Stop){ 
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*Trailing_Stop,OrderTakeProfit(),0,Red);
                     return(0);
                  }
               }
            }
      }
   }
//---------------------------------------------------Âûñòàâëåíèå õåäæ-îðäåðà--------------------------------------
   if(hblok==1){
      shblok=0;bhblok=0;
      for(cnt=0;cnt<OrdersTotal();cnt++){
         OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
            if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderLots()==mlot*kh)shblok=1;
            if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderLots()==mlot*kh)bhblok=1;
      }
   }
   if(shblok==1 && bhblok==1)hblok=1;
   if(shblok==0 && bhblok==0)hblok=0;
   //if s+b=0 then hblok=0;
   if((s+b<=2 && (lok==1 || lok==0)) && hedg==1 && hblok==0){
      if(CurTime()-LastTradeTime<ttime)return(0);
      if(ssum>=150 || bsum<-300){ 
         OrderSend(Symbol(),OP_SELL,kh*mlot,Bid,5,Bid+Stop_Loss*Point,Bid-Take_Profit*Point,NULL,0,0,Aqua);
         //SetArrow(Time[0],H+5*Point,159,Aqua);
         hblok=1;
         return(0);
      }
      if(bsum>=150 || ssum<-300){
         OrderSend(Symbol(),OP_BUY,kh*mlot,Ask,5,Ask-Stop_Loss*Point,Ask+Take_Profit*Point,NULL,0,0,Red);
         //SetArrow(Time[0],L-5*Point,159,Red);
         hblok=1;
         return(0);
      }
   }
//------------------------------------------Âû÷èñëåíèå ïðîñàäêè â ïðîöåññå òîðãîâ------------------------------
   if(s+b==0 && rpr==0)pr=0;
   if(pr>summa && summa<0)pr=MathRound(summa);
//-----------------------------------Îïðåäåëåíèå îñíîâíîãî ñèãíàëà è ñèãíàëîâ èíäèêàòîðîâ------------------------

//   bsig=iCustom(NULL,0,"FractalBest",0,0);
//   ssig=iCustom(NULL,0,"FractalBest",1,0);
   bsig=FractalBest(0);
   ssig=FractalBest(1);
   osmanul=iOsMA(NULL,0,fper,sper,sigper,PRICE_CLOSE,0);
   osmaone=iOsMA(NULL,0,fper,sper,sigper,PRICE_CLOSE,1);

   double alf=iAlligator(NULL,0,13,8,8,5,5,3,0,0,MODE_GATORTEETH,0);
   double alm=iAlligator(NULL,0,13,8,8,5,5,3,0,0,MODE_GATORLIPS,0);   
   double als=iAlligator(NULL,0,13,8,8,5,5,3,0,0,MODE_GATORJAW,0); 

   if(ssig>1 && alf<alm && alm<als && Volume[1]>Volume[2] && osmaone>osmanul && osmaone<=0 && osmanul<0 && Close[0]>pt){
      sigs=1;
   }
   else{
      sigs=0;
   }
   if(bsig>1 && alf>alm && alm>als && Volume[1]>Volume[2] && osmaone<osmanul && osmaone>=0 && osmanul>0 && Close[0]<pt){
      sigb=1;
   }
   else{
      sigb=0;
   }
   /*
//--------------------------------------------Âûâîä äàìïà ðàáîòû ýêñïåðòà â æóðíàë---------------------------------
Print("Data: ",Year(),".",Month(),".",Day(),"  Time ",Hour(),":",Minute(),"   1Tik=",Volume[2],"  0Tiks=",Volume[1],"  PT=",pt,
      "  Price=",Close[0],"  BSig=",MathRound(bsig),"  SSig=",MathRound(ssig),"  SSum=",MathRound(ssum),"  BSum=",MathRound(bsum),
      "  Prosadka=",pr,"  HBlok=",hblok);
//---------------------------------Îïðåäåëåíå ìîäåëè çàêðûòèÿ îðäåðîâ ïî ïðîôèòó-----------------------------------
*/
   if(s+b<=1){
      hml=0;pl=0;
   }
   if(summa>=stop*mlot && s+b==1 && Trailing_Stop==0)pl=1;
   if(summa>2*stop && s+b==2 && lok==0 && Trailing_Stop==0)pl=1;
   if(summa>=3*stop*mlot && s+b==3 && lok==1 && Trailing_Stop==0)pl=1;
   if(Trailing_Stop>0)pl=0;
   if(Trailing_Stop>0 && (ssum<hstop || bsum<hstop))pl=1; // ñòîï äëÿ íåóäà÷íîãî õåäæà
   if(Trailing_Stop>0 && ((ssum<-300 && bsum>300) || (ssum>300 && bsum<-300)) && s+b>=2 && hedg==1 && pl==0)hml=1; 
// Óäàëåíèå ìåëêîé ïîçèöèè ñ îòðèöàòåëüíûì ïðîôèòîâ ïîñëå óäà÷íîãî çàïóñêà õåäæà
//------------------------------Óäàëåíèå õåäæèðóåìîãî îðäåðà ïðè ïîëó÷åíèè çàäàííîãî ïðîôèòà-----------------------
   if(hml==1){ 
      for(cnt=OrdersTotal()-1;cnt>=0;cnt--){
         OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); 
            if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && ssum<-2*stop && NormalizeDouble(OrderLots(),1)==NormalizeDouble(1.0*mlot,1)){                                    
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
               //return(0);
            } 
            if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && bsum<-2*stop && NormalizeDouble(OrderLots(),1)==NormalizeDouble(1.0*mlot,1)){ 
               OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
               //return(0);
            }
      }
      return(0);
   }
//---------------------------Çàêðûòèå âñåõ îòêðûòûõ íà ïàðå îðäåðîâ ïðè äîñòèæåíèè çàäàííîãî ïðîôèòà
   if(pl==1){ 
      for(cnt=OrdersTotal()-1;cnt>=0;cnt--){
         OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); 
            if(OrderSymbol()==Symbol() && OrderType()==OP_SELL){                                    
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
               //return(0);
            }
            if(OrderSymbol()==Symbol() && OrderType()==OP_BUY){
               OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
               //return(0);
            }
      }
      return(0);
   }

//------------------------------------------Âûñòàâëåíèå îñíîâíûõ è ëîêèðóþùèõ îðäåðîâ------------------------------
   if(s+b<=1){ 
      if((sigs==1 && s+b==0) || (bsum<-150 && lok==1)){ 
         OrderSend(Symbol(),OP_SELL,mlot,Bid,5,Bid+Stop_Loss*Point,Bid-Take_Profit*Point,NULL,0,0,Lime);
         //SetArrow(Time[0],H+5*Point,242,Lime);
         return(0);
      }
      if((sigb==1 && s+b==0) || (ssum<-150 && lok==1)){
         OrderSend(Symbol(),OP_BUY,mlot,Ask,5,Ask-Stop_Loss*Point,Ask+Take_Profit*Point,NULL,0,0,Gold);
         //SetArrow(Time[0],L-5*Point,241,Gold);
         return(0);
      }
   }
/*  */ 
//----------------------------------------------------------The END-------------------------------------------------
   return(0);
  }
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---