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

Belajar Coding EA (mql) asas

nak tanya....klu ada warning....ada masalah ka apabila run ea kat real?
 
coding boleh belajar step by step, test coding yg mudah dulu.
contohnya test mcm mana nak buka post buy atau sell.
kemudian next step..
 
Sape penah kena..EA sekali sekala bukak dua post..padahal kita set 1 je..

pastu fungsi kdg2 tk jalan.. eg.. logik tu sekali sekala tk jalan..

katakan korang nk filter guna indi..biasa ok ea ni filter..tpi ada sehari dua..dia tk filter..

kalau tk code yg salah..salah kn platform tu...huhu
 
Sape penah kena..EA sekali sekala bukak dua post..padahal kita set 1 je..

pastu fungsi kdg2 tk jalan.. eg.. logik tu sekali sekala tk jalan..

katakan korang nk filter guna indi..biasa ok ea ni filter..tpi ada sehari dua..dia tk filter..

kalau tk code yg salah..salah kn platform tu...huhu

Kalau double post tu, kena buat lock dulu semasa buat new post...
Before buat post, check dulu adakah post suda masuk untuk signal sekian2...
 
Boleh Ajar atau bantu modi Ea ni

Salam bro semua, bagaimana nak buangkan indikator dlm Ea fx pro jaksen V3 ni dan gantikan dengan Indi 3_ZZ_Level_Semafor. Cara Opnya begini:

1) Op Buy bila No3(kuning) muncul dari puncak dan hanya Op Buy dilakukan jika belum keluar No3(kuning dari bawah/ dasar.
2) Op Sell bila No3(kuning) muncul di dasar/ bawah dan hanya Op Buy dilakukan jika belum keluar No3(kuning) dari puncak/ atas.

Saya sertakan Ea dan Indinya sekali
Muncul * = { terbalikan. Peliknya kalau diletak disini aka menjadi simbol **


Ea:

//+------------------------------------------------------------------+
//| fx pro expertv3.mq4 |
//| Copyright © 2009, jacksen benturok |
//| http://www.rahsia-dapat-duit.com |
//+------------------------------------------------------------------+
//----
extern int MMType=1; // ??? ??: 0-Lots, 1-??? ???? ? 1.2, 2-?????????? (??????????? LotExponent)
extern bool UseClose=false; // ???????? ?? ?????? PipStep. ???????????? false
extern bool UseAdd=true; // ???????????? ? ????? ?????. ??? ??? ???????????? ????????? ?? LotExponent ?????????? ?? MMType ???????????? = true
extern double LotExponent=1.777; // ????????? ????? ? ????? ?? ?????????? ??? ?????? ? ?????????. ?????? ??? 0.1, ?????: 0.16, 0.26, 0.43 ...
extern double slip=3; // ?????????? ??????????????? ???? ? ??????
extern double Lots=0.1; // ?????? ????? ? ????????? 0.01 ??? ???? ???? ????? 0.1 ?? ????????? ??? ? ????? ????? 0.16
extern double LotsDigits=2; // 2 - ????????? 0.01, 1 - ???? ???? 0.1, 0 - ?????????? ???? 1.0
extern double TakeProfit=10; // ??????? ??????? ? ?????? ?? ???? ????????.
double Stoploss=0.0; // ??? ??? ????????? ?? ????????
double TrailStart=0;
double TrailStop=0;
extern double PipStep=7; // ????????? ? ?????? ?????? ?? ??????? ???????????? ????????? ????? ??????.
extern int MaxTrades=2;
extern bool UseEquityStop=false;
extern double TotalEquityRisk=0.10; //loss as a percentage of equity
extern bool UseTrailingStop=false;
extern bool UseTimeOut=false;
extern double MaxTradeOpenHours=0;
//----
int MagicNumber=12324;
double PriceTarget, StartEquity, BuyTarget, SellTarget;
double AveragePrice, SellLimit, BuyLimit;
double LastBuyPrice, LastSellPrice, ClosePrice, Spread;
int flag;
string EAName="fx pro expert jacksen v3";
datetime timeprev=0, expiration;
int NumOfTrades=0;
double iLots;
int cnt=0, total;
double Stopper=0;
bool TradeNow=true, LongTrade=true, ShortTrade=true;
int ticket;
bool NewOrdersPlaced=true;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
Spread=MarketInfo(Symbol(), MODE_SPREAD)*Point;
return(0);
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
if (UseTrailingStop)
{
TrailingAlls(TrailStart, TrailStop, AveragePrice);
**
if (UseTimeOut){
if(CurTime()>=expiration)
{
CloseThisSymbolAll();
Print("Closed All due to TimeOut");
**
**
if(timeprev==Time[0])
{
return(0);
**
timeprev=Time[0];
//----
double CurrentPairProfit=CalculateProfit();
if(UseEquityStop){
if(CurrentPairProfit<0 && MathAbs(CurrentPairProfit)>(TotalEquityRisk/100)*AccountEquityHigh())
{
CloseThisSymbolAll();
Print("Closed All due to Stop Out");
NewOrdersPlaced=false;
**
**
total=CountTrades();
//----
if (total==0)
{
flag=0;
**
double LastBuyLots;
double LastSellLots;
for(cnt=OrdersTotal()-1;cnt>=0;cnt--){// ????? ?????????? ???????????
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_BUY)
{
LongTrade=true;
ShortTrade=false;
LastBuyLots=OrderLots();
break;
**
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_SELL)
{
LongTrade=false;
ShortTrade=true;
LastSellLots=OrderLots();
break;
**
**
if(total>0 && total<=MaxTrades)
{
RefreshRates();
LastBuyPrice=FindLastBuyPrice();
LastSellPrice=FindLastSellPrice();
if(LongTrade && (LastBuyPrice - Ask)>=(PipStep*Point))
{
TradeNow=true;
**
if(ShortTrade && (Bid - LastSellPrice)>=(PipStep*Point))
{
TradeNow=true;
**
**
if (total < 1)
{
ShortTrade=false;
LongTrade=false;
TradeNow=true;
StartEquity=AccountEquity();
**
if (TradeNow)
{
LastBuyPrice=FindLastBuyPrice();
LastSellPrice=FindLastSellPrice();
if(ShortTrade)
{
if(UseClose)
{
fOrderCloseMarket(false,true);
iLots=NormalizeDouble(LotExponent*LastSellLots,LotsDigits);
**
else
{
iLots=fGetLots(OP_SELL);
**
if(UseAdd)
{
NumOfTrades=total;
if(iLots>0)
{//#
RefreshRates();
ticket=OpenPendingOrder(OP_SELL,iLots,Bid,slip,Ask,0,0,EAName+"-"+NumOfTrades,MagicNumber,0,HotPink);
if(ticket<0){Print("Error: ",GetLastError()); return(0);**
LastSellPrice=FindLastSellPrice();
TradeNow=false;
NewOrdersPlaced=true;
**//#
**
**
else if (LongTrade)
{
if(UseClose)
{
fOrderCloseMarket(true,false);
iLots=NormalizeDouble(LotExponent*LastBuyLots,LotsDigits);
**
else
{
iLots=fGetLots(OP_BUY);
**
if(UseAdd)
{
NumOfTrades=total;
if(iLots>0)
{//#
ticket=OpenPendingOrder(OP_BUY,iLots,Ask,slip,Bid,0,0,EAName+"-"+NumOfTrades,MagicNumber,0,Lime);
if(ticket<0)
{Print("Error: ",GetLastError()); return(0);**
LastBuyPrice=FindLastBuyPrice();
TradeNow=false;
NewOrdersPlaced=true;
**//#
**
**
**
if (TradeNow && total<1)
{
double PrevCl=iClose(Symbol(),0,2);
double CurrCl=iClose(Symbol(),0,1);
SellLimit=Bid;
BuyLimit=Ask;
if(!ShortTrade && !LongTrade)
{
NumOfTrades=total;
if(PrevCl > CurrCl)
{
iLots=fGetLots(OP_SELL);
if(iLots>0)
{//#
ticket=OpenPendingOrder(OP_SELL,iLots,SellLimit,slip,SellLimit,0,0,EAName+"-"+NumOfTrades,MagicNumber,0,HotPink);
if(ticket<0){Print(iLots,"Error: ",GetLastError()); return(0);
**
LastBuyPrice=FindLastBuyPrice();
NewOrdersPlaced=true;
**//#
**
else
{
iLots=fGetLots(OP_BUY);
if(iLots>0)
{//#
ticket=OpenPendingOrder(OP_BUY,iLots,BuyLimit,slip,BuyLimit,0,0,EAName+"-"+NumOfTrades,MagicNumber,0,Lime);
if(ticket<0){Print(iLots,"Error: ",GetLastError()); return(0);**
LastSellPrice=FindLastSellPrice();
NewOrdersPlaced=true;
**//#
**
**
if(ticket>0) expiration=CurTime()+MaxTradeOpenHours*60*60;
TradeNow=false;
**
//----------------------- CALCULATE AVERAGE OPENING PRICE
total=CountTrades();
AveragePrice=0;
double Count=0;
for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
AveragePrice=AveragePrice+OrderOpenPrice()*OrderLots();
Count=Count + OrderLots();
**
**
if(total > 0)
AveragePrice=NormalizeDouble(AveragePrice/Count, Digits);
//----------------------- RECALCULATE STOPLOSS & PROFIT TARGET BASED ON AVERAGE OPENING PRICE
if(NewOrdersPlaced)
for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_BUY) // Calculate profit/stop target for long
{
PriceTarget=AveragePrice+(TakeProfit*Point);
BuyTarget=PriceTarget;
Stopper=AveragePrice-(Stoploss*Point);
// Stopper=0;
flag=1;
**
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_SELL) // Calculate profit/stop target for short
{
PriceTarget=AveragePrice-(TakeProfit*Point);
SellTarget=PriceTarget;
Stopper=AveragePrice+(Stoploss*Point);
// Stopper=0;
flag=1;
**
**
//----------------------- IF NEEDED CHANGE ALL OPEN ORDERS TO NEWLY CALCULATED PROFIT TARGET
if(NewOrdersPlaced)
if(flag==1)// check if average has really changed
{
for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
// PriceTarget=total;
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
// OrderModify(OrderTicket(),0,Stopper,PriceTarget,0,Yellow);// set all positions to averaged levels
OrderModify(OrderTicket(),AveragePrice,OrderStopLoss(),PriceTarget,0,Yellow);// set all positions to averaged levels
NewOrdersPlaced=false;
**
**
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double ND(double v){return(NormalizeDouble(v,Digits));**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int fOrderCloseMarket(bool aCloseBuy=true,bool aCloseSell=true)
{
int tErr=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY && aCloseBuy)
{
RefreshRates();
if(!IsTradeContextBusy())
{
if(!OrderClose(OrderTicket(),OrderLots(),ND(Bid),5,CLR_NONE))
{
Print("Error close BUY "+OrderTicket());//+" "+fMyErDesc(GetLastError()));
tErr=-1;
**
**
else
{
static int lt1=0;
if(lt1!=iTime(NULL,0,0))
{
lt1=iTime(NULL,0,0);
Print("Need close BUY "+OrderTicket()+". Trade Context Busy");
**
return(-2);
**
**
if(OrderType()==OP_SELL && aCloseSell)
{
RefreshRates();
if(!IsTradeContextBusy())
{
if(!OrderClose(OrderTicket(),OrderLots(),ND(Ask),5,CLR_NONE))
{
Print("Error close SELL "+OrderTicket());//+" "+fMyErDesc(GetLastError()));
tErr=-1;
**
**
else
{
static int lt2=0;
if(lt2!=iTime(NULL,0,0))
{
lt2=iTime(NULL,0,0);
Print("Need close SELL "+OrderTicket()+". Trade Context Busy");
**
return(-2);
**
**
**
**
**
return(tErr);
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double fGetLots(int aTradeType)
{
double tLots;
switch(MMType)
{
case 0:
tLots=Lots;
break;
case 1:
tLots=NormalizeDouble(Lots*MathPow(LotExponent,NumOfTrades),LotsDigits);
break;
case 2:
int LastClosedTime=0;
tLots=Lots;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(LastClosedTime<OrderCloseTime())
{
LastClosedTime=OrderCloseTime();
if(OrderProfit()<0)
{
tLots=NormalizeDouble(OrderLots()*LotExponent,LotsDigits);
**
else
{
tLots=Lots;
**
**
**
**
else
{
return(-3);
**
**
break;
**
if(AccountFreeMarginCheck(Symbol(),aTradeType,tLots)<=0)
{
return(-1);
**
if(GetLastError()==134)
{
return(-2);
**
return(tLots);
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_SELL || OrderType()==OP_BUY)
count++;
**//for
return(count);
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseThisSymbolAll()
{
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol())
continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber()== MagicNumber)
{
if(OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),Bid,slip,Blue);
if(OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,slip,Red);
**
Sleep(1000);
**
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OpenPendingOrder(int pType,double pLots,double pLevel,int sp, double pr, int sl, int tp,string pComment,int pMagic,datetime pExpiration,color pColor)
{
int ticket=0;
int err=0;
int c=0;
int NumberOfTries=100;
switch(pType)
{
case OP_BUYLIMIT:
for(c=0;c < NumberOfTries;c++)
{
ticket=OrderSend(Symbol(),OP_BUYLIMIT,pLots,pLevel,sp,StopLong(pr,sl),TakeLong(pLevel,tp),pComment,pMagic,pExpiration,pColor);
err=GetLastError();
if(err==0)
{
break;
**
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(1000);
continue;
**
else //normal error
{
break;
**
**
**
break;
case OP_BUYSTOP:
for(c=0;c < NumberOfTries;c++)
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,pLots,pLevel,sp,StopLong(pr,sl),TakeLong(pLevel,tp),pComment,pMagic,pExpiration,pColor);
err=GetLastError();
if(err==0)
{
break;
**
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
continue;
**
else //normal error
{
break;
**
**
**
break;
case OP_BUY:
for(c=0;c < NumberOfTries;c++)
{
RefreshRates();
ticket=OrderSend(Symbol(),OP_BUY,pLots,Ask,sp,StopLong(Bid,sl),TakeLong(Ask,tp),pComment,pMagic,pExpiration,pColor);
err=GetLastError();
if(err==0)
{
break;
**
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
continue;
**
else //normal error
{
break;
**
**
**
break;
case OP_SELLLIMIT:
for(c=0;c < NumberOfTries;c++)
{
ticket=OrderSend(Symbol(),OP_SELLLIMIT,pLots,pLevel,sp,StopShort(pr,sl),TakeShort(pLevel,tp),pComment,pMagic,pExpiration,pColor);
err=GetLastError();
if(err==0)
{
break;
**
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
continue;
**
else //normal error
{
break;
**
**
**
break;
case OP_SELLSTOP:
for(c=0;c < NumberOfTries;c++)
{
ticket=OrderSend(Symbol(),OP_SELLSTOP,pLots,pLevel,sp,StopShort(pr,sl),TakeShort(pLevel,tp),pComment,pMagic,pExpiration,pColor);
err=GetLastError();
if(err==0)
{
break;
**
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
continue;
**
else //normal error
{
break;
**
**
**
break;
case OP_SELL:
for(c=0;c < NumberOfTries;c++)
{
ticket=OrderSend(Symbol(),OP_SELL,pLots,Bid,sp,StopShort(Ask,sl),TakeShort(Bid,tp),pComment,pMagic,pExpiration,pColor);
err=GetLastError();
if(err==0)
{
break;
**
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
continue;
**
else //normal error
{
break;
**
**
**
break;
**

return(ticket);
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double StopLong(double price,int stop)
{
if(stop==0)
return(0);
else
return(price-(stop*Point));
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double StopShort(double price,int stop)
{
if(stop==0)
return(0);
else
return(price+(stop*Point));
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double TakeLong(double price,int take)
{
if(take==0)
return(0);
else
return(price+(take*Point));
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double TakeShort(double price,int take)
{
if(take==0)
return(0);
else
return(price-(take*Point));
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double CalculateProfit()
{
double Profit=0;
for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
Profit=Profit+OrderProfit();
**
**
return(Profit);
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void TrailingAlls(int start,int stop, double AvgPrice)
{
int profit;
double stoptrade;
double stopcal;
if(stop==0)
return;
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
{
if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol()||OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
profit=NormalizeDouble((Bid-AvgPrice)/Point,0);
if(profit<start)
continue;
stoptrade=OrderStopLoss();
stopcal=Bid-(stop*Point);
if(stoptrade==0||(stoptrade!=0&&stopcal>stoptrade))
// OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Blue);
OrderModify(OrderTicket(),AvgPrice,stopcal,OrderTakeProfit(),0,Aqua);
**//Long
if(OrderType()==OP_SELL)
{
profit=NormalizeDouble((AvgPrice-Ask)/Point,0);
if(profit<start)
continue;
stoptrade=OrderStopLoss();
stopcal=Ask+(stop*Point);
if(stoptrade==0||(stoptrade!=0&&stopcal<stoptrade))
// OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Red);
OrderModify(OrderTicket(),AvgPrice,stopcal,OrderTakeProfit(),0,Red);
**//Shrt
**
Sleep(1000);
**//for
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double AccountEquityHigh()
{
static double AccountEquityHighAmt,PrevEquity;
if(CountTrades()==0) AccountEquityHighAmt=AccountEquity();
if(AccountEquityHighAmt < PrevEquity) AccountEquityHighAmt=PrevEquity;
else AccountEquityHighAmt=AccountEquity();
PrevEquity=AccountEquity();
return(AccountEquityHighAmt);
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double FindLastBuyPrice()
{
double oldorderopenprice=0, orderprice;
int cnt, oldticketnumber=0, ticketnumber;
for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY)
{
ticketnumber=OrderTicket();
if(ticketnumber>oldticketnumber)
{
orderprice=OrderOpenPrice();
oldorderopenprice=orderprice;
oldticketnumber=ticketnumber;
**
**
**
return(orderprice);
**
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double FindLastSellPrice()
{
double oldorderopenprice=0, orderprice;
int cnt, oldticketnumber=0, ticketnumber;
for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL)
{
ticketnumber=OrderTicket();
if(ticketnumber>oldticketnumber)
{
orderprice=OrderOpenPrice();
oldorderopenprice=orderprice;
oldticketnumber=ticketnumber;
**
**
**
return(orderprice);
**
//+------------------------------------------------------------------+



Indikator :



//+------------------------------------------------------------------+
//| 3_Level_ZZ_Semafor.mq4 |
//+------------------------------------------------------------------+
#property copyright "asystem2000"
#property link "[email protected]"

//  îñíîâó ðàñ÷åòà çèãçàãà âçÿò àëãîðèòì [email protected]
// Çà ÷òî åìó îãðîìíîå ñïàñèáî

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Chocolate
#property indicator_color2 Chocolate
#property indicator_color3 MediumVioletRed
#property indicator_color4 MediumVioletRed
#property indicator_color5 Yellow
#property indicator_color6 Yellow

//---- input parameters
extern double Period1=5;
extern double Period2=13;
extern double Period3=34;
extern string Dev_Step_1="1,3";
extern string Dev_Step_2="8,5";
extern string Dev_Step_3="21,12";
extern int Symbol_1_Kod=140;
extern int Symbol_2_Kod=141;
extern int Symbol_3_Kod=142;

//---- buffers
double FP_BuferUp[];
double FP_BuferDn[];
double NP_BuferUp[];
double NP_BuferDn[];
double HP_BuferUp[];
double HP_BuferDn[];

int F_Period;
int N_Period;
int H_Period;
int Dev1;
int Stp1;
int Dev2;
int Stp2;
int Dev3;
int Stp3;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
// --------- Êîððåêòèðóåì ïåðèîäû äëÿ ïîñòðîåíèÿ ÇèãÇàãîâ
if (Period1>0) F_Period=MathCeil(Period1*Period()); else F_Period=0;
if (Period2>0) N_Period=MathCeil(Period2*Period()); else N_Period=0;
if (Period3>0) H_Period=MathCeil(Period3*Period()); else H_Period=0;

//---- Îáðàáàòûâàåì 1 áóôåð
if (Period1>0)
{
SetIndexStyle(0,DRAW_ARROW,0,1);
SetIndexArrow(0,Symbol_1_Kod);
SetIndexBuffer(0,FP_BuferUp);
SetIndexEmptyValue(0,0.0);

SetIndexStyle(1,DRAW_ARROW,0,1);
SetIndexArrow(1,Symbol_1_Kod);
SetIndexBuffer(1,FP_BuferDn);
SetIndexEmptyValue(1,0.0);
**

//---- Îáðàáàòûâàåì 2 áóôåð
if (Period2>0)
{
SetIndexStyle(2,DRAW_ARROW,0,2);
SetIndexArrow(2,Symbol_2_Kod);
SetIndexBuffer(2,NP_BuferUp);
SetIndexEmptyValue(2,0.0);

SetIndexStyle(3,DRAW_ARROW,0,2);
SetIndexArrow(3,Symbol_2_Kod);
SetIndexBuffer(3,NP_BuferDn);
SetIndexEmptyValue(3,0.0);
**
//---- Îáðàáàòûâàåì 3 áóôåð
if (Period3>0)
{
SetIndexStyle(4,DRAW_ARROW,0,4);
SetIndexArrow(4,Symbol_3_Kod);
SetIndexBuffer(4,HP_BuferUp);
SetIndexEmptyValue(4,0.0);

SetIndexStyle(5,DRAW_ARROW,0,4);
SetIndexArrow(5,Symbol_3_Kod);
SetIndexBuffer(5,HP_BuferDn);
SetIndexEmptyValue(5,0.0);
**
// Îáðàáàòûâàåì çíà÷åíèÿ äåâèàöèé è øàãîâ
int CDev=0;
int CSt=0;
int Mass[];
int C=0;
if (IntFromStr(Dev_Step_1,C, Mass)==1)
{
Stp1=Mass[1];
Dev1=Mass[0];
**

if (IntFromStr(Dev_Step_2,C, Mass)==1)
{
Stp2=Mass[1];
Dev2=Mass[0];
**


if (IntFromStr(Dev_Step_3,C, Mass)==1)
{
Stp3=Mass[1];
Dev3=Mass[0];
**
return(0);
**
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
**

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
if (Period1>0) CountZZ(FP_BuferUp,FP_BuferDn,Period1,Dev1,Stp1);
if (Period2>0) CountZZ(NP_BuferUp,NP_BuferDn,Period2,Dev2,Stp2);
if (Period3>0) CountZZ(HP_BuferUp,HP_BuferDn,Period3,Dev3,Stp3);
return(0);
**
//+------------------------------------------------------------------+
// äîïîëíèòåëüíûå ôóíêöèè
//int Take



//+------------------------------------------------------------------+
//| Ôóíêö ôîðìèðîâàíèÿ ÇèãÇàãà |
//+------------------------------------------------------------------+
int CountZZ( double& ExtMapBuffer[], double& ExtMapBuffer2[], int ExtDepth, int ExtDeviation, int ExtBackstep )
{
int shift, back,lasthighpos,lastlowpos;
double val,res;
double curlow,curhigh,lasthigh,lastlow;

for(shift=Bars-ExtDepth; shift>=0; shift--)
{
val=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)];
if(val==lastlow) val=0.0;
else
{
lastlow=val;
if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=ExtMapBuffer[shift+back];
if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0;
**
**
**

ExtMapBuffer[shift]=val;
//--- high
val=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)];
if(val==lasthigh) val=0.0;
else
{
lasthigh=val;
if((val-High[shift])>(ExtDeviation*Point)) val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=ExtMapBuffer2[shift+back];
if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0;
**
**
**
ExtMapBuffer2[shift]=val;
**
// final cutting
lasthigh=-1; lasthighpos=-1;
lastlow=-1; lastlowpos=-1;

for(shift=Bars-ExtDepth; shift>=0; shift--)
{
curlow=ExtMapBuffer[shift];
curhigh=ExtMapBuffer2[shift];
if((curlow==0)&&(curhigh==0)) continue;
//---
if(curhigh!=0)
{
if(lasthigh>0)
{
if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
else ExtMapBuffer2[shift]=0;
**
//---
if(lasthigh<curhigh || lasthigh<0)
{
lasthigh=curhigh;
lasthighpos=shift;
**
lastlow=-1;
**
//----
if(curlow!=0)
{
if(lastlow>0)
{
if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
else ExtMapBuffer[shift]=0;
**
//---
if((curlow<lastlow)||(lastlow<0))
{
lastlow=curlow;
lastlowpos=shift;
**
lasthigh=-1;
**
**

for(shift=Bars-1; shift>=0; shift--)
{
if(shift>=Bars-ExtDepth) ExtMapBuffer[shift]=0.0;
else
{
res=ExtMapBuffer2[shift];
if(res!=0.0) ExtMapBuffer2[shift]=res;
**
**
**

int Str2Massive(string VStr, int& M_Count, int& VMass[])
{
int val=StrToInteger( VStr);
if (val>0)
{
M_Count++;
int mc=ArrayResize(VMass,M_Count);
if (mc==0)return(-1);
VMass[M_Count-1]=val;
return(1);
**
else return(0);
**


int IntFromStr(string ValStr,int& M_Count, int& VMass[])
{

if (StringLen(ValStr)==0) return(-1);
string SS=ValStr;
int NP=0;
string CS;
M_Count=0;
ArrayResize(VMass,M_Count);
while (StringLen(SS)>0)
{
NP=StringFind(SS,",");
if (NP>0)
{
CS=StringSubstr(SS,0,NP);
SS=StringSubstr(SS,NP+1,StringLen(SS));
**
else
{
if (StringLen(SS)>0)
{
CS=SS;
SS="";
**
**
if (Str2Massive(CS,M_Count,VMass)==0)
{
return(-2);
**
**
return(1);
**
 
Last edited:
Hmmmmm,,, itu bahasa mql membingungkan banget gan, saya bisa tidak ya belajar koding EA?? kliatannya sulit banget
 
coding bro Aiman is one of the best reference kalau nak belajar MQL.

kalau pakai EA gak prlu belajar saya kira , kita tinggal beli EA yang recordnya bagus tiunggal pasang ...tunggu propit
 

Live Forex Chart

Currency
Rates
EUR / USD
1.14790
USD / JPY
156.877
GBP / USD
1.33950
USD / CHF
0.82250
USD / CAD
1.39985
EUR / JPY
180.080
AUD / USD
0.71320
Back
Top
Log in Register