অটোমেটিক ট্রেডিং রোবট TCCI ইন্ডিকেটর এর সিগন্যাল ব্যবহার করে (Automated trading with TCCI Indicator signal)
অনলাইন ফরেক্স ট্রেডিং যাঁরা করে থাকেন তাঁদের জন্য খুবই প্রয়োজনীয় একটি এক্সপার্ট advisor (EA) এটি । এটি মূলত TCCI ফরেক্স ইন্ডিকেটর থেকে প্রাপ্ত সিগন্যাল এর উপর base করে buy/sell বসিয়ে থাকে । অনেকদিন আগে আমি এটির কোডিং সম্পন্ন করেছিলাম । আজ robot টির full code শেয়ার করলাম এখানে । কারো বুঝতে প্রব্লেম হলে কমেন্ট বক্সে যোগাযোগ করবেন বা আমাদের discord channel এও যোগাযোগ করতে পারেন । এর আগে steemit এ একটা অ্যাডভান্সড RSI এক্সপার্ট AdVisor দিয়েছিলাম , কারো দরকার হলে আবারো শেয়ার করবো ।
---------------------------Advanced TCCI EA code---------------------------
//+--------------------------------------------START---------------------------------------------+
//| RM TCCI EA.mq4 |
//| Copyright 2015, MetaQuotes Software Corp. & Copyright 2019,Royal Macro |
//| https://royalmacro.store |
//+----------------------------------------------------------------------------------------------+
#property copyright "Copyright © 2019-2021, royalmacro"
#property link "https://royalmacro.store"
#property version "1.06"
#property description "This TCCI Expert Advisor was developed by @royalmacro on behalf of Royal Macro."
#property description "Any unauthorized use/sell/re-distribution of this product means infringement of copyright."
#property description "-----------------------------------------------------------------------------------"
#property description "If you need any help contact: [email protected]"
#property description "-----------------------------------------------------------------------------------"
#property strict
//Input Data (variables)
int BarsToCount = 500 ;
int TCCIPrice = 0 ;
extern int Length = 45 ;
extern int Displace = 0 ;
extern int Filter = 5 ;
int Color = 1 ;
int ColorBarBack = 0 ;
double Deviation = 0.0 ;
extern double Lots = 0.03 ;
extern double ProfitMade = 30 ;
extern double LossLimit = 0 ;
extern bool trailing_stop = False;
extern double TrailingStop = 10;
extern int MaxSpread = 10;
extern int Slippage = 5; // how many pips of slippage can you tolorate
extern bool useTimer=False; // Use start & end trading times in Hours
extern int StartTime=9; // Start hour of Trading day
extern int EndTime=23; // End hour of Trading day
// Trade control
int new_ticket;
int error;
bool TradeAllowed=true; //
double myPoint; // support for 3/5 decimal places
int loopcount; // count of order attempts
int maxloop=3; // maximum number of attempts to handle errors
double Trail,iTrailingStop; //trailing stop variables
int MagicNumber = 1813120; // allows multiple experts to trade on same account
string TradeComment = "_RMAT.txt"; // where to log information
//--Time trading
datetime CurrentTime;
// Bar handling
datetime bartime=0; // used to determine when a bar has moved
// used for verbose error logging
#include <stdlib.mqh>
bool IAmRed;
bool IAmGreen;
bool IWasRed;
bool IWasGreen;
int init()
{
// get normalized Point based on Broker decimal places
myPoint = SetPoint();
Print("Init Complete");
Comment(" ");
return(0);
}
int deinit()
{
Print("DE-Init Complete");
Comment(" ");
return(0);
}
int start()
{
int cnt=0;
int gle=0;
int ticket=0;
int OrdersPerSymbol=0;
// stoploss and takeprofit and close control
double SL=0;
double TP=0;
double CurrentProfit=0;
double CurrentBasket=0;
//for trailing stop loss
double stoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
// direction control
bool BUYme=false;
bool SELLme=false;
double u1,d1;
//double u2,d2;
//double c1;
OrdersPerSymbol=0;
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
{
if( OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) OrdersPerSymbol++;
}
}
// if(OrdersPerSymbol==0) TradeAllowed=true;
// bar counting
if(bartime!=iTime(Symbol(), 0, 0) )
{
bartime=iTime(Symbol(), 0, 0) ;
u1=iCustom(Symbol(),0,"TCCI",TCCIPrice,Length,Displace,Filter,Color,ColorBarBack,Deviation,1,1);
d1=iCustom(Symbol(),0,"TCCI",TCCIPrice,Length,Displace,Filter,Color,ColorBarBack,Deviation,2,1);
//c1=iCCI(Symbol(),0,CCIPeriod,0,2);
//save last color
IWasGreen=IAmGreen;
IWasRed=IAmRed;
// what is the stable color
//if(u1<200 && d1>200 && c1>0) { IAmRed=false; IAmGreen=true; }
//if(u1>200 && d1<200 && c1<0) { IAmRed=true; IAmGreen=false; }
if(u1<200 && d1>200) { IAmRed=false; IAmGreen=true; }
if(u1>200 && d1<200) { IAmRed=true; IAmGreen=false; }
// did trend change, close and set trend
if(IWasRed && IAmGreen) { CloseEverything(); TradeAllowed=true; }
if(IWasGreen && IAmRed ) { CloseEverything(); TradeAllowed=true; }
// Every bar trading
//if(AccountEquity()-AccountBalance()>0) TradeAllowed=true;
// Trading hours
if(useTimer==True)
{
CurrentTime = TimeCurrent();
int GetWeekday = TimeDayOfWeek(CurrentTime);
int GetHour = TimeHour(CurrentTime);
int GetMinute = TimeMinute(CurrentTime);
if(GetHour > StartTime && GetHour < EndTime && GetWeekday <6)
{
//ENTRY LONG (buy, Ask)
if(IAmGreen && TradeAllowed) OpenBuy();
//ENTRY SHORT (sell, Bid)
if(IAmRed && TradeAllowed) OpenSell();
}
}
else
{
//ENTRY LONG (buy, Ask)
if(IAmGreen && TradeAllowed) OpenBuy();
//ENTRY SHORT (sell, Bid)
if(IAmRed && TradeAllowed) OpenSell();
}
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
{
if( OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber )
{
if(OrderType()==OP_BUY)
{
CurrentProfit=(Bid-OrderOpenPrice()) ;
// Did we make a profit
//======================
if(ProfitMade>0 && CurrentProfit>=(ProfitMade*myPoint))
{
CloseBuy("PROFIT");
}
// Did we take a loss
//====================
if(LossLimit>0 && CurrentProfit<=(LossLimit*(-1)*myPoint))
{
CloseBuy("LOSS");
}
} // if BUY
if(OrderType()==OP_SELL)
{
CurrentProfit=(OrderOpenPrice()-Ask);
// Did we make a profit
//======================
if( ProfitMade>0 && CurrentProfit>=(ProfitMade*myPoint) )
{
CloseSell("PROFIT");
}
// Did we take a loss
//====================
if( LossLimit>0 && CurrentProfit<=(LossLimit*(-1)*myPoint) )
{
CloseSell("LOSS");
}
} //if SELL
//if trailingstop is set & trailing_stop is true
if(TrailingStop>0 && trailing_stop==True)
{
iTrailingStop=TrailingStop;
if(TrailingStop<stoplevel) iTrailingStop=stoplevel;
Trail=iTrailingStop*myPoint; //Trail=iTrailingStop*Point;
double tsbuy=NormalizeDouble(Bid-Trail,Digits);
double tssell=NormalizeDouble(Ask+Trail,Digits);
if(OrderType()==OP_BUY && Bid-OrderOpenPrice()>Trail && Bid-OrderStopLoss()>Trail)
{
new_ticket=OrderModify(OrderTicket(),OrderOpenPrice(),tsbuy,OrderTakeProfit(),0,Blue);
if(ticket<0) error_handling(); //if error occured Error handling
}
if(OrderType()==OP_SELL && OrderOpenPrice()-Ask>Trail && (OrderStopLoss()-Ask>Trail || OrderStopLoss()==0))
{
new_ticket=OrderModify(OrderTicket(),OrderOpenPrice(),tssell,OrderTakeProfit(),0,Blue);
if(ticket<0) error_handling(); //if error occured Error handling
}
} //if trailing_stop end
} // if(OrderSymbol)
} //if orderselect()
} // for
return(0);
} // start()
//+-----------------+
//| CloseEverything |
//+-----------------+
// Closes all OPEN and PENDING orders
int CloseEverything()
{
int i;
for(i=OrdersTotal();i>=0;i--)
{
if(OrderSelect(i, SELECT_BY_POS))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY) CloseBuy ("CLOSEEverything");
if(OrderType()==OP_SELL) CloseSell("CLOSEEverything");
}
} //orderselect
} //for
return(0);
} // closeeverything
void OpenBuy()
{
int gle=0;
int ticket=0;
double SL=0;
double TP=0;
//int loopcount;
// PLACE order is independent of MODIFY order.
// This is mandatory for ECNs and acceptable for retail brokers
loopcount=0;
while(true)
{
// place order - NO TP OR SL
double SymSpread = MarketInfo(Symbol(), MODE_SPREAD); // This will Obtain broker Spread for current pair
if(MaxSpread > 0 && MaxSpread >= SymSpread) // This part compares broker spread with maximum allowed spread, and refuse trade if maxspread is exceeded
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,TradeComment,MagicNumber,White);
}
gle=GetLastError();
if(gle==0)
{
TradeAllowed=false;
Print("BUY PLACED Ticket="+ticket+" Ask="+Ask+" Lots="+Lots);
break;
}
else
{
Print("-----ERROR----- Placing BUY order: Lots="+Lots+" Bid="+Bid+" Ask="+Ask+" ticket="+ticket+" Err="+gle+" "+ErrorDescription(gle));
RefreshRates();
Sleep(500);
// give up after loopcount tries
loopcount++;
if(loopcount>maxloop)
{
Print("-----ERROR----- Giving up on placing BUY order");
//return(gle);
}
}
}//while - place order
}//BUYme
void OpenSell()
{
int gle=0;
int ticket=0;
double SL=0;
double TP=0;
//int loopcount;
// PLACE order is independent of MODIFY order.
// This is mandatory for ECNs and acceptable for retail brokers
loopcount=0;
while(true)
{
double SymSpread = MarketInfo(Symbol(), MODE_SPREAD); // This will Obtain broker Spread for current pair
if(MaxSpread > 0 && MaxSpread >= SymSpread) // This part compares broker spread with maximum allowed spread, and refuse trade if maxspread is exceeded
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,TradeComment,MagicNumber,Red);
}
gle=GetLastError();
if(gle==0)
{
TradeAllowed=false;
Print("SELL PLACED Ticket="+ticket+" Bid="+Bid+" Lots="+Lots);
break;
}
else
{
Print("-----ERROR----- placing SELL order: Lots="+Lots+" SL="+SL+" TP="+TP+" Bid="+Bid+" Ask="+Ask+" ticket="+ticket+" Err="+gle+" "+ErrorDescription(gle));
RefreshRates();
Sleep(500);
loopcount++;
if(loopcount>maxloop)
{
Print("-----ERROR----- Giving up on placing SELL order");
//return(gle);
}
}
}//while
}//SELLme
void CloseBuy (string myInfo)
{
int gle;
//int cnt;
//int OrdersPerSymbol;
loopcount=0;
string bTK=" Ticket="+OrderTicket();
string bSL=" SL="+OrderStopLoss();
string bTP=" TP="+OrderTakeProfit();
string bPM;
string bLL;
string bER;
bPM=" PM="+ProfitMade;
bLL=" LL="+LossLimit;
while(true)
{
new_ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,White);
gle=GetLastError();
bER=" error="+gle+" "+ErrorDescription(gle);
if(gle==0)
{
Print("CLOSE BUY "+myInfo+ bTK + bSL + bTP + bPM + bLL);
break;
}
else
{
Print("-----ERROR----- CLOSE BUY "+myInfo+ bER +" Bid="+Bid+ bTK + bSL + bTP + bPM + bLL);
RefreshRates();
Sleep(500);
}
loopcount++;
if(loopcount>maxloop)
{
Print("-----ERROR----- Giving up on closing SELL order");
//return(gle);
}
}//while
}
void CloseSell (string myInfo)
{
int gle;
//int cnt;
//int OrdersPerSymbol;
loopcount=0;
string sTK=" Ticket="+OrderTicket();
string sSL=" SL="+OrderStopLoss();
string sTP=" TP="+OrderTakeProfit();
string sPM;
string sLL;
string sER;
sPM=" PM="+ProfitMade;
sLL=" LL="+LossLimit;
while(true)
{
new_ticket=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red);
gle=GetLastError();
sER=" error="+gle+" "+ErrorDescription(gle);
if(gle==0)
{
Print("CLOSE SELL "+myInfo + sTK + sSL + sTP + sPM + sLL);
break;
}
else
{
Print("-----ERROR----- CLOSE SELL "+myInfo+ sER +" Ask="+Ask+ sTK + sSL + sTP + sPM + sLL);
RefreshRates();
Sleep(500);
}
loopcount++;
if(loopcount>maxloop)
{
Print("-----ERROR----- Giving up on closing SELL order");
//return(gle);
}
}//while
}
double SetPoint()
{
double mPoint;
if (Digits < 4)
mPoint = 0.01;
else
mPoint = 0.0001;
return(mPoint);
}
void error_handling()
{
error=GetLastError();
Print("order execution/modification has failed with error #",error);
//Error handling
switch(error)
{
case 4: //Trade server is busy
case 8: //Too frequent requests
case 128: //Trade timeout
case 137: //Broker is busy
case 141: //Too many requests
case 146: //Trade context is busy
Sleep(10000); // Sleep 10 sec
RefreshRates(); // refresh price data
break;
case 9: //Malfunctional trade operation
case 129: // Invalid price
case 130: // Invalid stops
case 135: // Price changed
case 138: //Requote
RefreshRates(); // refresh price data
break;
case 6: //No connection with trade server
case 136: // Off quotes
while(RefreshRates()==false) // Waiting for the tick to come... before new tick
Sleep(1); // Delay in the cycle
break;
}
ResetLastError();
}
ভাই এগুলো মাথায় ঢুকবে না আমার
দেখি কাল থেকে ফোটোগ্রাফি, রেসিপি, গল্প, কবিতা এসব পোস্ট করবো । কোডিং এর তেমন অডিয়েন্স নেই স্টিমিট -এ ।
জি ভাই সুন্দর সুন্দর গল্প আমাদের মাঝে শেয়ার করবেন আমার পড়বো
পুরাই মাথা নষ্ট, দাদা সব মাথার উপর দিয়ে গেছে, মনে হচ্ছে মাথা আমার ঘুরতাছে। হবে না আমার দিয়ে এগুলো একদম হবে না।
Metaquote Language কিন্তু সোজা, প্রোটোটাইপ সিনট্যাক্স সবই php এর মতো ।
ভাই। কোথায় কোডটা পেস্ট করলে কাজ করবে!? metratrader 5 user.
হবে না, এটা MT4 ছাড়া কাজ করবে না ।
MT4 এ ই বা কোথায় পেস্ট করব?
Install MQ4 Editor
ভাই পুরোটাই মাথার উপর দিয়ে গেল। কিভাবে এতো কিছু আওত্তায় নিয়ে এসেছেন ভাই?. আমার সত্যি মাথা ঘুরছে,,
কঠিন ,কিছু না , সেগমেন্ট এ ভাগ ভাগ করে প্রোগ্রামিং করি
আমি ও শিখার চেস্টা করবো ভাই। ধন্যবাদ আপনাকে।
কিছু কোডিং বুঝতেছি আবার কিছু মাথার উপর দিয়ে যাচ্ছে। প্রোগ্রামিং শুরু করলে হয়তো আপনার মতো কোডিং করতে পারবো ভাইয়া!
আসলে এটা তো MetaQuotes Language
ভাই দেখতে অনেকটা অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর মত লাগতেছে। যাই হোক আমার কাছে ইরার হ্যান্ডেলিং টা ভালো লাগছে। আপনার কনসেপ্টটা অনেক ক্লিয়ার বুঝা যাচ্ছে। যারা এর ব্যবহার জানবে তারা সঠিকভাবে আপনার এই সম্পূর্ণ কোড কে কাজে লাগাতে সক্ষম হবে।
দাদা পোস্ট টা খুবই মূল্যবান। তবে এটা দেখতে অনেক বড় লাগছে। তাই আমার কাছে জটিল মনে হচ্ছে। আমার মনে হয় ছোট ছোট কোড গুলো আগে শিখতে হবে। ক্রমান্বয়ে বড় কোডের দিকে অগ্রসর হওয়াটা স্বাভাবিক হবে আমার কাছে।আশা করছি আমাদের জন্য প্রতি সপ্তাহেই একটা করে html এর পোস্ট করবেন।
অনেক শুভেচ্ছা রইলো 😍
Hi my brother @rme how are you there,
দাদা আমার একসময় ফরেক্স ট্রেডিং করার খুব ইচ্ছা ছিল কিন্তু ব্যাপারটা বুঝলামনা এবং এর সংশ্লিষ্ট ঝুঁকির ব্যাপারে চিন্তা করে পরে এ থেকে বিরত হওয়া। কিন্তু আমি আপনার মেধার কথা চিন্তা করে হতবাক হয়ে যাচ্ছি। একটা মানুষ একসঙ্গে কিভাবে এত কিছু করতে পারে।আমার প্রোগ্রামিং শেখার কিছুটা ইচ্ছা আছে। কিন্তু আপনি যেটা দিয়েছেন এটা সম্পূর্ণ আমার বোঝার বাইরে। হয়তো আস্তে আস্তে শিখতে পারবো কিছু। ধন্যবাদ দাদা।
আমি এই পোস্টটি মেশিনের ভাষা সম্পর্কে বুঝতে পারি না। তিনি তিনি
I don't understand this post about machine language. He he he
ভাই পুরোটাই মাথার উপর দিয়ে গেছে।