1. Welcome back! Thank you for being a part of this Traders Community. Let's discuss and share :)
    Selamat datang kembali! Trimakasih telah menjadi bagian dari Komunitas Trader ini. Mari berdiskusi dan berbagi :)
    Dismiss Notice

Question Minta solusi biar closing di 40 pips gimana mohon pencrahanya

Discussion in 'Belajar MQL dari Nol' started by wasisgondrong, 06 Feb 2017.

  1. wasisgondrong

    wasisgondrong New Member

    Equity
    Credit
    Ref Point
    solusi . ni crosing 18 - 36
    biar bisa closing + 40 persis gimana caranya
    //+------------------------------------------------------------------+
    //| MACONTES 1836.mq4 |
    //| Copyright 2017, MetaQuotes Software Corp. |
    //| https://www.mql5.com |
    //+------------------------------------------------------------------+
    [HASHTAG]#property[/HASHTAG] copyright "Copyright 2017, MetaQuotes Software Corp."
    [HASHTAG]#property[/HASHTAG] link "https://www.mql5.com"
    [HASHTAG]#property[/HASHTAG] version "1.00"
    [HASHTAG]#property[/HASHTAG] strict
    [HASHTAG]#define[/HASHTAG] MAGICMA 20060301

    //---- Trades limits
    extern double TakeProfit=40;
    extern double TrailingStop=5;
    extern double StopLoss=15;
    extern bool UseStopLoss = false;

    //---- EMAs paris
    extern int ShortEma = 18;
    extern int LongEma = 36;

    //---- Crossing options
    extern bool immediate_trade = true; //Open trades immediately or wait for cross.
    extern bool reversal = true; //Use the originally reversal crossing method or not

    //---- Money Management
    extern double Lots = 1;
    extern bool MM = true; //Use Money Management or not
    extern bool AccountIsMicro = false; //Use Micro-Account or not
    extern int Risk = 10; //10%

    //---- Time Management
    extern bool UseHourTrade = false;
    extern int FromHourTrade = 0;
    extern int ToHourTrade = 48;

    extern bool Show_Settings = true;

    //---- Global varaibles
    static int TimeFrame = 0;


    //+------------------------------------------------------------------+
    //| expert initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //----
    if(Show_Settings) Print_Details();
    else Comment("");
    //----

    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    //----
    TimeFrame=Period(); //Prevent counting the cross while the user changing the timeframe
    //----
    return(0);
    }

    bool isNewSumbol(string current_symbol)
    {
    //loop through all the opened order and compare the symbols
    int total = OrdersTotal();
    for(int cnt = 0 ; cnt < total ; cnt++)
    {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    string selected_symbol = OrderSymbol();
    if (current_symbol == selected_symbol)
    return (False);
    }
    return (True);
    }

    int Crossed (double line1 , double line2)
    {
    static int last_direction = 0;
    static int current_direction = 0;

    if(TimeFrame!=Period())
    {
    TimeFrame=Period();
    return (0);
    }

    if(line1>line2)current_direction = 1; //up
    if(line1<line2)current_direction = 2; //down

    if(immediate_trade==false)
    {
    if(last_direction == 0) //first use
    {
    last_direction = current_direction;
    return(0);
    }
    }

    if(current_direction != last_direction) //changed
    {
    last_direction = current_direction;
    return (last_direction);
    }
    else
    {
    return (0); //not changed
    }
    }

    //--- Bassed on Alex idea! More ideas are coming
    double LotSize()
    {
    double lotMM = MathCeil(AccountFreeMargin() * Risk / 1000) / 100;

    if(AccountIsMicro==false) //normal account
    {
    if (lotMM < 0.1) lotMM = Lots;
    if (lotMM > 1.0) lotMM = MathCeil(lotMM);
    if (lotMM > 100) lotMM = 100;
    }
    else //micro account
    {
    if (lotMM < 0.01) lotMM = Lots;
    if (lotMM > 1.0) lotMM = MathCeil(lotMM);
    if (lotMM > 100) lotMM = 100;
    }

    return (lotMM);
    }

    string BoolToStr ( bool value)
    {
    if(value) return ("True");
    else return ("False");
    }
    void Print_Details()
    {
    string sComment = "";
    string sp = "----------------------------------------\n";
    string NL = "\n";

    sComment = sp;
    sComment = sComment + "TakeProfit=" + DoubleToStr(TakeProfit,0) + " | ";
    sComment = sComment + "TrailingStop=" + DoubleToStr(TrailingStop,0) + " | ";
    sComment = sComment + "StopLoss=" + DoubleToStr(StopLoss,0) + " | ";
    sComment = sComment + "UseStopLoss=" + BoolToStr(UseStopLoss) + NL;
    sComment = sComment + sp;
    sComment = sComment + "immediate_trade=" + BoolToStr(immediate_trade) + " | ";
    sComment = sComment + "reversal=" + BoolToStr(reversal) + NL;
    sComment = sComment + sp;
    sComment = sComment + "Lots=" + DoubleToStr(Lots,0) + " | ";
    sComment = sComment + "MM=" + BoolToStr(MM) + " | ";
    sComment = sComment + "Risk=" + DoubleToStr(Risk,0) + "%" + NL;
    sComment = sComment + sp;

    Comment(sComment);
    }

    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----

    if (UseHourTrade)
    {
    if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade))
    {
    Comment("Time for trade has not come yet!");
    return(0);
    }
    }

    int cnt, ticket, total;
    double SEma, LEma;

    string comment = "";
    if(reversal==true) comment = "EMA_CROSS_Counter-Trend";
    if(reversal==true) comment = "EMA_CROSS_Trend-Following";

    if(Bars<100)
    {
    Print("bars less than 100");
    return(0);
    }
    if(TakeProfit<10)
    {
    Print("TakeProfit less than 10");
    return(0); // check TakeProfit
    }

    SEma = iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,0);
    LEma = iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,0);



    static int isCrossed = 0;
    isCrossed = Crossed (LEma,SEma);

    if(reversal==false)
    {
    if(isCrossed==1) isCrossed=2;
    if(isCrossed==2) isCrossed=1;
    }

    if(MM==true) Lots = LotSize(); //Adjust the lot size


    total = OrdersTotal();

    if(total < 1 || isNewSumbol(Symbol()))
    {
    if(isCrossed == 1)
    {

    if(UseStopLoss)
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    else
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

    if(ticket>0)
    {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
    }
    else Print("Error opening BUY order : ",GetLastError());
    return(0);
    }
    if(isCrossed == 2)
    {
    if(UseStopLoss)
    ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);
    else
    ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

    if(ticket>0)
    {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
    }
    else Print("Error opening SELL order : ",GetLastError());
    return(0);
    }
    return(0);
    }


    for(cnt=0;cnt<total;cnt++)
    {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

    if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
    {
    if(OrderType()==OP_BUY) // long position is opened
    {
    // check for trailing stop
    if(TrailingStop>0)
    {
    if(Bid-OrderOpenPrice()>Point*TrailingStop)
    {
    if(OrderStopLoss()<Bid-Point*TrailingStop)
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
    return(0);
    }
    }
    }
    }
    else // go to short position
    {
    // check for trailing stop
    if(TrailingStop>0)
    {
    if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
    {
    if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
    return(0);
    }
    }
    }
    }
    }
    }
    return(0);
    }
    //+------------------------------------------------------------------+
     

    Attached Files:

  2. wasisgondrong

    wasisgondrong New Member

    Equity
    Credit
    Ref Point
    SELL gak bisa bidik kurang apa yaa
     

    Attached Files:

  3. james brown

    james brown Member

    Equity
    Credit
    Ref Point
    hi wasisgondrong, would you mind sending your eaplease? it doesnt opens posiitions
     
  4. HendroFX

    HendroFX Moderator Moderator

    Equity
    Credit
    Ref Point
    Maksud pertanyaannya tolong diperjelas, apa yang ingin teman teman bantu?
     

Share This Page