Results 1 to 2 of 2
 0 Attachment(s)    

Thread: EA section for alternative power system help martin : (: (

  1. #1
    Junior Member
    Join Date
    Jul 2011
    Posts
    2

    Thumbs up EA section for alternative power system help martin : (: (

    The first part of the process, plus lots of power when the robot martin. I sample 0.1, 0.2, 0.4, 0.8 to 0.1 + when you have made. I also owe each plus 0.1 0.8 not actively operates come back to the previous 0.4. -0.1, -0.2, -0.4, 0.4 + 0.8 as the next purchase

  2. #2
    Junior Member
    Join Date
    Jul 2011
    Posts
    2

    Default

    D'ALEMBERT ADD Modify robot HELP !!!!

    The first part of the process, plus lots of power when the robot martin. I sample 0.1, 0.2, 0.4, 0.8 to 0.1 + when you have made. I also owe each plus 0.1 0.8 not actively operates come back to the previous 0.4. -0.1, -0.2, -0.4, 0.4 + 0.8 as the next purchase



    #include <stdlib.mqh>

    #define acct 0 //if not 0 then will work only on this account number
    #define expireD 30
    #define expireM 12
    #define expireY 2011
    string Expire_Message = "Your trial period is over!";

    extern int expertId = 183547;
    extern int TakeProfit=60;
    extern int StopLoss=15;
    extern int BreakevenStop = 30;

    extern bool TimeEntry=true;
    extern string StartTime="7:00";
    extern string StopTime="17:00";
    extern bool PriceEntry=false;
    extern double Price=1.5500;
    extern bool FirstLong=false;
    extern string LotsProgression="0.01;0.01;0.02;0.03;0.04;0.06;0.0 8;.11;.15;.20;.27;.36;.47;.62;.80;1.02;1.30;1.65;2 .08;2.63;3.31;4.16;5.22;6.55;8.25;10.39;13.09;16.5 9;20.79;26.25;33.01;41.65;52.47;66.11";
    extern bool RestartNewCycle = true;

    extern int slippage=3; //slippage for market order processing
    extern int OrderTriesNumber=10; //to repeat sending orders when you receive an error or requote

    extern string EAName="PowerSM";

    bool buysig,sellsig,cycleended;
    int tries,long,short,co,plen,lord,mord,lpos;
    double Lot,lots[],tlot,lop,lcp,lsl,ltp;

    double lbid = -1;

    int counter = 0;

    int init()
    {
    int i,j,k;
    string ls;
    while (true) {
    j=StringFind(LotsProgression,";",i);
    if (j>0) {
    ls=StringSubstr(LotsProgression,i,j-i);
    i=j+1;
    k++;
    ArrayResize(lots,k);
    lots[k-1]=StrToDouble(ls);
    } else {
    ls=StringSubstr(LotsProgression,i);
    k++;
    ArrayResize(lots,k);
    lots[k-1]=StrToDouble(ls);
    break;
    }
    }

    plen=ArraySize(lots);
    }

    void start() {
    if (Year()*10000+Month()*100+Day()>=expireY*10000+exp ireM*100+expireD) {
    Alert("Expire_Message");
    double d1;
    d1=2/d1;
    return(-1);
    }
    if (acct!=0 && AccountNumber()!=acct) {
    Alert("EA will not work on this account number");
    double d;
    d=2/d;
    return(-1);
    }
    //---- check for history and trading
    if(Bars<100 || IsTradeAllowed()==false) return;

    if (lbid == -1) lbid = Bid;

    co=CalculateCurrentOrders();
    if (co > 0) counter = 1;

    CheckForSignals();
    CheckForOpen();
    DoBreakEven(BreakevenStop,0);

    lbid = Bid;
    }


    int CalculateCurrentOrders() {
    int ord; string c;
    //----
    for(int i=0;i<OrdersTotal();i++) {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false ) break;
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==expertId) {
    ord++;
    if (OrderType()==OP_BUY) {
    mord=1;
    if (OrderClosePrice()-OrderOpenPrice()>BreakevenStop*Point) tlot=MathAbs(tlot); else tlot=-MathAbs(tlot);
    }
    if (OrderType()==OP_SELL) {
    mord=-1;
    if (-OrderClosePrice()+OrderOpenPrice()>BreakevenStop*P oint) tlot=MathAbs(tlot); else tlot=-MathAbs(tlot);
    }
    c=StringSubstr(OrderComment(),0,StringFind(OrderCo mment(),"_",0));
    lpos=StrToInteger(c);
    return(ord);
    }
    }
    //---- return orders volume
    return(ord);
    }

    double GetLastTrade()
    {
    int ord; lord=0;
    string c;
    //----
    for(int i=OrdersHistoryTotal()-1;i>=0;i--)
    {
    if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==expertId)
    {
    if (OrderType()==OP_BUY) lord=1;
    if (OrderType()==OP_SELL) lord=-1;
    c=StringSubstr(OrderComment(),0,StringFind(OrderCo mment(),"_",0));
    lpos=StrToInteger(c);

    lop = NormalizeDouble(OrderOpenPrice(), Digits);
    lcp = NormalizeDouble(OrderClosePrice(), Digits);
    lsl = NormalizeDouble(OrderStopLoss(), Digits);
    ltp = NormalizeDouble(OrderTakeProfit(), Digits);

    if (OrderProfit()>0)
    return(OrderLots());
    else
    return(-OrderLots());
    }
    }
    return(0);
    }

    bool IsEntryTime()
    {
    datetime tm0 = TimeCurrent();
    datetime tm1 = StrToTime(TimeToStr(tm0, TIME_DATE) + " " + StartTime);
    datetime tm2 = StrToTime(TimeToStr(tm0, TIME_DATE) + " " + StopTime);

    bool isTm = false;
    if (tm1 <= tm2)
    isTm = isTm || (tm1 <= tm0 && tm0 < tm2);
    else
    isTm = isTm || (tm1 <= tm0 || tm0 < tm2);

    return (isTm);
    }

    void CheckForSignals()
    {
    buysig = false;
    sellsig = false;

    if (co > 0) return;

    if (TimeEntry)
    {
    bool cond = IsEntryTime();
    if (!cond) return;
    }

    if (PriceEntry)
    {
    cond = ((Bid >= Price && lbid < Price) || (Bid <= Price && lbid > Price));
    if (!cond) return;
    }

    double lastlot = GetLastTrade();
    if (lastlot >= 0)
    {
    if (counter > 0)
    {
    if (!RestartNewCycle) return;
    }

    if (FirstLong)
    buysig = true;
    else
    sellsig = true;

    lpos = 0;
    Lot = lots[0];
    }

    else
    {
    lpos++;

    int BE = 0;
    if (lord > 0 && lcp == lop+BE*Point) lpos--;
    if (lord < 0 && lcp == lop-BE*Point) lpos--;

    Lot = lots[lpos];
    if (lord > 0)
    sellsig = true;
    else if (lord < 0)
    buysig = true;
    }
    }

    void CheckForOpen() {
    int res,tr,TP;
    //---- sell conditions
    if(sellsig && co==0) {
    Print("sell open ",Lot," ",lpos);
    res = OpenAtMarket(OP_SELL,Lot,TakeProfit,lpos);
    if (res>0) { tlot=Lot; }
    return;
    }
    //---- buy conditions
    if(buysig && co==0) {
    Print("buy open ",Lot," ",lpos);
    res = OpenAtMarket(OP_BUY,Lot,TakeProfit,lpos);
    if (res>0) { tlot=Lot; }
    return;
    }
    }

    int OpenAtMarket(int mode,double lot,int TP,int pos) {
    int res,tr,col;
    double openprice,sl,tp;
    tries=0;
    while (res<=0 && tries<OrderTriesNumber) {
    tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }
    RefreshRates();
    if (mode==OP_SELL) {
    openprice=Bid;
    if (StopLoss>0) sl=openprice+StopLoss*Point;
    if (TP>0) tp=openprice-TP*Point;
    col=Red;
    } else {
    openprice=Ask;
    if (StopLoss>0) sl=openprice-StopLoss*Point;
    if (TP>0) tp=openprice+TP*Point;
    col=Blue;
    }
    res=OrderSend(Symbol(),mode,lot,openprice,slippage ,sl,tp,pos+"_"+EAName+"_"+expertId,expertId,0,col) ;
    tries++;
    }
    Print("market order:: ",Symbol()," ",mode," ",lot," ",openprice," ",sl," ",tp," ",pos+"_"+EAName+"_"+expertId);
    if (res<=0) Print("error opening order : ",ErrorDescription(GetLastError()));
    return(res);
    }


    void DoBreakEven(int BP, int BE) {
    bool bres;
    for (int i = 0; i < OrdersTotal(); i++) {
    if ( !OrderSelect (i, SELECT_BY_POS) ) continue;
    if ( OrderSymbol() != Symbol() || OrderMagicNumber() != expertId ) continue;
    if ( OrderType() == OP_BUY ) {
    if (Bid<OrderOpenPrice()+BP*Point) continue;
    if ( OrderOpenPrice()+BE*Point-OrderStopLoss()>Point/10) {
    //Print(BP," ",BE," bestop");
    bres=OrderModify (OrderTicket(), OrderOpenPrice(), OrderOpenPrice()+BE*Point, OrderTakeProfit(), 0, Black);
    if (!bres) Print("Error Modifying BE BUY order : ",ErrorDescription(GetLastError()));
    }
    }

    if ( OrderType() == OP_SELL ) {
    if (Ask>OrderOpenPrice()-BP*Point) continue;
    if ( OrderStopLoss()-(OrderOpenPrice()-BE*Point)>Point/10) {
    //Print(BP," ",BE," bestop");
    bres=OrderModify (OrderTicket(), OrderOpenPrice(), OrderOpenPrice()-BE*Point, OrderTakeProfit(), 0, Gold);
    if (!bres) Print("Error Modifying BE SELL order : ",ErrorDescription(GetLastError()));
    }
    }
    }
    return;
    }

    /*
    int FindPos(double ls) {
    for (int i=0; i<plen; i++) {
    if (NormalizeDouble(MathAbs(lots[i]-ls),3)<0.001) return(i);
    }
    return(-1);
    }
    */
    Last edited by ByUltrason; 10-17-2011 at 14:07.

Similar Threads

  1. Alternative to MT4 and MT5 Strategy Tester
    By fxtester in forum Softwares
    Replies: 2
    Last Post: 09-01-2014, 20:27
  2. Lovoo, alternative to Tinder
    By fxtester in forum General discussion
    Replies: 0
    Last Post: 04-11-2014, 15:16
  3. Replies: 3
    Last Post: 08-11-2013, 16:21
  4. Martin Alexander System
    By silverngold in forum Ideas for expert advisors
    Replies: 0
    Last Post: 02-07-2009, 15:00

Tags for this Thread

100, gold, power, robot, sample, slippage, stoploss, system

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •