Monday, 29 October 2012

SCRIPT EA HEDGING


SCRIPT EA HEDGING

Posted: May 15, 2011 in Expert Advisor
1
 
 
 
 
 
 
Rate This

Ini salah satu contoh coding EA Hedging silahkan dipelajari dan dioprex sesuai dengan sistem teman-teman…
#property copyright “Andi Goen”
#property link “http://facebook.com/andi.goen”
extern string email = “”;
extern string Pair = “USDJPY”;
extern double Lots = 0.1;
extern int TakeProfit = 30;
extern int StopLoss = 300;
extern bool ConstantStop = TRUE;
extern int Step1 = 30;
extern int TP1 = 30;
extern int Step2 = 30;
extern int TP2 = 30;
extern int Step3 = 30;
extern int TP3 = 30;
extern int Step4 = 30;
extern int TP4 = 30;
extern int Step5 = 30;
extern int TP5 = 30;
extern int Step6 = 30;
extern int TP6 = 30;
extern int Step7 = 30;
extern int TP7 = 30;
extern int Step8 = 30;
extern int TP8 = 30;
extern int Step9 = 30;
extern int TP9 = 30;
extern int Step10 = 30;
extern int TP10 = 30;
int g_slippage_192 = 3;
int gi_196 = 2;
extern int StartHour = 0;
extern int EndHour = 24;
int g_magic_208 = 111;
int gi_212 = D’01.01.2012 14:00′;
int gi_216 = 1533279600;
string gs_220 = “Silahkan Trading Live”;

int start() {
double l_price_0;
double l_price_8;
double l_price_16;
double l_lots_24;
double l_pips_32;
double l_pips_40;
if (Year() > 2012) {
Alert(“EA_Hedging Expaired”);
return (0);
}
int l_ticket_48 = 0;
int l_ticket_52 = 0;
int l_ticket_56 = 0;
int l_ticket_60 = 0;
int l_ticket_64 = 0;
int l_ticket_68 = 0;
double l_ord_lots_72 = 0;
double l_ord_lots_80 = 0;
double l_ord_open_price_88 = 0;
double l_ord_open_price_96 = 0;
double l_ord_takeprofit_104 = 0;
double l_ord_takeprofit_112 = 0;
double l_ord_lots_120 = 0;
double l_ord_lots_128 = 0;
double l_ord_lots_136 = 0;
double l_ord_lots_144 = 0;
double ld_152 = 0;
double ld_160 = 0;
for (int l_pos_168 = 0; l_pos_168 < OrdersTotal(); l_pos_168++) {
OrderSelect(l_pos_168, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_208) {
if (OrderType() == OP_BUY && l_ticket_48 < OrderTicket()) {
l_ord_lots_72 = OrderLots();
l_ord_open_price_88 = OrderOpenPrice();
l_ticket_48 = OrderTicket();
l_ord_takeprofit_112 = OrderTakeProfit();
if (OrderLots() == Lots) ld_152 = OrderOpenPrice() – StopLoss * Point;
}
if (OrderType() == OP_SELL && l_ticket_52 < OrderTicket()) {
l_ord_lots_80 = OrderLots();
l_ord_open_price_96 = OrderOpenPrice();
l_ticket_52 = OrderTicket();
l_ord_takeprofit_104 = OrderTakeProfit();
if (OrderLots() == Lots) ld_160 = OrderOpenPrice() + StopLoss * Point;
}
if (OrderType() == OP_BUYLIMIT) {
l_ticket_56 = OrderTicket();
l_ord_lots_136 = OrderLots();
}
if (OrderType() == OP_SELLLIMIT) {
l_ticket_60 = OrderTicket();
l_ord_lots_144 = OrderLots();
}
if (OrderType() == OP_BUYSTOP) {
l_ticket_64 = OrderTicket();
l_ord_lots_120 = OrderLots();
}
if (OrderType() == OP_SELLSTOP) {
l_ticket_68 = OrderTicket();
l_ord_lots_128 = OrderLots();
}
}
}
if (l_ticket_48 == 0) {
if (l_ticket_56 != 0) OrderDelete(l_ticket_56);
if (l_ticket_64 != 0) OrderDelete(l_ticket_64);
l_price_8 = Ask – StopLoss * Point;
if (StopLoss = StartHour && TimeHour(TimeCurrent()) = gi_212 && TimeCurrent() <= gi_216) OrderSend(Symbol(), OP_BUY, Lots, Ask, g_slippage_192, l_price_8, l_price_16, "EA_Hedging", g_magic_208, 0, Blue);
else Alert(gs_220);
}
}
if (l_ticket_52 == 0) {
if (l_ticket_60 != 0) OrderDelete(l_ticket_60);
if (l_ticket_68 != 0) OrderDelete(l_ticket_68);
l_price_8 = Bid + StopLoss * Point;
if (StopLoss = StartHour && TimeHour(TimeCurrent()) = gi_212 && TimeCurrent() <= gi_216) OrderSend(Symbol(), OP_SELL, Lots, Bid, g_slippage_192, l_price_8, l_price_16, "EA_Hedging", g_magic_208, 0, Red);
else Alert(gs_220);
}
}
if (l_ticket_48 != 0 && l_ticket_56 == 0) {
l_pips_40 = FinalStep(l_ord_lots_72);
l_pips_32 = FinalTP(l_ord_lots_72);
l_price_0 = l_ord_open_price_88 – l_pips_40 * Point;
if (ConstantStop == FALSE) l_price_8 = l_price_0 – StopLoss * Point;
else l_price_8 = ld_152;
if (StopLoss <= 0) l_price_8 = 0;
l_price_16 = l_price_0 + l_pips_32 * Point;
l_lots_24 = NormalizeDouble(2.0 * l_ord_lots_72, gi_196);
OrderSend(Symbol(), OP_BUYLIMIT, l_lots_24, l_price_0, g_slippage_192, l_price_8, l_price_16, "EA_Hedging", g_magic_208, 0, Blue);
}
if (l_ticket_52 != 0 && l_ticket_60 == 0) {
l_pips_40 = FinalStep(l_ord_lots_80);
l_pips_32 = FinalTP(l_ord_lots_80);
l_price_0 = l_ord_open_price_96 + l_pips_40 * Point;
if (ConstantStop == FALSE) l_price_8 = l_price_0 + StopLoss * Point;
else l_price_8 = ld_160;
if (StopLoss <= 0) l_price_8 = 0;
l_price_16 = l_price_0 – l_pips_32 * Point;
l_lots_24 = NormalizeDouble(2.0 * l_ord_lots_80, gi_196);
OrderSend(Symbol(), OP_SELLLIMIT, l_lots_24, l_price_0, g_slippage_192, l_price_8, l_price_16, "APS_Hedging", g_magic_208, 0, Red);
}
for (l_pos_168 = 0; l_pos_168 < OrdersTotal(); l_pos_168++) {
OrderSelect(l_pos_168, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderType() == OP_BUY && l_ticket_48 != 0 && OrderMagicNumber() == g_magic_208) {
if (ConstantStop == FALSE) l_price_8 = l_ord_open_price_88 – StopLoss * Point;
else l_price_8 = ld_152;
if (StopLoss <= 0) l_price_8 = 0;
if (l_ticket_48 != OrderTicket()) l_price_16 = l_ord_takeprofit_112;
else l_price_16 = OrderTakeProfit();
if (l_price_16 != OrderTakeProfit() || l_price_8 != OrderStopLoss()) OrderModify(OrderTicket(), OrderOpenPrice(), l_price_8, l_price_16, 0, CLR_NONE);
}
if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && l_ticket_52 != 0 && OrderMagicNumber() == g_magic_208) {
if (ConstantStop == FALSE) l_price_8 = l_ord_open_price_96 + StopLoss * Point;
else l_price_8 = ld_160;
if (StopLoss <= 0) l_price_8 = 0;
if (l_ticket_52 != OrderTicket()) l_price_16 = l_ord_takeprofit_104;
else l_price_16 = OrderTakeProfit();
if (l_price_16 != OrderTakeProfit() || l_price_8 != OrderStopLoss()) OrderModify(OrderTicket(), OrderOpenPrice(), l_price_8, l_price_16, 0, CLR_NONE);
}
}
return (0);
}
int FinalStep(double ad_0) {
ad_0 = NormalizeDouble(ad_0 / Lots, 0);
switch (ad_0) {
case 1.0:
return (Step1);
case 2.0:
return (Step2);
case 4.0:
return (Step3);
case 8.0:
return (Step4);
case 16.0:
return (Step5);
case 32.0:
return (Step6);
case 64.0:
return (Step7);
case 128.0:
return (Step8);
case 256.0:
return (Step9);
case 512.0:
return (Step10);
}
return (Step10);
}
int FinalTP(double ad_0) {
ad_0 = NormalizeDouble(ad_0 / Lots, 0);
switch (ad_0) {
case 1.0:
return (TP1);
case 2.0:
return (TP2);
case 4.0:
return (TP3);
case 8.0:
return (TP4);
case 16.0:
return (TP5);
case 32.0:
return (TP6);
case 64.0:
return (TP7);
case 128.0:
return (TP8);
case 256.0:
return (TP9);
case 512.0:
return (TP10);
}
return (TP10);
}

Sunday, 28 October 2012

Moving Average

Moving Average 
Author: MetaQuotes
Download: 
Moving Average.mq4 (4.6 Kb)

EA Moving Average menghasilkan signal perdagangan dengan menggunakan moving average. Membuka dan menutup posisi dilakukan ketika moving average memenuhi harga di bar yang baru terbentuk (indeks bar setara dengan 1). Ukuran lot akan dioptimalkan sesuai dengan algoritma khusus.

Money Management yang digunakan sangat sederhana, tetapi efektif, kontrol atas setiap volume posisi dilakukan tergantung pada hasil transaksi sebelumnya. Algoritma ini diimplementasikan oleh fungsi (LotsOptimized). Ukuran lot dasar dihitung berdasarkan risiko maksimum yang diijinkan:

Lot = NormalizeDouble (AccountFreeMargin () * MaximumRisk/1000.0, 1);

Parameter MaximumRisk menampilkan persentase risiko dasar untuk setiap transaksi. Biasanya memiliki nilai antara 0,01 (1%) dan 1 (100%). Sebagai contoh, jika free margin(AccountFreeMargin) setara dengan $ 20.500 dan aturan pengelolaan modal menggunakan resiko 2%, ukuran lot dasar adalah 20500 * 0,02 / 1000 = 0,41.

DecreaseFactor adalah sejauh mana ukuran lot akan berkurang setelah perdagangan yang tidak menguntungkan. nilai normal adalah 2,3,4,5. Jika transaksi sebelumnya yang tidak menguntungkan, volume berikutnya akan berkurang dengan faktor DecreaseFactor untuk menunggu periode tidak menguntungkan tersebut. Ini adalah faktor utama dalam algoritma pengelolaan modal. Idenya sangat sederhana: jika berhasil meningkatkan perdagangan, EA bekerja dengan banyak dasar untuk menghasilkan keuntungan maksimal. Setelah transaksi tidak menguntungkan pertama, EA akan “mengurangi kecepatan” sampai transaksi positif. Algoritma ini memungkinkan untuk menonaktifkan “mengurangi kecepatan”, untuk melakukannya, kita harus menentukan DecreaseFactor = 0. Jumlah transaksi terakhir tidak menguntungkan berurutan, akan dihitung ulang berdasarkan ini:

if (loss> 1) lot = NormalizeDouble (lots loss * / DecreaseFactor, 1);

if (lot <0,1) lot = 0,1;

EA ini baik digunakan untuk chart harian.

agan2 bisa belajar di http://instaforex.co.id/mt4/moving-average/

Step marty 0.01 namun lot tak terjadi martiyem

ini khusus untuk lot awal = 0.01, walau ada exp = 2, lot selanjutnya tetap sama
klu lot awal dimulai 0.02, maka lot marti selanjutnya berjalan semsetinya sesuai dengan perkalian exp nya

masalah :
http://indo.mt5.com/showthread.php?1793-GRATIS-Profitable-EA-BHCM-!/page38

maaf nih agan semua , sy mau tanya
ane pasang multyply nya =1 
kok OP selanjutnya malah naik sendiri lotnya , kira2 salahnya apa y



terlihat walau multiply = 1, namun lot naik 0.01

jawab :
Coba dilihat pada bagian yang ini....

LotBuy = MathMax(Multiply*OrderLots(),OrderLots()+lotstep);
LotSell = MathMax(Multiply*OrderLots(),OrderLots()+lotstep);


MathMax = Menampilkan nilai tertinggi.
lotstep = MarketInfo(Symbol(), MODE_LOTSTEP); ==>> asumsi jika memakai account demo instaforex MODE_LOTSTEP = 0.01


Jadi kesimpulannya seperti ini

LotBuy/LotSell = MathMax(Multiply*OrderLots(),OrderLots()+lotstep)
LotBuy/LotSell = MathMax(1*0.1,0.1+0.01) 
LotBuy/LotSell = MathMax(0.1,0.11)
LotBuy/LotSell = 0.11


Kalau mau tidak bertambah lotnya bisa dicoba dihilangkan "+lotstep" nya..... 

ganti semua ini :
Code:
LotBuy      = MathMax(Multiply*OrderLots(),OrderLots()+lotstep);
LotBuy      = MathMax(LotBuy, minlot);
dengan ini :
Code:
LotBuy      = MathMax(Multiply*OrderLots(),minlot);
--------------
@iniangga & hermit88
Betul bagian itu yang diubah, maaf kemarin mo reply blom sempet masih sibuk.
Dan itu tidak menyalahi konsep Martingale, karena emang sebenarnya itu kode aslinya dulu ya saya bikin seperti itu 
Lalu kenapa saya tambahkan lotstep?
Kalo menyimak di post2 depan, pasti tahu sejarahnya. Dulu ada yang coba penambahan lot-nya ngga jalan karena menggunakan multiply 1.5
1.5 x0.1 = 0.15
Nah jika lotstep dari broker yang bersangkutan adalah 0.1, maka perhitungan tadi akan menghasilkan tetap 0.1 karena penambahan lot (lotstep) yang diijinkan minimal 0.1
Kalo di Insta lotstep=0.01 jadi no problemo 
Ok, kiranya masalah ini cukup jelas. Jika ada yang kurang sreg, sampaikan saja...
Saya sangat berterima kasih kepada iniangga & hermit88 karena bersedia membantu menjelaskan coding-nya. Karena kebanyakan orang males belajar, maunya langsung dapet instan hehe..  
Belajar MQL ngga ada ruginya, terutama jika setiap hari MT4 jadi "santapan" sehari-hari, minimal bisa edit2 indi/EA dikit2 khan lumayan.

--------------------------
Masalah saya sdh ada exp namun lot tidak exponential..

tambahkan perintah :

di input :

double gd_1=1;


void SetDigits() {
   if (Digits == 5 || Digits == 3) gd_160 = 10;
   if(MarketInfo(Symbol(),MODE_MINLOT) == 0.01) gd_1 = 2;
}



di perintah order :

if (OrderSend(Symbol(), OP_SELLSTOP, NormalizeDouble(LotsExponential * Lots, gd_1), NormalizeDouble(ld_8 - KillZone * Point * gd_160, Digits), Slippage, l_price_24, l_price_32, gs_007_148, Magic_Number, 0, Red) == -1) {
               l_error_0 = GetLastError();

Saturday, 27 October 2012

logic tradetime


jumat tidak trading
//taro dibagian atas
extern bool   OPFriday = false;  //artinya false = tidak buka posisi baru di hari jumat

//replace tradetime dgn yg ini
bool TradeTime() 
{
   bool TradingTime = false;
   if(StartTime < StopTime)
   {
      if (Hour() >= StartTime && Hour() <= StopTime) TradingTime = true;
      if(OPFriday == false)
      {
         if(TradingTime == true)
         {
            if(DayOfWeek() == 5) TradingTime = false;
         }
      }
   }   
   else if(StartTime > StopTime)
   {
      if (Hour() >= StartTime || Hour() <= StopTime) TradingTime = true;
      if(OPFriday == false)
      {
         if(TradingTime == true)
         {
            if(DayOfWeek() == 5 && Hour() < StartTime) TradingTime = false;
         }
      }
      if(DayOfWeek() == 5 && Hour() >= StartTime)  TradingTime = false;
   }
   return(TradingTime); 
}

Friday, 19 October 2012

slippage works

slippage works when the price moves from the requested entry price.

There are 2 types of order execution on mt4 based brokers. Instant execution and Market execution. You can figure out which you have by going to the open order screen in mt4 and look what it says under "Type". 

Now, typically market execution is for ecn based brokers and instant execution is for MM brokers.

With Instant execution, when you see price and press the buy/sell button you are asking the broker to open your order at that price. Also, you can send a sl and tp with the order request. There is a check box on the order page that says "Enable maximum deviation from quoted price". If you check that and enter a value then that as well is sent with the order request. The broker acknowledges your request and then looks to fill your order. If you didn't sent a max deviation value with the order then you are telling the broker that you only want the price you requested. If that price is not available, the broker sends you a requote with the available price. To which you can accept or reject this and it goes back to the broker and again either gets filled at that price or requoted if the price has moved. Requotes should ONLY occur with instant execution brokers. If you do send a max deviation value with the order, for example 3 pips, then you are telling the broker that you will take a fill at the requested price +/- 3 pips. So if the price moves within that range then your order is filled without a requote. The difference between the initial requested price and the filed price is called slippage. You will notice that there is a setting in FH called slippage. The default is 3. This is the value that is sent with your orders on instant execution brokers. This will prevent a requote if the fill price is within +/- 3 pips from the requested price.

Ok now that is how it should work.. unfortunately I have seen LF requote orders even with a huge slippage value sent with the order. Every time a requote occurs then it is slowing down the order process and since we know the price doesn't stand still very long this could turn into an event that causes you to get a much worse entry than you originally asked for. Generally, these crappy brokers will not requote you if theprice has moved against you nor will they give you positive slippage. They will only requote you or slip you when it hurts your position. This is the sign of a bucket shop broker. Also, this is a built in function of the virtual dealer plugin that is sold as an addon by metaquotes to the brokers.

Now lets go over Market Execution. Incidentally, this is why you have the option in the settings "SupportECN". Because with market execution brokers when you send the order in, you are not sending in the price (nor sl or tp). You are just sending a request to the broker to open your order of a certain size. The broker acknowledges the request and then goes to the liquidity pool to get you the best fill possible. That is at whatever price is available. There is NO requotes since with this type of order you are not sending a requested price but only asking for a fill. The broker then sends you back the price the order was filled at with the order ticket number. If the price is higher than when you hit the buy button then you got negative slippage and if the price moved lower than when you pushed the button you get positive slippage. A good ecn broker should give both positive and negative slippage an over time these tend to wash each other out. A broker like FXCM would charge you the negative slippage while putting and positive slippage in their pockets. This is extremely unprofessional and should be illegal. If you NEVER get any positive slippage then you can bet your broker is doing this. As I said, you should NEVER be requoted on this type of broker cause there is nothing to requote. You only get slipped.

I should add, that with market execution you don't send the TP and SL with the order request but rather after the order has been open you send in an order modify request with the SL and TP.

This is why you see an option in many ea's (including FH) about ECN. So the EA knows how to send in the order request.

Lets look at the FH code for a BUY
if (!SupportECN) 
ticket_4 = OrderSend(Symbol(), OP_BUY, lots_40, Ask, slippage, price_16, price_8, EA_Name + ls_24, MagicNumber, 0, Green);
if you have ecn set to false then it sends the order with the symbol,Buy, lots, ask price, slippage, SL, TP, order comment, Magic number

else {
ticket_4 = OrderSend(Symbol(), OP_BUY, lots_40, Ask, slippage, 0, 0, EA_Name + ls_24, MagicNumber, 0, Green);
Sleep(1000);
OrderModify(ticket_4, OrderOpenPrice(), price_16, price_8, 0, Black);
else if ecn is true then send order as symbol, buy, lots, ask price, slippage ,0,0, comment, magic number

then sleep for a few cycles and send modify to set sl and tp.


now after looking at this is does seem that both market execution and instant execution have slippage control. Maybe my understanding is not correct about how market execution orders are executed or maybe the values are sent just as place holders like 0,0 seen above in the place of sl and tp.

The one thing that has now become clear to me is that FH never does a refresh rates. All ea's should refresh the rates prior to sending in the order so that the ASK/BID is fresh and accurate to the current price. I think I need to add that into this code. That could be why order prices get slipped like they do.

Thursday, 18 October 2012

Eatree


If you allow me to respond:

EATree Software www.eatree.com
Take advantage of EATree Software time-limited sale started yesterday. This is the best time to buy EATree as we have time-limited 100% bonus with 4XP. This is a wonderful deal.

We have wonderful deals for you with our partner, 4XP. Here are the 3 different buying opportunities:

1. Buy the EATree software only as a standalone product.

2. Buy the EATree software plus deposit a minimum of $1000 at 4XP and receive 100% bonus, up to $3000 deposit. In this buying opportunity, your cost of buying EATree software is deposited into your 4XP account. In addition, you get extra cash deposited into your 4XP account.

Buy the EATree software plus deposit a minimum of $10,000 at 4XP and receive VIP Trading account including spread reduction, 50% bonus, and VIP EATree Webinar sessions. In this buying opportunity, your cost of buying EATree software is deposited into your 4XP account. In addition, you get the VIP pack and extra cash deposited into your 4XP account.



We would like to give you updates about EA Tree software www.eatree.com

- We have released EATree MT4 for the MetaTrader 4 platform, the most popular financial markets and forex trading platform
- We have released version 2, which has many useful features. 
- We have created a free demo version (limited edition – save disabled) that you can download for fat http://www.eatree.com/demo
- We are using a new color system that make it easier to use EATree
- We have published a new article about EA Tree software at MetaTrader 5 site at:
http://www.mql5.com/en/articles/337


What is EATree?
EATree is a MetaTrader drag and drop Expert Advisor (EA) builder. Itis a windows application that runs locally on your computer. You can create complex MT4 and MT5 EAs using a very easy to use graphical user interface. There are two different products: EATree MT4 standard Edition V2.0 that supports the MQL4 language and EATree MT5 standard Edition V2.0 that supports the MQL5 language.
In EATree, expert advisors and forex signals are created by connecting trading blocks called boxes together. Boxes may contain MQL functions, technical indicators, custom indicators, or values. Outputs of one box may be connected to inputs of another box to form a “tree of boxes”. EATree has a visual color system to guide you through this process. EATree then converts this visual representation of forex trading strategies to a ready to use MetaTrader expert advisor or forex signal.


Why EATree

Ease of use
Easy to use and understand drag and drop graphical user interface. You simply connect trading blocks or boxes together to create a layout or a tree of boxes. EATree has a visual color system to guide you through this process.

No Programming
You do not need to have any programming background or even knowledge of the MQL trading language to use EATree. EATree converts the visual representation of forex trading strategies that you create in EATree to a ready to use MetaTrader expert advisor or forex signal.

Power
Access to powerful trading tools such as money management, trading controls, trailing stops, time zones, hedging, martingale, news, and much more. Tools vary between EATree MT4 and MT5. 

MQL Learning
If you have some programming background, you can quickly learn MQL trading languages. Every time you create a new box and connect it, you can instantly view the MetaTrader expert advisor code and learn from analyzing code changes.

Privacy
Privacy of your trading secrets. No need to share your ideas with anybody. You can create your MetaTrader expert advisors or forex signals privately.

Development Speed
You decrease expert advisor or forex signal development time to minutes instead of days or months. You can create a library of layouts or trees of boxes while you are working to reduce development time drastically.

Complex EAs
You can develop complex MQL expert advisors and forex signals with multiple currencies and multiple timeframes.

Efficiency
You can reuse code by saving and loading layouts or trees of boxes. You can create a database of layouts or trees of boxes while you are working, this will speed up your next project development time.

Error Free
You create correct MetaTrader expert advisors and forex signals code every time, assuming that you follow software installation and update instructions.

You can get all of this for free!
We have wonderful deals for you with our partner, 4XP. Here are the 3 different buying opportunities:

1. Buy the EATree software only as a standalone product.
2. Buy the EATree software plus deposit a minimum of $1000 at 4XP and receive 100% bonus, up to $3000 deposit. In this buying opportunity, your cost of buying EATree software is deposited into your 4XP account. In addition, you get extra cash deposited into your 4XP account.
3. Buy the EATree software plus deposit a minimum of $10,000 at 4XP and receive VIP Trading account including spread reduction, 50% bonus, and VIP EATree Webinar sessions. In this buying opportunity, your cost of buying EATree software is deposited into your 4XP account. In addition, you get the VIP pack and extra

http://www.youtube.com/watch?v=1htmNZxHsRc