Jump to content

Cable Run from Profitable FX


Recommended Posts

Let me know which version you're trying to modify so I can help you better.. I assume it's _OK_24h ?

 

For the CloseAllTrades code, you'll need to add an extra brace at the end. There should be a closing flower bracket } for every open flower bracket { . Make it like this:

 

double Pips = TotalProfit(Magic);

if (Pips >= MinProfit){

while(MyOrdersTotal(Magic) != 0) {

CloseAllTrades(0, Magic);

DeletePendingOrders(Magic);

}

}

 

 

About the other lines you put up, those are just meant for displaying info on your chart. You can add or leave those ActiveTime lines as they are... it's just good to know what the robot is up to :-)

Edited by teknomage
Link to comment
Share on other sites

  • Replies 921
  • Created
  • Last Reply

Top Posters In This Topic

Yep it's ok 24hr. I actually copied and pasted the code from this thread into the MQ4 file in my initial attempts. Is it better if I manually input each character?

Man... thanks for your help... I really appreciate it! I just put up those other lines so you could tell where I was inside the file.

Awesome.

P.S Is it ok to change the name of the MQ4 file from Cable Run larikan ok 24 HR to something a little different so I can tell which is which?

Edited by tomislav
Link to comment
Share on other sites

No worries, mate. I too struggled as a beginner a while ago :-) From the point of view of the code, it doesnt matter if you copy-paste it... but if you want to slowly get a hang of coding in MQL4, i'd suggest you type it out and try to understand the code as you go along. If you still have trouble with the code or if you want to make minor alterations, feel free to p.m. me.

 

And yes, sure you can name it anything else.. just do the usual File->Save As, give it a different name and then make sure you try compiling it, otherwise it wont appear inside your MT4.

Link to comment
Share on other sites

hi teknomage, where can i find a list of functions for mt4, after having a quick look at cable run it seems to run on doji, please correct me if i am wrong.

double Pips = TotalProfit(Magic); is double, double number? so pips is equal to total profit?

if (Pips >= MinProfit){ pips is greater than or equal to mini?

while(MyOrdersTotal(Magic) != 0) { is this a do while loop? and magic number is returned?

CloseAllTrades(0, Magic); close all trades, not sure what the parrameter magic means? 0 means all trades?

DeletePendingOrders(Magic); all orders delete, with the parrameter magic, is, magic a variable

that has a number stored, or is it a number that is returned on the ui.

} i am new to this, as tom showed me some ea's and they seem to work in the correct enviorment. just want to know if i am reading it right.

Link to comment
Share on other sites

Hi mrcrow, here you go: http://docs.mql4.com/

 

You read most of the code right, but no, it doesnt run on Doji. The candlestick analyser is just for display purposes on the chart, which is where you might see DojiAtBottom or BullishEngulfing, etc etc

 

And about this line : while(MyOrdersTotal(Magic) != 0) {

The While loop doesnt return the MagicNumber... Magic is used by the function MyOrdersTotal to check if we still have any orders open. What this simply means is that the loop will try to continually close all open and pending trades until none are left.

Link to comment
Share on other sites

ATTENTION for all those who're using ok_24H version! This is regarding the TotalProfit function and how it behaves based on the ProfitMode. When i looked at the code closely, i noticed that MinProfit is set to 1.5 in the 24H version, while the default for ProfitMode is set to 3, which counts the Total Profit in DOLLARS not pips. These default settings ASSUME that your lot size is always 0.1, but this will not make sense, especially if you choose to vary your lot sizes. If you wish to continue using the default settings (i.e. ProfitMode=3), then please use your common sense and set MinProfit accordingly, keeping FirstLot in mind!

 

Personally, I'd rather use ProfitMode=2, since this counts the sum of the total PIPS gained, irrespective of the lot size I use. Since we're focusing on GBPUSD (or for that matter, any XXX/USD pair), Total Pips is more than enough for me. If you use ProfitMode=2, then set MinProfit to 15 (which was the original setting... although I have seen some ppl here using MinProfit=5 successfully also)

 

Don't set ProfitMode=0 or 1... it's unnecessary, IMHO. If anyone wants to know why, go through the code first and then question me.

 

OK, I need to take a break NOW

Edited by teknomage
Link to comment
Share on other sites

Since last week, my FF browser kept crashing like nobody bz .. still not solving, .. anyway, back to our topic of CR..

We discussed abt good features & strategies need in CR that I keep in short as for now..

 

- hidden TP (X000 pips ) & SL (200), we not suppose to TP any of open winning positions (NO!), they are needed to compensate losing end of open trades. When Pips >= MinProfit, all the +/- positions MUST be closed immediately using my while loop.. I suggest 200 pips SL or more depends on your equity in case you have no choice but need to slam some too negative positions using the EA.

- dynamic magic ID within-range generation, make sure debug the code I shared, ( i found little bugs) as when the magic # attached to each order not within the range, the EA lose control to them (not able to close these orders).. this is damn good feature to hopefully conFUSE the broker.

- ATR_pips although very useful to determine ranging/quiet market to enter the trades, but storm comes after the quiet..especially 8-12pm NY session.. i have up to 13 fury open trades up to -1000 pips while hit by 29-Sep, 10:00am USD GDP news.. , luckily i was able to escape with + pips.. be safe is having the EA off during this critical hrs..

you may want to write some logic like below to prevent the EA to open more buy/sell limit when you were in dilemma of opening trades more then 5 ?

if (MyOrdersTotalActive() >= 5) return(0); //to prevent the EA to open more buy/sell limit ?

so, the precaution is NOT to have multiply lots like 0.1, 0.2, 0.4 or increment lot 0.10,0.11,0.12,0.13 that some folks had suggested before .. that will blow your equity anytime ! You can have larger fixed lot size during Asian/Euro Session & maybe more than 1 instance, but be play safe to switch back to smallest lot, 1 instance during NY session.

- I also mentioned abt monitoring DIFF of your local PC time vs your Broker server time after taken consideration adding the offset.. the delays shouldn't more than 100s.. if yes, do the sendmail features..

 

 

- Print out all your vital variables on screen useful for displaying purposes & debugging logic flaws as well ..

this EA is heavily managing its range of magic # on subroutines like TotalProfit(), MyOrdersTotalActive() or MyOrdersTotal()...

like case if dynamic magic # not managing its positions properly, MyOrdersTotalActive() or MyOrdersTotal() will not show the correct qty of trades..

 

Comment("\n\n\n******* CABLERUN COLLECTING $$ WEALTH $$ IN ACTION *********"

 

+"\n"

+" M15 ATR PrePips2 = ", ATRPrePips2," for period of ",ATRPeriod2," (",ATRDnLimit1,"<=x<=",ATRUpLimit1,") or (",ATRDnLimit2,"<=x<=",ATRUpLimit2,") or (",ATRDnLimit3,"<=x<=",ATRUpLimit3,")"

+"\n"

+" M15 ATR PrePips1 = ", ATRPrePips1," for period of ",ATRPeriod1," (",ATRDnLimit1,"<=x<=",ATRUpLimit1,") or (",ATRDnLimit2,"<=x<=",ATRUpLimit2,") or (",ATRDnLimit3,"<=x<=",ATRUpLimit3,")"

+"\n"

+" M15 ATR Pips = ", ATRPips," for period of 0 (",ATRDnLimit1,"<=x<=",ATRUpLimit1,") or (",ATRDnLimit2,"<=x<=",ATRUpLimit2,") or (",ATRDnLimit3,"<=x<=",ATRUpLimit3,")"

+"\n"

+" Total Pips = ", DoubleToStr(Pips,0)

+"\n"

+" Active Orders = ", MyOrdersTotalActive()

+"\n"

+" Total Orders = ", MyOrdersTotal()

+"\n"

+" Magic = ", Magic, " (",MagicRangeLow," <= Magic <= ",MagicRangeHigh,")"

+"\n"

+" Active until = ", ActiveTime

+"\n"

+" PriceComment = "+ PriceComment

+"\n"

+" CandleStick Pattern = ", CandleStick_Analyzer()

+"\n"

+" Local Current Time = ", Local_Time

+"\n"

+" Fx Server Time = ", Server_Time

+"\n"

+" DIFF = ", Diff," seconds" );

 

 

What else more ? that's the thoughts of the week .. basically as mentioned above should be needed as a typically scalper EA like CR ..

Azam, clevereto all folks that had been following with this threads (not active nowadays, i dun know why) should be earning a lot happy pips by now.

So, i wish all happy pips to all by now.

 

( I consider this is my last comment on this thread )

Link to comment
Share on other sites

...Its my first time approach on coding but EA Generator works just nice and quick for the basics ;)...

 

...Will share later as it is still too raw....

Good effort Expat1967! I've been trying too in EA Generator but it keep opening new buy/sell limits every new bar. Do you know how to have it base it on the price you first start the EA please?

 

Many thanks in advance,

 

John

Link to comment
Share on other sites

Here we go...

 

Attached is, lets call it Indo Run. The EA is still raw and needs further trimming. At least, we can try the basics and filter options... Thus, appreciating your constructive feedback ;)

 

Edit: You might focus on the 24h setup first. The timed version does not place the Pending Orders correctly while starting and having open trades.

 

http://www.multiupload.com/Q7YAPZ5C6S

 

This version:

- Individual Order TP and SL

- Cumulated SL based on Currency

- Cumulated TP based on Currency

- Day Filter

- Time Filter

- Timed Stop out of orders

- ATR on/off with variuos switches below to test (closing of pending orders/buy or sell orders...)

- Fully backtestable on Every Tick Mode/Control Mode can be used for indication

- Essential Infos on Chart e.g. Filter and Trading Status

- Emergency closing of all open orders via manuell switch

 

Next Version:

- Strategy Variations

- Random Magic Number

- EA Fine Tuning/Optimization and Code cleanup;)

- Revised Pending Order Strategy

- Tick delay monitoring/logging

- Filters for processing safety

 

 

extern string EAName = ""; //Comment for your orders, you might better leave it empty ;)

extern int Magic = 128738; //Order Magic Number

//extern bool UseRandomMagic = false; // To be integrated!!! Switched the Random Magic Number on/off

//extern int RandomMagicLower = 100000; //Sets the lower Magic Number boundry

//extern int RandomMagicUpper = 200000; //Sets the upper Magic Number boundry

extern bool Monday = true;

extern bool Tuesday = true;

extern bool Wednesday = true;

extern bool Thursday = true;

extern bool Friday = true;

extern bool Saturday = false;

extern bool Sunday = false;

extern bool Trading24h = true;

extern int HoursFrom = 20; //Start Trading Hour in GMT

extern int HoursTo = 13; //Stop Trading Hour in GMT

extern double ProfitAllOrders = 12; //Cumulated Sell Order Take Profit in Account Currency !!! Divide by 10 if using 0.01 Lotsize => 1.2

extern int OpenOrdersLimit = 0; //Limits the number of open orders + 2 Pending Orders

extern int SingleOrderSL = 0; //Stop Loss of each individual Order in Pips

extern int SingleOrderTP = 0; //Take Profit of each individual Order in Pips

extern int PriceOffset = -17; //Step/Gap in Pips where Pending Order is placed to current price

extern double Lots = 0.1;

extern bool TimedStop = false; //Switches Time to close all open orders once a day on/off

extern int StopHour = 14; //Timed Stop Hour in GMT

extern int StopMinute = 0; //Timed Stop Minute

extern bool ATROn = true; //Switches ATR Filter on/off

extern int ATR_Period = 7;

//extern int ATRPipsLimit = 17; //not referenced...

extern double ATRPeriod1 = 3.0;

extern double ATRPeriod2 = 5.0; //or 4

extern double ATRUpLimit1 = 13.0;

extern double ATRDnLimit1 = 7.0;

extern double ATRUpLimit2 = 21.0;

extern double ATRDnLimit2 = 16.0;

extern double ATRUpLimit3 = 28.0;

extern double ATRDnLimit3 = 25.0;

extern bool DeletePOATR = true; // Switch to delete all pending orders while ATR is active

extern bool DeleteOrderATR = false; // Switch to close all open orders while ATR is active (disabled due to current strategy set

extern int Slippage=4;

extern bool LossStopOutOn = false; //Switches Cumulated Loss Stop Out On on/off

extern int LossStopOut = -5000; // Cumulated Loss in Account Currency which will close all open orders

extern bool CloseAllTrades = false; // Closes all open orders

 

2010 Backtest on Control Points! Better use Every Tick mode but that will take some time...

http://img816.imageshack.us/img816/2779/strategytester.gif

 

Initial deposit 50000.00

Total net profit 7327.68 Gross profit 15344.10 Gross loss -8016.41

Profit factor 1.91 Expected payoff 8.75

Absolute drawdown 3579.63 Maximal drawdown 5134.56 (9.96%) Relative drawdown 9.96% (5134.56)

 

Total trades 837 Short positions (won %) 407 (70.52%) Long positions (won %) 430 (67.67%)

Profit trades (% of total) 578 (69.06%) Loss trades (% of total) 259 (30.94%)

Largest profit trade 366.74 loss trade -423.88

Average profit trade 26.55 loss trade -30.95

Maximum consecutive wins (profit in money) 11 (1144.39) consecutive losses (loss in money) 11 (-1215.65)

Maximal consecutive profit (count of wins) 1144.39 (11) consecutive loss (count of losses) -1215.65 (11)

Average consecutive wins 4 consecutive losses 2

 

Cheers

Edited by expat1967
Link to comment
Share on other sites

@ Muruku: Thank you for all your contribution to the development of this robot!! You've inspired quite of a few of us here to take this baby further..

 

 

@ expat1967: Neat code, mate!

One thing though about ATR_Pips (not really sure if you purposely wanted it this way or not): In the ATRPrePips lines, you haven't specified ATR_Period in the parameters. If the user sets ATR_Period to something other than 7 (say 5), then ATRPips will calculate the ATR using 5, while ATRPrePips1 & 2 will be calculated using the default of the ATR_Pips indicator (which is either 14 or 7, depending on whether the user has the original ATR_Pips indi or if he got it from this thread respectively). Isnt it better to just use ATR_Period in all 3 lines? Just my 2 cents...

 

By the way, i notice your code uses TimeLocal. During a backtest, MT4 will either use your PC's local time at THAT moment when you were backtesting OR it'll use the broker's time (i really have yet to confirm this), but in the latter case, the backtest will only be valid for someone who lives in the same timezone as their broker. If I'm wrong, please correct me...

 

 

 

@ Mrcrow, since you're new here, just FYI... you can thank someone by clicking the Thanks icon on that person's post. It's called givin' KUDOs, hehe

teknomage thanks!
Edited by teknomage
Link to comment
Share on other sites

Here we go...

 

Attached is, lets call it Indo Run. The EA is still raw and needs further trimming. At least, we can try the basics and filter options... Thus, appreciating your constructive feedback ;)

 

Edit: You might focus on the 24h setup first. The timed version does not place the Pending Orders correctly while starting and having open trades.

 

http://www.multiupload.com/Q7YAPZ5C6S

 

This version:

- Individual Order TP and SL

- Cumulated SL based on Currency

- Cumulated TP based on Currency

- Day Filter

- Time Filter

- Timed Stop out of orders

- ATR on/off with variuos switches below to test (closing of pending orders/buy or sell orders...)

- Fully backtestable on Every Tick Mode/Control Mode can be used for indication

- Essential Infos on Chart e.g. Filter and Trading Status

- Emergency closing of all open orders via manuell switch

 

Next Version:

- Strategy Variations

- Random Magic Number

- EA Fine Tuning/Optimization and Code cleanup;)

- Revised Pending Order Strategy

- Tick delay monitoring/logging

- Filters for processing safety

 

 

extern string EAName = ""; //Comment for your orders, you might better leave it empty ;)

extern int Magic = 128738; //Order Magic Number

//extern bool UseRandomMagic = false; // To be integrated!!! Switched the Random Magic Number on/off

//extern int RandomMagicLower = 100000; //Sets the lower Magic Number boundry

//extern int RandomMagicUpper = 200000; //Sets the upper Magic Number boundry

extern bool Monday = true;

extern bool Tuesday = true;

extern bool Wednesday = true;

extern bool Thursday = true;

extern bool Friday = true;

extern bool Saturday = false;

extern bool Sunday = false;

extern bool Trading24h = true;

extern int HoursFrom = 20; //Start Trading Hour in GMT

extern int HoursTo = 13; //Stop Trading Hour in GMT

extern double ProfitAllOrders = 12; //Cumulated Sell Order Take Profit in Account Currency !!! Divide by 10 if using 0.01 Lotsize => 1.2

extern int OpenOrdersLimit = 0; //Limits the number of open orders + 2 Pending Orders

extern int SingleOrderSL = 0; //Stop Loss of each individual Order in Pips

extern int SingleOrderTP = 0; //Take Profit of each individual Order in Pips

extern int PriceOffset = -17; //Step/Gap in Pips where Pending Order is placed to current price

extern double Lots = 0.1;

extern bool TimedStop = false; //Switches Time to close all open orders once a day on/off

extern int StopHour = 14; //Timed Stop Hour in GMT

extern int StopMinute = 0; //Timed Stop Minute

extern bool ATROn = true; //Switches ATR Filter on/off

extern int ATR_Period = 7;

//extern int ATRPipsLimit = 17; //not referenced...

extern double ATRPeriod1 = 3.0;

extern double ATRPeriod2 = 5.0; //or 4

extern double ATRUpLimit1 = 13.0;

extern double ATRDnLimit1 = 7.0;

extern double ATRUpLimit2 = 21.0;

extern double ATRDnLimit2 = 16.0;

extern double ATRUpLimit3 = 28.0;

extern double ATRDnLimit3 = 25.0;

extern bool DeletePOATR = true; // Switch to delete all pending orders while ATR is active

extern bool DeleteOrderATR = false; // Switch to close all open orders while ATR is active (disabled due to current strategy set

extern int Slippage=4;

extern bool LossStopOutOn = false; //Switches Cumulated Loss Stop Out On on/off

extern int LossStopOut = -5000; // Cumulated Loss in Account Currency which will close all open orders

extern bool CloseAllTrades = false; // Closes all open orders

 

2010 Backtest on Control Points! Better use Every Tick mode but that will take some time...

http://img816.imageshack.us/img816/2779/strategytester.gif

 

Initial deposit 50000.00

Total net profit 7327.68 Gross profit 15344.10 Gross loss -8016.41

Profit factor 1.91 Expected payoff 8.75

Absolute drawdown 3579.63 Maximal drawdown 5134.56 (9.96%) Relative drawdown 9.96% (5134.56)

 

Total trades 837 Short positions (won %) 407 (70.52%) Long positions (won %) 430 (67.67%)

Profit trades (% of total) 578 (69.06%) Loss trades (% of total) 259 (30.94%)

Largest profit trade 366.74 loss trade -423.88

Average profit trade 26.55 loss trade -30.95

Maximum consecutive wins (profit in money) 11 (1144.39) consecutive losses (loss in money) 11 (-1215.65)

Maximal consecutive profit (count of wins) 1144.39 (11) consecutive loss (count of losses) -1215.65 (11)

Average consecutive wins 4 consecutive losses 2

 

Cheers

 

Dear expat1967,

 

Thank you expat1967 ! you are so generous to share the EA!! And thanks again, we are waiting for your time filter and random magic number version!! Thanks

Link to comment
Share on other sites

@ Muruku: Thank you for all your contribution to the development of this robot!! You've inspired quite of a few of us here to take this baby further..

 

 

@ expat1967: Neat code, mate!

One thing though about ATR_Pips (not really sure if you purposely wanted it this way or not): In the ATRPrePips lines, you haven't specified ATR_Period in the parameters. If the user sets ATR_Period to something other than 7 (say 5), then ATRPips will calculate the ATR using 5, while ATRPrePips1 & 2 will be calculated using the default of the ATR_Pips indicator (which is either 14 or 7, depending on whether the user has the original ATR_Pips indi or if he got it from this thread respectively). Isnt it better to just use ATR_Period in all 3 lines? Just my 2 cents...

 

By the way, i notice your code uses TimeLocal. During a backtest, MT4 will either use your PC's local time at THAT moment when you were backtesting OR it'll use the broker's time (i really have yet to confirm this), but in the latter case, the backtest will only be valid for someone who lives in the same timezone as their broker. If I'm wrong, please correct me...

 

ALso, one last thing: why have the pending orders been set to expire after only 1 hour? int expire = TimeCurrent() + 60 * 0;

In this case, wont the pending orders expire and then new ones be opened again at the same prices??

 

 

 

 

@ Mrcrow, since you're new here, just FYI... you can thank someone by clicking the Thanks icon on that person's post. It's called givin' KUDOs, hehe

 

Yeap, as said the EA is still raw and sure have some bugs to be ironed. However lets get started somewhere.

 

The time setting attaches to the broker time. Can be automated later. Anyway, I mentioned already not to use the time (counts as well for the weekday filter). Need to change the pending order placement first.

 

The pending orders do not expire ...+60*0 is 0. For the ATR Period I did use your code and it works fine as per my checks double ATRPips =iCustom(NULL,PERIOD_M15,"ATR_Pips",ATR_Period,0,0);// by teknomage

 

I have made a brief optimization run just now and can tweak it to a Profitfactor of 5!!! and DD of 3% (5k start account)!!! Just now I am trying a 10 year backtest an it looks great so far over the first 6 years ;)

 

Oh, still a long way to go with this EA. Sure with all the support here we can make something happen.

 

Cheers

Link to comment
Share on other sites

Yeap, as said the EA is still raw and sure have some bugs to be ironed. However lets get started somewhere.

 

The time setting attaches to the broker time. Can be automated later. Anyway, I mentioned already not to use the time (counts as well for the weekday filter). Need to change the pending order placement first.

 

The pending orders do not expire ...+60*0 is 0. For the ATR Period I did use your code and it works fine as per my checks double ATRPips =iCustom(NULL,PERIOD_M15,"ATR_Pips",ATR_Period,0,0);// by teknomage

 

I have made a brief optimization run just now and can tweak it to a Profitfactor of 5!!! and DD of 3% (5k start account)!!! Just now I am trying a 10 year backtest an it looks great so far over the first 6 years ;)

 

Oh, still a long way to go with this EA. Sure with all the support here we can make something happen.

 

Cheers

 

Hi expat,

The backtest goes almost forever... (every tick's based). But I do really really think that's a good idea to add in the code some logging function - it must write in a file every N minutes (customizable) some info like: balance, equity, P/L, free, used margin, math P/L / equity.... etc

that will give EXACT info of the DD

Link to comment
Share on other sites

Sounds great! Let me know if you'd like any help with the coding...

 

You are very welcome to help. Having the EA structured in Function Blocks should make it easy to coordinate.

I am focusing on getting the pending order Strategy optimized and the day/hour filters sorted.

 

If you want you can look into the Random Magic Number Function:

 

My basic idea: To check and change every hour if no Buy/Sell Order and Pending Order exists to support the 24h setup, e.g. while ATR is filtering. If, then change Magic Number. I guess the Random Code by muruku can be simplified towards this setup. The once an hour function is below as well, nut no need to worry about. If you need local variables just define them within the RandomMagicNumber() itself. The RandomMagicNumber() should return e.g. Magic=182738 accordingly. Let me consolidate it then in the overall code with the required functions call to and from.

 

Global Variables to consider (some not yet in the shared version 1.2), though you might not need to worry about that functions:

bool SellOrderExists = false;

bool BuyOrderExists = false;

bool BuyPOExists = false;

bool SellPOExists = false;

extern int Magic = 128738; //Order Magic Number

extern bool UseRandomMagic = false; // To be integrated!!! Switched the Random Magic Number on/off

extern int RandomMagicLower = 100000; //Sets the lower Magic Number boundry

extern int RandomMagicUpper = 200000; //Sets the upper Magic Number boundry

 

void OnceAnHour()

{

int datetime800 = TimeLocal();

int hour0 = TimeHour(datetime800);

int minute0 = TimeMinute(datetime800);

if (hour0 != HourOnce && minute0 == 1)

{

HourOnce = hour0;

RandomMagicNumber();

 

}

}

 

void RandomMagicNumber() // by teknomage

{

 

}

 

Cheers

Link to comment
Share on other sites

tomislav, some say that Profit Factor = Gross Profit / absolute Gross Loss , but I think the correct formula is:

(profit - commission)/(max drawdown + commission)

 

The higher the Net Profit and the lower the Drawdown, the better the Profit Factor will be...

 

i've calculated and come up with it correctly...

profit factor = gross profit / gross loss

... basically a win-loss ratio. because pf 1.00 means your money is what you started with.

Link to comment
Share on other sites

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...