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
Indicators Used
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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---