Jump to content

Recommended Posts

Posted

Need a programmer for modifying 4 to 5 digits.

This is the BankingFX Diamond which works great.

But at the moment it works just with 4 digits brokers. Can someone modify so it works with 4 and 5 digits?

 

Thanks in advance.

 

Would be nice if someone can help.

 

Here is the file:

hxxp://sharebee.com/426baaee

 

Best regards

Posted

Re: Need a programmer for modifying 4 to 5 digits broker.

 

Should work test on demo first

 

//====================================

#property copyright " Banking FX Diamond "

#property link ""

#include <WinUser32.mqh>

//========================

extern string Broker = "------Broker Five or Four Digit------";

extern bool FiveDigitsBroker = true;

extern int MagicNumber = 9815756;

extern string Lots_Parameters = "Lots-Parameters";

extern double Lots = 0.1;

extern bool LotsOptimized = TRUE;

extern int Risk = 10;

extern int Maximum_Lots = 60;

extern int Slippage = 4; //works better at 2

extern int SlippageClose = 4; //works better at 2

extern double MaxSpread = 3.1; //works better at 5.1

extern double TakeProfit = 5.0;

extern string Server_Time = "Aviation Servertime from GMT (Greenwich Mean Time)";

extern int GMT = 2;

 

 

 

//========================

string gs_unused_76 = "BankingFX Diamond 15M";

 

int gi_88 = 22;

int gi_92 = 2;

int gi_96 = 50;

int ticket;

 

string gs_unused_128 = "Order-Parameters";

double gd_136 = 32.0;

 

bool gi_164 = FALSE;

 

bool gi_184 = TRUE;

bool gi_188 = TRUE;

int gi_192 = 60;

int gi_196 = 3;

int gi_200 = 140;

int gi_204 = 2;

int gi_208 = 170;

int gi_212 = 0;

int gi_216 = 200;

int gi_220 = 1;

int gi_224 = 240;

int gi_228 = 4;

extern string gs_unused_232 = "Market-Parameters";

bool gi_240 = TRUE;

extern int HoursStopped = 80; //works better at 40

string gs_unused_248 = "Volatility-Parameters";

bool gi_256 = FALSE;

double gd_260 = 0.001;

double gd_268 = 0.001;

double gd_276 = 0.0012;

int g_period_284 = 8;

double g_period_288 = 6.0;

double g_timeframe_296 = 15.0;

double gd_304 = 30.0;

double gd_312 = 70.0;

double gd_320 = 40.0;

double gd_328 = 60.0;

bool gi_336 = TRUE;

bool gi_340 = TRUE;

double g_minlot_344 = 0.0;

double g_maxlot_352 = 0.0;

int gi_360 = 0;

int g_leverage_364 = 0;

double g_lots_368;

double gd_376;

double _g_point;

int init() {

//========================

_g_point = Point;

if(FiveDigitsBroker)

{

if(Digits==4 || Digits==2)

if(MessageBox("You selected 5 digits broker but it seems to be 4 digits one! Please change FiveDigitsBroker = true to false. \nContinue?","Question", MB_YESNO|MB_ICONQUESTION)==IDNO) return(0);

_g_point = Point*10;

gd_376= _g_point;

//SpreadLimit*= 10;

Print("Platform Point is ", Point,"; we are using ",_g_point);

}

return(0);

}

 

int deinit() {

return (0);

}

 

int start() {

double ld_0;

double ld_8;

if (GMT == -24) {

gi_88 = 20;

gi_92 = 0;

}

if (GMT == -23) {

gi_88 = 21;

gi_92 = 1;

}

if (GMT == -22) {

gi_88 = 22;

gi_92 = 2;

}

if (GMT == -21) {

gi_88 = 23;

gi_92 = 3;

}

if (GMT == -20) {

gi_88 = 0;

gi_92 = 4;

}

if (GMT == -19) {

gi_88 = 1;

gi_92 = 5;

}

if (GMT == -18) {

gi_88 = 2;

gi_92 = 6;

}

if (GMT == -17) {

gi_88 = 3;

gi_92 = 7;

}

if (GMT == -16) {

gi_88 = 4;

gi_92 = 8;

}

if (GMT == -15) {

gi_88 = 5;

gi_92 = 9;

}

if (GMT == -14) {

gi_88 = 6;

gi_92 = 10;

}

if (GMT == -13) {

gi_88 = 7;

gi_92 = 11;

}

if (GMT == -12) {

gi_88 = 8;

gi_92 = 12;

}

if (GMT == -11) {

gi_88 = 9;

gi_92 = 13;

}

if (GMT == -10) {

gi_88 = 10;

gi_92 = 14;

}

if (GMT == -9) {

gi_88 = 11;

gi_92 = 15;

}

if (GMT == -8) {

gi_88 = 12;

gi_92 = 16;

}

if (GMT == -7) {

gi_88 = 13;

gi_92 = 17;

}

if (GMT == -6) {

gi_88 = 14;

gi_92 = 18;

}

if (GMT == -5) {

gi_88 = 15;

gi_92 = 19;

}

if (GMT == -4) {

gi_88 = 16;

gi_92 = 20;

}

if (GMT == -3) {

gi_88 = 17;

gi_92 = 21;

}

if (GMT == -2) {

gi_88 = 18;

gi_92 = 22;

}

if (GMT == -1) {

gi_88 = 19;

gi_92 = 23;

}

if (GMT == 0) {

gi_88 = 20;

gi_92 = 0;

}

if (GMT == 1) {

gi_88 = 21;

gi_92 = 1;

}

if (GMT == 2) {

gi_88 = 22;

gi_92 = 2;

}

if (GMT == 3) {

gi_88 = 23;

gi_92 = 3;

}

if (GMT == 4) {

gi_88 = 0;

gi_92 = 4;

}

if (GMT == 5) {

gi_88 = 1;

gi_92 = 5;

}

if (GMT == 6) {

gi_88 = 2;

gi_92 = 6;

}

if (GMT == 7) {

gi_88 = 3;

gi_92 = 7;

}

if (GMT == 8) {

gi_88 = 4;

gi_92 = 8;

}

if (GMT == 9) {

gi_88 = 5;

gi_92 = 9;

}

if (GMT == 10) {

gi_88 = 6;

gi_92 = 10;

}

if (GMT == 11) {

gi_88 = 7;

gi_92 = 11;

}

if (GMT == 12) {

gi_88 = 8;

gi_92 = 12;

}

if (GMT == 13) {

gi_88 = 9;

gi_92 = 13;

}

if (GMT == 14) {

gi_88 = 10;

gi_92 = 14;

}

if (GMT == 15) {

gi_88 = 11;

gi_92 = 15;

}

if (GMT == 16) {

gi_88 = 12;

gi_92 = 16;

}

if (GMT == 17) {

gi_88 = 13;

gi_92 = 17;

}

if (GMT == 18) {

gi_88 = 14;

gi_92 = 18;

}

if (GMT == 19) {

gi_88 = 15;

gi_92 = 19;

}

if (GMT == 20) {

gi_88 = 16;

gi_92 = 20;

}

if (GMT == 21) {

gi_88 = 17;

gi_92 = 21;

}

if (GMT == 22) {

gi_88 = 18;

gi_92 = 22;

}

if (GMT == 23) {

gi_88 = 19;

gi_92 = 23;

}

if (GMT == 24) {

gi_88 = 20;

gi_92 = 0;

}

Comment("Server Time: ", TimeToStr(TimeCurrent(), TIME_MINUTES));

if (Symbol() != "EURGBP" && Symbol() != "EURGBPm" && Symbol() != "EURGBPfx_1" && Symbol() != "EURGBP-fx") return;

double l_price_16 = TakeProfit;

if (gi_164 == TRUE) {

for (int l_pos_24 = 0; l_pos_24 < OrdersTotal(); l_pos_24++) {

OrderSelect(l_pos_24, SELECT_BY_POS, MODE_TRADES);

if (OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber) {

if (Bid >= OrderOpenPrice() + TakeProfit * gd_376) {

RefreshRates();

OrderClose(OrderTicket(), OrderLots(), Bid, SlippageClose, Orange);

Print("Virtual TP - Close Price: " + DoubleToStr(OrderClosePrice(), 4) + " Lots : " + DoubleToStr(OrderLots(), 2) + " Order Number : " + DoubleToStr(OrderTicket(), 0) +

" Profit : $ " + DoubleToStr(OrderProfit(), 2));

}

}

if (OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber) {

if (Ask <= OrderOpenPrice() - TakeProfit * gd_376) {

RefreshRates();

OrderClose(OrderTicket(), OrderLots(), Ask, SlippageClose, Orange);

Print("Virtual TP - Close Price: " + DoubleToStr(OrderClosePrice(), 4) + " Lots : " + DoubleToStr(OrderLots(), 2) + " Order Number : " + DoubleToStr(OrderTicket(), 0) +

" Profit : $ " + DoubleToStr(OrderProfit(), 2));

}

}

}

}

if (gi_188 == TRUE) {

for (int l_pos_28 = 0; l_pos_28 < OrdersTotal(); l_pos_28++) {

OrderSelect(l_pos_28, SELECT_BY_POS, MODE_TRADES);

if (OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber) {

if (TimeCurrent() - OrderOpenTime() > 60 * gi_192 && TimeCurrent() - OrderOpenTime() < 60 * gi_200 && Bid >= OrderOpenPrice() + gi_196 * gd_376) {

RefreshRates();

OrderClose(OrderTicket(), OrderLots(), Bid, SlippageClose, Orange);

Print("Prot. Level 1 - Close Price: " + DoubleToStr(OrderClosePrice(), 4) + " Lots : " + DoubleToStr(OrderLots(), 2) + " Order Number : " + DoubleToStr(OrderTicket(), 0) +

" Profit: $ " + DoubleToStr(OrderProfit(), 2));

}

if (TimeCurrent() - OrderOpenTime() > 60 * gi_200 && TimeCurrent() - OrderOpenTime() < 60 * gi_208 && Bid >= OrderOpenPrice() + gi_204 * gd_376) {

RefreshRates();

OrderClose(OrderTicket(), OrderLots(), Bid, SlippageClose, Orange);

Print("Prot. Level 2 - Close Price: " + DoubleToStr(OrderClosePrice(), 4) + " Lots : " + DoubleToStr(OrderLots(), 2) + " Order Number : " + DoubleToStr(OrderTicket(), 0) +

" Profit: $ " + DoubleToStr(OrderProfit(), 2));

}

if (TimeCurrent() - OrderOpenTime() > 60 * gi_208 && TimeCurrent() - OrderOpenTime() < 60 * gi_216 && Bid >= OrderOpenPrice() - gi_212 * gd_376) {

RefreshRates();

OrderClose(OrderTicket(), OrderLots(), Bid, SlippageClose, Orange);

Print("Prot. Level 3 - Close Price: " + DoubleToStr(OrderClosePrice(), 4) + " Lots : " + DoubleToStr(OrderLots(), 2) + " Order Number : " + DoubleToStr(OrderTicket(), 0) +

" Profit: $ " + DoubleToStr(OrderProfit(), 2));

}

if (TimeCurrent() - OrderOpenTime() > 60 * gi_216 && TimeCurrent() - OrderOpenTime() < 60 * gi_224 && Bid >= OrderOpenPrice() - gi_220 * gd_376) {

RefreshRates();

OrderClose(OrderTicket(), OrderLots(), Bid, SlippageClose, Orange);

Print("Prot. Level 4 - Close Price: " + DoubleToStr(OrderClosePrice(), 4) + " Lots : " + DoubleToStr(OrderLots(), 2) + " Order Number : " + DoubleToStr(OrderTicket(), 0) +

" Profit: $ " + DoubleToStr(OrderProfit(), 2));

}

if (TimeCurrent() - OrderOpenTime() > 60 * gi_224 && Bid >= OrderOpenPrice() - gi_228 * gd_376) {

RefreshRates();

OrderClose(OrderTicket(), OrderLots(), Bid, SlippageClose, Orange);

Print("Prot. Level 5 - Close Price: " + DoubleToStr(OrderClosePrice(), 4) + " Lots : " + DoubleToStr(OrderLots(), 2) + " Order Number : " + DoubleToStr(OrderTicket(), 0) +

" Profit: $ " + DoubleToStr(OrderProfit(), 2));

}

}

if (OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber) {

if (TimeCurrent() - OrderOpenTime() > 60 * gi_192 && TimeCurrent() - OrderOpenTime() < 60 * gi_200 && Ask <= OrderOpenPrice() - gi_196 * gd_376) {

RefreshRates();

OrderClose(OrderTicket(), OrderLots(), Ask, SlippageClose, Orange);

Print("Prot. Level 1 - Close Price: " + DoubleToStr(OrderClosePrice(), 4) + " Lots : " + DoubleToStr(OrderLots(), 2) + " Order Number : " + DoubleToStr(OrderTicket(), 0) +

" Profit: $ " + DoubleToStr(OrderProfit(), 2));

}

if (TimeCurrent() - OrderOpenTime() > 60 * gi_200 && TimeCurrent() - OrderOpenTime() < 60 * gi_208 && Ask <= OrderOpenPrice() - gi_204 * gd_376) {

RefreshRates();

OrderClose(OrderTicket(), OrderLots(), Ask, SlippageClose, Orange);

Print("Prot. Level 2 - Close Price: " + DoubleToStr(OrderClosePrice(), 4) + " Lots : " + DoubleToStr(OrderLots(), 2) + " Order Number : " + DoubleToStr(OrderTicket(), 0) +

" Profit: $ " + DoubleToStr(OrderProfit(), 2));

}

if (TimeCurrent() - OrderOpenTime() > 60 * gi_208 && TimeCurrent() - OrderOpenTime() < 60 * gi_216 && Ask <= OrderOpenPrice() + gi_212 * gd_376) {

RefreshRates();

OrderClose(OrderTicket(), OrderLots(), Ask, SlippageClose, Orange);

Print("Prot. Level 3 - Close Price: " + DoubleToStr(OrderClosePrice(), 4) + " Lots : " + DoubleToStr(OrderLots(), 2) + " Order Number : " + DoubleToStr(OrderTicket(), 0) +

" Profit: $ " + DoubleToStr(OrderProfit(), 2));

}

if (TimeCurrent() - OrderOpenTime() > 60 * gi_216 && TimeCurrent() - OrderOpenTime() < 60 * gi_224 && Ask <= OrderOpenPrice() + gi_220 * gd_376) {

RefreshRates();

OrderClose(OrderTicket(), OrderLots(), Ask, SlippageClose, Orange);

Print("Prot. Level 4 - Close Price: " + DoubleToStr(OrderClosePrice(), 4) + " Lots : " + DoubleToStr(OrderLots(), 2) + " Order Number : " + DoubleToStr(OrderTicket(), 0) +

" Profit: $ " + DoubleToStr(OrderProfit(), 2));

}

if (TimeCurrent() - OrderOpenTime() > 60 * gi_224 && Ask <= OrderOpenPrice() + gi_228 * gd_376) {

RefreshRates();

OrderClose(OrderTicket(), OrderLots(), Ask, SlippageClose, Orange);

Print("Prot. Level 5 - Close Price: " + DoubleToStr(OrderClosePrice(), 4) + " Lots : " + DoubleToStr(OrderLots(), 2) + " Order Number : " + DoubleToStr(OrderTicket(), 0) +

" Profit: $ " + DoubleToStr(OrderProfit(), 2));

}

}

}

}

if (!gi_164 && gi_184 == TRUE) {

for (int l_pos_32 = 0; l_pos_32 < OrdersTotal(); l_pos_32++) {

OrderSelect(l_pos_32, SELECT_BY_POS, MODE_TRADES);

ld_0 = NormalizeDouble(OrderTakeProfit() - OrderOpenPrice(), 7);

ld_8 = NormalizeDouble(OrderOpenPrice() - OrderTakeProfit(), 7);

if (OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber && ld_0 != TakeProfit * gd_376) OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() - gd_136 * gd_376, OrderOpenPrice() + TakeProfit * gd_376, 0, Green);

if (OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber && ld_8 != TakeProfit * gd_376) OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + gd_136 * gd_376, OrderOpenPrice() - TakeProfit * gd_376, 0, Red);

}

}

if (gi_256 == TRUE) {

if (iOpen(Symbol(), PERIOD_M5, 0) >= Ask + gd_260) return;

if (iOpen(Symbol(), PERIOD_M5, 0) <= Bid - gd_260) return;

if (iOpen(Symbol(), PERIOD_M5, 1) >= Ask + gd_268) return;

if (iOpen(Symbol(), PERIOD_M5, 1) <= Bid - gd_268) return;

if (iOpen(Symbol(), PERIOD_M5, 2) >= Ask + gd_276) return;

if (iOpen(Symbol(), PERIOD_M5, 2) <= Bid - gd_276) return;

}

if (Ask - Bid > MaxSpread / 10000.0) return (0);

g_minlot_344 = MarketInfo(Symbol(), MODE_MINLOT);

g_maxlot_352 = MarketInfo(Symbol(), MODE_MAXLOT);

g_leverage_364 = AccountLeverage();

gi_360 = MarketInfo(Symbol(), MODE_LOTSIZE);

g_lots_368 = MathMin(g_maxlot_352, MathMax(g_minlot_344, Lots));

if (LotsOptimized && Risk > 0.0) g_lots_368 = MathMax(g_minlot_344, MathMin(g_maxlot_352, NormalizeDouble(Risk / 100.0 * AccountFreeMargin() / g_minlot_344 / (gi_360 / 100), 0) * g_minlot_344));

g_lots_368 = MathMax(g_minlot_344, MathMin(g_maxlot_352, NormalizeDouble(g_lots_368 / g_minlot_344, 0) * g_minlot_344));

g_lots_368 = NormalizeDouble(g_lots_368, 1);

if (AccountFreeMargin() < Ask * g_lots_368 * gi_360 / g_leverage_364) {

Print("Low Account Balance. Lots: ", g_lots_368, " , Free Margin = ", AccountFreeMargin());

Comment("Low Account Balance. Lots = ", g_lots_368, " , Free Margin = ", AccountFreeMargin());

return;

}

if (g_lots_368 > Maximum_Lots) g_lots_368 = Maximum_Lots;

double l_irsi_36 = iRSI(NULL, g_timeframe_296, g_period_288, PRICE_CLOSE, 0);

double l_irsi_44 = iRSI(NULL, PERIOD_M1, 20, PRICE_CLOSE, 0);

double ld_52 = NormalizeDouble(iMA(NULL, 0, g_period_284, 0, MODE_SMA, PRICE_MEDIAN, 1), 4);

double ld_60 = NormalizeDouble(iMA(NULL, 0, g_period_284, 0, MODE_SMA, PRICE_MEDIAN, 1), 4);

if (GetLastError() == 138/* REQUOTE */ || GetLastError() == 146/* TRADE_CONTEXT_BUSY */) {

Print("get last error 138 or 146");

if (!ExistPosition()) {

Print("short and long = true");

gi_340 = TRUE;

gi_336 = TRUE;

}

}

if (gi_240 == TRUE)

if (ExistLastLoss()) return (0);

if (IsTradeTime()) {

if (DayOfWeek() == 0 || DayOfWeek() == 5) return (0);

if (DayOfWeek() == 1 && Hour() < gi_88) return (0);

if (!ExistPosition() && l_irsi_36 < gd_304 || l_irsi_44 < 36.0 && ld_52 >= Ask + 0.0002) {

if (gi_336) {

l_price_16 = 0;

if (!gi_164) l_price_16 = Ask + TakeProfit * gd_376;

ticket=OrderSend(Symbol(), OP_BUY, g_lots_368, Ask, Slippage, 0,0 , "Banking", MagicNumber, 0, Green);

 

if (ticket > 0)

{

OrderSelect(ticket, SELECT_BY_TICKET);

ticket=OrderModify(OrderTicket(), OrderOpenPrice(), Ask - gd_136 * gd_376, l_price_16, 0, Green);

}

 

gi_336 = FALSE;

gi_340 = TRUE;

}

}

if (!ExistPosition() && l_irsi_36 > gd_312 || l_irsi_44 > 64.0 && ld_60 <= Bid - 0.0002) {

if (gi_340) {

l_price_16 = 0;

if (!gi_164) l_price_16 = Bid - TakeProfit * gd_376;

ticket=OrderSend(Symbol(), OP_SELL, g_lots_368, Bid, Slippage, 0, 0, "Banking", MagicNumber, 0, Red);

if (ticket > 0)

{

OrderSelect(ticket, SELECT_BY_TICKET);

ticket=OrderModify(OrderTicket(), OrderOpenPrice(), Bid + gd_136 * gd_376, l_price_16, 0, Red);

}

gi_340 = FALSE;

gi_336 = TRUE;

 

}

}

if (l_irsi_36 < gd_328 && l_irsi_36 > gd_320) {

gi_340 = TRUE;

gi_336 = TRUE;

}

}

return (0);

}

 

bool IsTradeTime() {

if (gi_88 < gi_92 && TimeHour(TimeCurrent()) < gi_88 || TimeHour(TimeCurrent()) >= gi_92) return (FALSE);

if (gi_88 > gi_92 && (TimeHour(TimeCurrent()) < gi_88 && TimeHour(TimeCurrent()) >= gi_92)) return (FALSE);

if (gi_92 == 0) gi_92 = 24;

if (Hour() == gi_92 - 1 && Minute() >= gi_96) return (FALSE);

return (TRUE);

}

 

bool ExistPosition() {

bool li_ret_0 = FALSE;

for (int l_pos_4 = 0; l_pos_4 < OrdersTotal(); l_pos_4++) {

if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {

if (OrderType() == OP_BUY || OrderType() == OP_SELL) {

li_ret_0 = TRUE;

break;

}

}

}

}

return (li_ret_0);

}

 

bool ExistLastLoss() {

bool li_ret_0 = FALSE;

int l_hist_total_4 = OrdersHistoryTotal();

if (l_hist_total_4 > 0) {

if (OrderSelect(l_hist_total_4 - 1, SELECT_BY_POS, MODE_HISTORY) == TRUE) {

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {

if (OrderClosePrice() <= OrderStopLoss() && OrderType() == OP_BUY) {

RefreshRates();

if (TimeCurrent() - OrderOpenTime() < 3600 * HoursStopped) {

Print("System stopped ", HoursStopped, " hours after last loss");

Comment("Server Time: ", TimeToStr(TimeCurrent(), TIME_MINUTES),

"\n", "System stopped ", HoursStopped, " hours after last loss");

li_ret_0 = TRUE;

}

}

if (OrderClosePrice() >= OrderStopLoss() && OrderType() == OP_SELL) {

RefreshRates();

if (TimeCurrent() - OrderOpenTime() < 3600 * HoursStopped) {

Print("System stopped ", HoursStopped, " hours after last loss");

Comment("Server Time: ", TimeToStr(TimeCurrent(), TIME_MINUTES),

"\n", "System stopped ", HoursStopped, " hours after last loss");

li_ret_0 = TRUE;

}

}

}

}

}

return (li_ret_0);

}

 

//=========================

Posted

Re: Need a programmer for modifying 4 to 5 digits broker.

 

Not sure if it works.

Today I had trades with the old version of 4 digits broker. With the new version, which I installed on 2 different brokers, I had 0 trades on both.

Will see what happens tomorrow and day after tomorrow.

Posted

Re: Need a programmer for modifying 4 to 5 digits broker.

 

Not sure if it works.

Today I had trades with the old version of 4 digits broker. With the new version, which I installed on 2 different brokers, I had 0 trades on both.

Will see what happens tomorrow and day after tomorrow.

 

Try this: :-bd

 

BankingFX Diamond EURGBP 15m.mq4[/attachment:1mtju9tb]

Posted

Re: Need a programmer for modifying 4 to 5 digits broker.

 

Thanks to Pheniox again.

I tried your EA out again. I had to change something in the code because at my broker they use a different name. Not EURGBP. They use EURGBP..

After I modified it, it worked. But it was not your fault.

Thanks again for helping me out.

You did great job. :-bd

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...