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

Cara Coding EA AutoLock(Mengunci Posisi Buy-sell)

Discussion in 'Belajar MQL dari Nol' started by k2traders, 09 Jan 2019.

  1. k2traders

    k2traders New Member

    Equity
    Credit
    Ref Point
    Selamat Pagi Master ...

    Berikut Skema Ea:
    Jika Ea Martingale Floating Diharga Tertentu Misal 300 Dollar, Maka Ea Akan Melakukan Hedging Full , Artinya Ea akan Membuka Posisi Yang Berlawanan Dengan Jumlah Lot Yang Sama Buy Dan Sell, Tanpa Membuka Op Lagi.
    ------>Pemahaman Saya Seorang Pemula Yang Lagi Belajar, Mungkin Dibuatkan Dahulu Logic Menghitung Jumlahn Lot Buy Dan Sell Yang Misalnya Saya Ibaratkan TlotBuy Dan TlotSell, Jadi Saya Coba Tuangkan Konsep Tersebut Menjadi Logic Sebagai Berikut:

    "Jika Total Floating Minus = 300 Dan OpBuy Atau OpSell Maka Ea Lakukan hedging Dengan TlotBuy Dan TLotsell sama Dan Ea Tidak Melakukan Op Lagi"

    Pertanyaan Saya :

    1. Apakah Logicnya Sudah benar Atau Ada Solusi lainnya
    2.Bagaimana Membuat Perintah Hedging Di Mql4 Sesuai Dengan Logic Diatas


    Terima Kasih Atas Perhatiannya


    wassalam
    #maubelajarmql4
     
  2. domain

    domain New Member

    Equity
    Credit
    Ref Point
    Logikanya.
    1. buat parameter input jumlah loss yg diinginkan.
    2. buat parameter bool untuk trade. isikan true.
    3. buat pengenal order buy & sell, total lots masing2 order, total profit masing2 order. dengan apa?
    coba lihat di manual mql4. loop operator
    4. jika profitbuy < jumlah loss maka kirim order berlawanan dengan total lots yg sdh ada
    vice versa
    5. jika total lots buy sama dengan sell.. maka parameter pada nomor 2, diisi false
     
  3. k2traders

    k2traders New Member

    Equity
    Credit
    Ref Point
    ==================================================
    berikut coding yang saya lakukan sesuai petujuk diatas:

    extern int maxlosshedging=300;
    extern bool trade=true;


    //==== menghitung total lot buy dan sell
    double CalculateLotsBuy1()
    {
    totalBuyLots = 0;


    for(int i=0; i < OrdersTotal(); i++)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
    {
    //if(OrderSymbol() == Symbol())
    {
    if(OrderType() == OP_BUY)
    totalBuyLots += OrderLots();

    }
    }
    } return(0);}


    double CalculateLotsSell1()
    {
    totalSellLots = 0;

    for(int i=0; i < OrdersTotal(); i++)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
    {
    //if(OrderSymbol() == Symbol())
    {
    if(OrderType() == OP_SELL)
    totalSellLots += OrderLots();

    }
    } return(0);}
    //==== menghitung total lot buy dan sell

    //=============================== meghitung total profit masing buy dan sell

    int BuyProfit ()
    {
    int TotalBuyProfit = 0;
    for(int iPos= OrdersTotal()-1; iPos >= 0; iPos--)
    if(OrderSelect(iPos, SELECT_BY_POS)
    && OrderMagicNumber() == Magic
    && OrderSymbol() == Symbol()
    && OrderType() == OP_BUY )
    TotalBuyProfit += OrderProfit()+OrderSwap()+OrderCommission();
    return (TotalBuyProfit);
    }
    //==========menghitung total profit buy dan sell
    int SellProfit ()
    {
    int TotalSellProfit = 0;
    for(int iPos= OrdersTotal()-1; iPos >= 0; iPos--)
    if(OrderSelect(iPos, SELECT_BY_POS)
    && OrderMagicNumber() == Magic
    && OrderSymbol() == Symbol()
    && OrderType() == OP_SELL )
    TotalSellProfit += OrderProfit()+OrderSwap()+OrderCommission();
    return (TotalSellProfit);
    }
    //=============================== meghitung total profit masing buy dan sell



    //==========================sending order berlawanan

    if(BuyProfit() < maxlosshedging && trade==true){



    tiketbuy=OrderSend(Symbol(),OP_SELL,totalBuyLots,Bid,slippage,0,0,Comment_,Magic,0,Blue);
    }
    else

    if(SellProfit() < maxlosshedging && trade==true){

    tiketsell=OrderSend(Symbol(),OP_BUY,totalSellLots,Ask,slippage,0,0,Comment_,Magic,0,Red);
    //ExpertRemove()
    ;return;}

    if(totalSellLots==totalBuyLots)
    {trade=false;}
    //==========================sending order berlawanan

    Pertanyaan saya ,masih ada pesan error :
    invalid lots amount for OrderSend function
    OrderSend error 4051
    dan ea tidak bisa memasang posisi kuncian .
    saya lihat berarti masih ada kesalahan di cara memasukkan lot kuncian


    Mohon Bantuan Pencerahannya
     
  4. domain

    domain New Member

    Equity
    Credit
    Ref Point
    mestinya untuk jumlah lots pake ini kan?
    CalculateLotsSell1() dan CalculateLotsBuy1
    kenapa jadi totalBuyLots dan totalSellLots
     
  5. domain

    domain New Member

    Equity
    Credit
    Ref Point
    int BuyProfit ()
    {
    int TotalBuyProfit = 0;
    for(int iPos= OrdersTotal()-1; iPos >= 0; iPos--)
    if(OrderSelect(iPos, SELECT_BY_POS)
    && OrderMagicNumber() == Magic
    && OrderSymbol() == Symbol()
    && OrderType() == OP_BUY )
    TotalBuyProfit += OrderProfit()+OrderSwap()+OrderCommission();
    return (TotalBuyProfit);
    }
    ini kan bisa digabung..
    contoh
    Code:
    int CheckProfit(int op)
    {
    int TotalProfit= 0;
    for(int iPos= OrdersTotal()-1; iPos >= 0; iPos--)
    if(OrderSelect(iPos, SELECT_BY_POS)
    && OrderMagicNumber() == Magic
    && OrderSymbol() == Symbol()
    && OrderType() == op)
    TotalProfit+= OrderProfit()+OrderSwap()+OrderCommission();
    return (TotalProfit);
    }
    jika kita mau cek profit sell tinggal panggil
    CheckProfit(OP_SELL)
    begitu pula sebaliknya
    CheckProfit(OP_BUY)
     

Share This Page