BTC USD 80,980.6 Gold USD 4,378.12
Time now: Jun 1, 12:00 AM

Belajar Coding EA (mql) asas

Saya tak faham apa yang bro nak buat

Maaf kalau ayat tak betul... kepala dah sakit.. ni baru on9

Sebelum ni code
if (price_p1>price_01) ObjectDelete("buystop2");
Bila --- price_p1>price_01 --- TL buystop delete---Time ni Channel slope kebawah.

Coding diatas sangat saya hargai atas bantuan Bro.

Saya nak buat TL buystop2 delete, hanya bila price menghampiri TL buystop2 tersebut,
untuk mengelakkan open post buy .

TQ.... atas bantuan Bro dgn kerenah saya yg macam2 ni.
 
Maaf kalau ayat tak betul... kepala dah sakit.. ni baru on9

Sebelum ni code
if (price_p1>price_01) ObjectDelete("buystop2");
Bila --- price_p1>price_01 --- TL buystop delete---Time ni Channel slope kebawah.

Coding diatas sangat saya hargai atas bantuan Bro.

Saya nak buat TL buystop2 delete, hanya bila price menghampiri TL buystop2 tersebut,
untuk mengelakkan open post buy .

TQ.... atas bantuan Bro dgn kerenah saya yg macam2 ni.

Saya tak faham kenapa mesti delete TL sellstop sedangkan candle menghampiri TL buystop. EA akan open buy sekiranya sentuh buystop, jadi apa kena mengenanya sellstop yang ada kat bawah?

Code:
  if (price_p1<price_01 && ObjectGetValueByShift("buystop2",0)-Bid<=10*Point)  ObjectDelete("sellstop2");
  if (price_p1>price_01 && Bid-ObjectGetValueByShift("sellstop2",0)<=10*Point) ObjectDelete("buystop2");
 
mungkin saya yang tak faham, mungkin code yang bawah ni yang tuan maksudkan

Code:
  if (price_p1<price_01 && Bid-ObjectGetValueByShift("sellstop2",0)<=10*Point)  ObjectDelete("sellstop2");
  if (price_p1>price_01 && ObjectGetValueByShift("buystop2",0)-Bid<=10*Point) ObjectDelete("buystop2");
 
//===================================================================================
ObjectCreate("buystop2",2, 0,Time[p],price_p1,Time[0],price_01);
if (price_p1>price_01 && Bid-ObjectGetValueByShift("buystop2",0)<=10*Point) ObjectDelete("buystop2");
ObjectCreate("0"+sName,2, 0,Time[p],price_p0,Time[0],price_00);
ObjectCreate("sellstop2",2, 0,Time[p],price_p2,Time[0],price_02);
if (price_p1<price_01 && ObjectGetValueByShift("sellstop2",0)-Bid<=10*Point) ObjectDelete("sellstop2");
//-----------------------------------------------------------------

OK....Bro Aiman....alhamdulillah.Coding telah berjaya....CUN....! Terimakasih atas illmu yang diberi..
 
//+------------------------------------------------------------------+
//| SHI_Channel.mq4 |
//| Copyright © 2004, Shurka & Kevin |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, Shurka & Kevin"
#property link ""

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 LightSkyBlue
double ExtMapBuffer1[];
//---- input parameters
extern int AllBars=240;
extern int BarsForFract=0;
extern int ChannelAlert=50;
extern int SlopeAlert=25;
extern bool sounds=true;
int CurrentBar=0;
int alertTag;
double Step=0;
int B1=-1,B2=-1;
int UpDown=0;
double P1=0,P2=0,PP=0;
double OldChannelWidth,OldSlopeAngle;
int prev;
int last;
int i=0,AB=300,BFF=0;
int ishift=0;
double iprice=0;
datetime T1,T2;
int firsttime=0;
string prevtxt;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,164);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexEmptyValue(0,0.0);
//----


return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}

void DelObj()
{
ObjectDelete("buystop1");
ObjectDelete("sellstop1");
ObjectDelete("MIDL");
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();

string symbolTxt;
string WhatTxt;
if (Symbol()=="EURUSD") { symbolTxt = "EUR/USD"; }
if (Symbol()=="EURJPY") { symbolTxt = "Euro Yen "; }
if (Symbol()=="EURAUD") { symbolTxt = "Euro Aussie "; }
if (Symbol()=="EURCAD") { symbolTxt = "Euro Canadian"; }
if (Symbol()=="EURCHF") { symbolTxt = "Euro Swiss"; }
if (Symbol()=="GBPUSD") { symbolTxt = "GPB Dollar"; }
if (Symbol()=="GBPJPY") { symbolTxt = "GPB/JPY "; }
if (Symbol()=="GBPCHF") { symbolTxt = "GPB/JPY"; }
if (Symbol()=="AUDUSD") { symbolTxt = "Aussie"; }
if (Symbol()=="USDCHF") { symbolTxt = "Swiss Dollar"; }
if (Symbol()=="USDCAD") { symbolTxt = "Canada"; }
if (Symbol()=="USDJPY") { symbolTxt = "Yen Dollar"; }
if (Symbol()=="CHFJPY") { symbolTxt = "Swiss Yen "; }
if (Symbol()=="GOLD") { symbolTxt = "Gold"; }

//----
if ((AllBars==0) || (Bars<AllBars)) AB=Bars; else AB=AllBars; //AB-êîëè÷åñòâî îáñ÷èòûâàåìûõ áàðîâ
if (BarsForFract>0)
BFF=BarsForFract;
else
{
switch (Period())
{
case 1: BFF=12; break;
case 5: BFF=48; break;
case 15: BFF=24; break;
case 30: BFF=24; break;
case 60: BFF=12; break;
case 240: BFF=15; break;
case 1440: BFF=10; break;
case 10080: BFF=6; break;
default: DelObj(); return(-1); break;
}
}
CurrentBar=2; //ñ÷èòàåì ñ òðåòüåãî áàðà, ÷òîáû ôðàêòàë "çàêðåïèëñÿ
B1=-1; B2=-1; UpDown=0;
while(((B1==-1) || (B2==-1)) && (CurrentBar<AB))
{
//UpDown=1 çíà÷èò ïåðâûé ôðàêòàë íàéäåí ñâåðõó, UpDown=-1 çíà÷èò ïåðâûé ôðàêòàë
//íàéäåí ñíèçó, UpDown=0 çíà÷èò ôðàêòàë åù¸ íå íàéäåí.
//Â1 è Â2 - íîìåðà áàðîâ ñ ôðàêòàëàìè, ÷åðåç íèõ ñòðîèì îïîðíóþ ëèíèþ.
//Ð1 è Ð2 - ñîîòâåòñòâåííî öåíû ÷åðåç êîòîðûå áóäåì ëèíèþ ïðîâîäèòü

if((UpDown<1) && (CurrentBar==Lowest(Symbol(),Period(),MODE_LOW,BFF*2+1,CurrentBar-BFF)))
{
if(UpDown==0) { UpDown=-1; B1=CurrentBar; P1=Low[B1]; }
else { B2=CurrentBar; P2=Low[B2];}
}
if((UpDown>-1) && (CurrentBar==Highest(Symbol(),Period(),MODE_HIGH,BFF*2+1,CurrentBar-BFF)))
{
if(UpDown==0) { UpDown=1; B1=CurrentBar; P1=High[B1]; }
else { B2=CurrentBar; P2=High[B2]; }
}
CurrentBar++;
}
if((B1==-1) || (B2==-1)) {DelObj(); return(-1);} // Çíà÷èò íå íàøëè ôðàêòàëîâ ñðåäè 300 áàðîâ 8-)
Step=(P2-P1)/(B2-B1);//Âû÷èñëèëè øàã, åñëè îí ïîëîæèòåëüíûé, òî êàíàë íèñõîäÿùèé
P1=P1-B1*Step; B1=0;//ïåðåñòàâëÿåì öåíó è ïåðâûé áàð ê íóëþ
//À òåïåðü îïîðíóþ òî÷êó ïðîòèâîïîëîæíîé ëèíèè êàíàëà.
ishift=0; iprice=0;
if(UpDown==1)
{
PP=Low[2]-2*Step;
for(i=3;i<=B2;i++)
{
if(Low<PP+Step*i) { PP=Low-i*Step; }
}
if(Low[0]<PP) {ishift=0; iprice=PP;}
if(Low[1]<PP+Step) {ishift=1; iprice=PP+Step;}
if(High[0]>P1) {ishift=0; iprice=P1;}
if(High[1]>P1+Step) {ishift=1; iprice=P1+Step;}
}
else
{
PP=High[2]-2*Step;
for(i=3;i<=B2;i++)
{
if(High>PP+Step*i) { PP=High-i*Step;}
}
if(Low[0]<P1) {ishift=0; iprice=P1;}
if(Low[1]<P1+Step) {ishift=1; iprice=P1+Step;}
if(High[0]>PP) {ishift=0; iprice=PP;}
if(High[1]>PP+Step) {ishift=1; iprice=PP+Step;}
}
//Òåïåðü ïåðåñòàâèì êîíå÷íóþ öåíó è áàð íà ÀÂ, ÷òîáû ëèíèè êàíàëà ðèñîâàëèñü ïîäëèííåå
P2=P1+AB*Step;
T1=Time[B1]; T2=Time[AB];

//Åñëè íå áûëî ïåðåñå÷åíèÿ êàíàëà, òî 0, èíà÷å ñòàâèì ïñèñó.
if(iprice!=0) ExtMapBuffer1[ishift]=iprice;
DelObj();
double ChannelWidth=MathAbs(PP - P1)/Point;
double SlopeAngle=MathFloor((-Step/Point)*100);


//+------------------------------------------------------------------+
//| MINTA PERTOLONGAN !!! |
//+------------------------------------------------------------------+
}double priceTmp;

if (PP+Step*AB>P2) // Sekiranya terbalik
{
priceTmp=PP+Step*AB; // swap price_p1 dan price_p2
PP+Step*AB=P2;
P2=priceTmp;

priceTmp=PP; // swap price_01 dan price_02
PP=P1;
P1=priceTmp;
}
//+------------------------------------------------------------------+

ObjectCreate("buystop1",OBJ_TREND,0,T2,PP+Step*AB,T1,PP);
// Channel is Green if width is greater than ChannelAlert (Default 50), otherwise it is Yellow
if(ChannelWidth >= ChannelAlert) {ObjectSet("buystop1",OBJPROP_COLOR,Aqua);}
else {ObjectSet("buystop1",OBJPROP_COLOR,Aqua); }
ObjectSet("buystop1",OBJPROP_WIDTH,2);
ObjectSet("buystop1",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("sellstop1",OBJ_TREND,0,T2,P2,T1,P1);
if(ChannelWidth >= ChannelAlert) {ObjectSet("sellstop1",OBJPROP_COLOR,Orange); }
else{ObjectSet("sellstop1",OBJPROP_COLOR,Orange);}
ObjectSet("sellstop1",OBJPROP_WIDTH,2);
ObjectSet("sellstop1",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("MIDL",OBJ_TREND,0,T2,(P2+PP+Step*AB)/2,T1,(P1+PP)/2);
// Mid line is Green if Slope is greater than SlopeAlert (Default 25), otherwise it is Yellow
if(ChannelWidth >= ChannelAlert && MathAbs(SlopeAngle) >= SlopeAlert) {ObjectSet("MIDL",OBJPROP_COLOR,Black); }
else{ObjectSet("MIDL",OBJPROP_COLOR,Black);}
ObjectSet("MIDL",OBJPROP_WIDTH,1);
ObjectSet("MIDL",OBJPROP_STYLE,STYLE_DOT);
if (OldSlopeAngle<=0 && SlopeAngle>0 )WhatTxt="Up";
if (OldSlopeAngle>=0 && SlopeAngle<0 )WhatTxt="Down";

if(prevtxt != WhatTxt && alertTag != Time[0]){Alert("Shi Channel direction to ",WhatTxt," ",Symbol()," ",Period());prevtxt=WhatTxt;alertTag = Time[0];}

// Comment(" Channel size = ", DoubleToStr(ChannelWidth,0), " Slope = ", DoubleToStr(SlopeAngle,0));
//----
return(0);
}
//+------------------------------------------------------------------+

Diatas adalah dari code shi cannel. Saya nak adjust jadi seperti Autochannel yang bro aiman coding..

Saya cuba code cara belasah digahagian { minta tolong )

tapi X menjadii... tolong perbetulkan... jika tak keberatan.

Juga code untuk TL Hilang bila price menghapri TL sperti aotochannel.

Rasanya .... sampai pecah kepala ni pun tak tentu menjadi kalau x der bantuan....#:-S
 
Code:
if (PP+Step*AB>P2) // Sekiranya terbalik
{
priceTmp=PP+Step*AB; // swap price_p1 dan price_p2
[COLOR="Red"]PP+Step*AB=P2;[/COLOR]
P2=priceTmp;

priceTmp=PP; // swap price_01 dan price_02
PP=P1;
P1=priceTmp;
}

Warna merah di atas tu salah, hanya variable boleh assign value. Terbalik.

Kat bawah saya create variable lv sebagai ganti

Code:
  //+------------------------------------------------------------------+
  //| MINTA PERTOLONGAN !!!                                            |
  //+------------------------------------------------------------------+
   double priceTmp;
   double lv = PP+Step*AB;

   if (lv<P2) // Sekiranya terbalik
   {
    priceTmp=lv;  // swap price_p1 dan price_p2
    lv=P2;
    P2=priceTmp;

    priceTmp=PP;  // swap price_01 dan price_02
    PP=P1;
    P1=priceTmp;
   }
 //+------------------------------------------------------------------+

       ObjectCreate("buystop1",OBJ_TREND,0,T2,lv,T1,PP);
       // Channel is Green if width is greater than ChannelAlert (Default 50), otherwise it is Yellow
     if(ChannelWidth >= ChannelAlert) {ObjectSet("buystop1",OBJPROP_COLOR,Aqua);}
             else {ObjectSet("buystop1",OBJPROP_COLOR,Aqua); }
               ObjectSet("buystop1",OBJPROP_WIDTH,2);
               ObjectSet("buystop1",OBJPROP_STYLE,STYLE_SOLID);
       ObjectCreate("sellstop1",OBJ_TREND,0,T2,P2,T1,P1);
               if(ChannelWidth >= ChannelAlert) {ObjectSet("sellstop1",OBJPROP_COLOR,Orange); }
         else{ObjectSet("sellstop1",OBJPROP_COLOR,Orange);}
     ObjectSet("sellstop1",OBJPROP_WIDTH,2);
               ObjectSet("sellstop1",OBJPROP_STYLE,STYLE_SOLID);
          ObjectCreate("MIDL",OBJ_TREND,0,T2,(P2+lv)/2,T1,(P1+PP)/2);
        // Mid line is Green if Slope is greater than SlopeAlert (Default 25), otherwise it is Yellow
               if(ChannelWidth >= ChannelAlert && MathAbs(SlopeAngle) >= SlopeAlert) {ObjectSet("MIDL",OBJPROP_COLOR,Black); }
                  else{ObjectSet("MIDL",OBJPROP_COLOR,Black);}
               ObjectSet("MIDL",OBJPROP_WIDTH,1);
               ObjectSet("MIDL",OBJPROP_STYLE,STYLE_DOT);
               if (OldSlopeAngle<=0 && SlopeAngle>0 )WhatTxt="Up";
               if (OldSlopeAngle>=0 && SlopeAngle<0 )WhatTxt="Down";

               if(prevtxt != WhatTxt && alertTag != Time[0]){Alert("Shi Channel direction to ",WhatTxt," ",Symbol()," ",Period());prevtxt=WhatTxt;alertTag = Time[0];}

//              Comment(" Channel size = ", DoubleToStr(ChannelWidth,0), " Slope = ", DoubleToStr(SlopeAngle,0));
//----

  if (lv<PP && Bid-ObjectGetValueByShift("sellstop1",0)<=10*Point)  ObjectDelete("sellstop1");
  if (lv>PP && ObjectGetValueByShift("buystop1",0)-Bid<=10*Point) ObjectDelete("buystop1");
  return(0);
 }
//+------------------------------------------------------------------+
 
mungkin saya yang tak faham, mungkin code yang bawah ni yang tuan maksudkan

Code:
  if (price_p1<price_01 && Bid-ObjectGetValueByShift("sellstop2",0)<=10*Point)  ObjectDelete("sellstop2");
  if (price_p1>price_01 && ObjectGetValueByShift("buystop2",0)-Bid<=10*Point) ObjectDelete("buystop2");

Salam, Bro minta tolong mcm mana nak buat 1 ea boleh open multi pair currency??
 
Kalau current pair kita akan guna Symbol()
Kalau nak guna lain2 pair, kita kena type symbol name, contoh "EURUSD" atau "GBPUSD"

Contoh syntax untuk open post
current pair
Code:
OrderSend([COLOR="DarkRed"]Symbol()[/COLOR],OP_BUY,1,Ask,3,0,0,"My order #2",16384,0,Green);
lain2 pair (eg>EURUSD dan GBPUSD)
Code:
OrderSend([COLOR="DarkRed"]"EURUSD"[/COLOR],OP_BUY,1,Ask,3,0,0,"My order #2",16384,0,Green);
OrderSend([COLOR="DarkRed"]"GBPUSD"[/COLOR],OP_BUY,1,Ask,3,0,0,"My order #2",16384,0,Green);

Contoh lain kalau nak dapatkan bid atau close price
current pair
Code:
iClose([COLOR="DarkRed"]Symbol()[/COLOR],PERIOD_M15,0);
lain2 pair (eg>EURUSD dan GBPUSD)
Code:
iClose([COLOR="DarkRed"]"EURUSD"[/COLOR],PERIOD_M15,0);
iClose([COLOR="DarkRed"]"GBPUSD"[/COLOR],PERIOD_M15,0);

Guna metaeditor sangat mudah sebab ada auto complete, cuba type iClose kat metaeditor.
Bila huruf ke tiga ( iCl ) ditaip biasanya akan keluar autocomplete.
autocomplete.jpg


Untuk dapatkan contoh syntax pula, highlight iClose tadi, kemudian tekan F1. Kat sana kita boleh lihat contoh penggunaan iClose untuk multipairs
 

Live Forex Chart

Currency
Rates
EUR / USD
1.14885
USD / JPY
156.877
GBP / USD
1.33950
USD / CHF
0.82210
USD / CAD
1.39965
EUR / JPY
180.229
AUD / USD
0.71330
Back
Top
Log in Register