Problème Avec L’exécution D’un Expert Récupéré - Forex Forum

Welcome Guest ( Log In | Register )

 
> Problème Avec L’exécution D’un Expert Récupéré, Problème avec l’exécution d’un expert récupéré
kusco
post Jan 22 2009, 12:22
Post


Bonjour a tous le monde, j’ai un ami qui ma fourni un CD avec plusieurs documentations sur le trading, et dessus il y avait des experts pour MT4.

Le souci et que lui est client chez WHS, donc ne connais pas la plateforme MT4.

J’utilise la plateforme en réel depuis le moi de décembre et compte apprendre a utiliser et comprendre les experts.

Le problème est quand je désire activer l’EA fournie, il y a un message d’erreur qui est le suivant :
- 2009.01.22 12:14:30 Daily Scalp: symbol name for OrderSend function must be a string.

Pour une meilleure recherche de l’erreur je vous poste la programmation de l’EA.

Vous remerciant de bien vouloir m’éclairé.

CODE
/*[[
    Name := TDSGlobal
    Author := Copyright © 2005 Bob O'Brien / Barcode
    Link :=
    Notes := Based on Alexander Elder's Triple Screen system. To be run only on a Weekly chart.
    Lots := 1
    Stop Loss := 0
    Take Profit := 999
    Trailing Stop := 10
]]*/
//+------------------------------------------------------------------+
//|  External Variables                                              |
//+------------------------------------------------------------------+

extern int Lots = 1;
extern int TakeProfit = 999;
extern int Stoploss = 0;
extern int TrailingStop = 10;    
extern int Slippage=5;            // Slippage
extern int StopYear=2005;
extern int MM=0,Leverage=1,AcctSize=10000;
extern int WilliamsP=24,WilliamsL=-75,WilliamsH=-25;


int BuyEntryOrderTicket=0,SellEntryOrderTicket=0,cnt=0,total=0;

double MacdCurrent=0, MacdPrevious=0, MacdPrevious2=0, Direction=0, OsMAPrevious=0, OsMAPrevious2=0, OsMADirection=0;

double newbar=0,PrevDay=0,PrevMonth=0,PrevYear=0,PrevCurtime=0;

double PriceOpen=0;                                // Price Open

bool First=True;

double TradesThisSymbol=0;
double WilliamsSell=0, WilliamsBuy=0, Williams=0,NewPrice=0;
double StartMinute1=0,EndMinute1=0,StartMinute2=0,EndMinute2=0,StartMinute3=0,EndMinute
3=0;
double StartMinute4=0,EndMinute4=0,StartMinute5=0,EndMinute5=0,StartMinute6=0,EndMinute
6=0;
double StartMinute7=0,EndMinute7=0,DummyField=0;
double Lotsf=0;

int start()
{

Lotsf = MathRound(AccountBalance()/10000);

Comment("TSD for MT4 ver beta 0.2 - DO NOT USE WITH REAL MONEY YET",
        "\n",
        "\n","Weekly MacdPrevious = ",MacdPrevious,"    Weekly OsMAPrevious  = ",OsMAPrevious,
        "\n","Weekly MacdPrevious2 = ",MacdPrevious2,"    Weekly OsMAPrevious2 = ",OsMAPrevious2,
        "\n","Weekly Direction = ",Direction,"    Weekly OsMADirection = ",OsMADirection,
        "\n",
        "\n","Lotsf = ",Lotsf,
        "\n",
        "\n","Daily Williams = ",Williams,
        "\n","Is Daily Williams Bullish = ",WilliamsSell,
        "\n","Is Daily Williams Bearish = ",WilliamsBuy,
        "\n",
        "\n","Total Orders = ",total,
        "\n","Trades this Symbol(",Symbol(),") = ",TradesThisSymbol,
        "\n",
        "\n","New Bar Time is ",TimeToStr(newbar),
        "\n",
        "\n","Daily High[1] = ",High[1],
        "\n","Daily High[2] = ",High[2],
        "\n","Daily Low[1] = ",Low[1],
        "\n","Daily Low[2] = ",Low[2],
        "\n",
        "\n","Current Ask Price + 16 pips = ",Ask+(16*Point),
        "\n","Current Bid Price - 16 pips = ",Bid-(16*Point));
        
        
total=OrdersTotal();
     TradesThisSymbol=0;
      for(cnt=0;cnt<total;cnt++)
     {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
          
          if(OrderSymbol()==Symbol())
          {
            TradesThisSymbol ++;
          } // close for if(OrderSymbol()==Symbol())
      } // close for for(cnt=0;cnt<total;cnt++)        
        
        
      MacdPrevious  = iMACD(NULL,10080,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
      MacdPrevious2 = iMACD(NULL,10080,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
      
      OsMAPrevious  = iOsMA(NULL,10080,12,26,9,PRICE_CLOSE,1);
      OsMAPrevious2 = iOsMA(NULL,10080,12,26,9,PRICE_CLOSE,2);

     Williams = iWPR(NULL,1440,WilliamsP,1);
     WilliamsSell = iWPR(NULL,1440,24,1) > WilliamsL;
     WilliamsBuy  = iWPR(NULL,1440,24,1) < WilliamsH;

      if (MacdPrevious > MacdPrevious2) Direction = 1;
      if (MacdPrevious < MacdPrevious2) Direction = -1;
      if (MacdPrevious == MacdPrevious2) Direction = 0;
      
      if (OsMAPrevious > OsMAPrevious2) OsMADirection = 1;
      if (OsMAPrevious < OsMAPrevious2) OsMADirection = -1;
      if (OsMAPrevious == OsMAPrevious2) OsMADirection = 0;
      
                
    
      
// Select a range of minutes in the day to start trading based on the currency pair.
// This is to stop collisions occurring when 2 or more currencies set orders at the same time.

if(Symbol() == "USDCHF")
{
    StartMinute1 = 0;
    EndMinute1   = 1;
    StartMinute2 = 8;
    EndMinute2   = 9;
    StartMinute3 = 16;
    EndMinute3   = 17;
    StartMinute4 = 24;
    EndMinute4   = 25;
    StartMinute5 = 32;
    EndMinute5   = 33;
    StartMinute6 = 40;
    EndMinute6   = 41;
    StartMinute7 = 48;
    EndMinute7   = 49;
} // close for if(Symbol() == "USDCHF")
if(Symbol() == "GBPUSD")
{  
    StartMinute1 = 2;
    EndMinute1   = 3;
    StartMinute2 = 10;
    EndMinute2   = 11;
    StartMinute3 = 18;
    EndMinute3   = 19;
    StartMinute4 = 26;
    EndMinute4   = 27;
    StartMinute5 = 34;
    EndMinute5   = 35;
    StartMinute6 = 42;
    EndMinute6   = 43;
    StartMinute7 = 50;
    EndMinute7   = 51;
} // close for if(Symbol() == "GBPUSD")
if(Symbol() == "USDJPY")
{
    StartMinute1 = 4;
    EndMinute1   = 5;
    StartMinute2 = 12;
    EndMinute2   = 13;
    StartMinute3 = 20;
    EndMinute3   = 21;
    StartMinute4 = 28;
    EndMinute4   = 29;
    StartMinute5 = 36;
    EndMinute5   = 37;
    StartMinute6 = 44;
    EndMinute6   = 45;
    StartMinute7 = 52;
    EndMinute7   = 53;
} //close for if(Symbol() == "USDJPY")
if(Symbol() == "EURUSD")
{
    StartMinute1 = 6;
    EndMinute1   = 7;
    StartMinute2 = 14;
    EndMinute2   = 15;
    StartMinute3 = 22;
    EndMinute3   = 23;
    StartMinute4 = 30;
    EndMinute4   = 31;
    StartMinute5 = 38;
    EndMinute5   = 39;
    StartMinute6 = 46;
    EndMinute6   = 47;
    StartMinute7 = 54;
    EndMinute7   = 59;
} // close for if(Symbol() == "EURUSD")



if( (Minute() >= StartMinute1 && Minute() <= EndMinute1) ||
   (Minute() >= StartMinute2 && Minute() <= EndMinute2) ||
   (Minute() >= StartMinute3 && Minute() <= EndMinute3) ||
   (Minute() >= StartMinute4 && Minute() <= EndMinute4) ||
   (Minute() >= StartMinute5 && Minute() <= EndMinute5) ||
   (Minute() >= StartMinute6 && Minute() <= EndMinute6) ||
   (Minute() >= StartMinute7 && Minute() <= EndMinute7) )
{
    DummyField = 0; // dummy statement because MT will not allow me to use a continue statement
} // close for LARGE if statement
else return(0);

/////////////////////////////////////////////////
//  Process the next bar details
/////////////////////////////////////////////////

if (newbar != Time[0])
{
     newbar        = Time[0];
    
     if(TradesThisSymbol < 1)
     {
      
       if(Direction == 1 && WilliamsBuy)
        {
            PriceOpen = High[1] + 1 * Point;        // Buy 1 point above high of previous candle
            if(PriceOpen > (Ask + 16 * Point))  // Check if buy price is a least 16 points > Ask
            {
                BuyEntryOrderTicket=OrderSend(Symbol(),OP_BUYSTOP,Lotsf,PriceOpen,Slippage,Low[1
] - 1 * Point,PriceOpen + TakeProfit * Point,"Buy Entry Order placed at "+CurTime(),0,0,Green);
                return(0);

            } // close for if(PriceOpen > (Ask + 16 * Point))
            else
            {
               NewPrice = Ask + 16 * Point;
                BuyEntryOrderTicket=OrderSend(Symbol(),OP_BUYSTOP,Lotsf,NewPrice,Slippage,Low[1] - 1 * Point,NewPrice + TakeProfit * Point,"Buy Entry Order placed at "+CurTime(),0,0,Green);
                return(0);
            } // close for else statement
       } // close for if(Direction == 1 && WilliamsBuy)
    
    
     if(Direction == -1 && WilliamsSell)
     {
         PriceOpen = Low[1] - 1 * Point;
            if(PriceOpen < (Bid - 16 * Point)) // Check if buy price is a least 16 points < Bid
            {
                SellEntryOrderTicket=OrderSend(Symbol(),OP_SELLSTOP,Lotsf,PriceOpen,Slippage,Hig
h[1] + 1 * Point,PriceOpen - TakeProfit * Point,"Sell Entry Order placed at "+CurTime(),0,0,Green);
                return(0);
            } // close for if(PriceOpen < (Bid - 16 * Point))
            else
            {
                NewPrice = Bid - 16 * Point;
                SellEntryOrderTicket=OrderSend(Symbol(),OP_SELLSTOP,Lotsf,NewPrice,Slippage,High
[1] + 1 * Point,NewPrice - TakeProfit * Point,"Sell Entry Order placed at "+CurTime(),0,0,Green);
            return(0);            
            } // close for else statement

      } // close for if(Direction == -1 && WilliamsSell)
    } //Close of if(TradesThisSymbol < 1)


/////////////////////////////////////////////////
//  Pending Order Management
/////////////////////////////////////////////////

if(TradesThisSymbol > 0)
    {
      total=OrdersTotal();
      for(cnt=0;cnt<total;cnt++)
         {
            OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

         if(OrderSymbol()==Symbol() && OrderType()==OP_BUYSTOP)
         {

                if(Direction == -1)
                  {
                     OrderDelete(OrderTicket());
                    return(0);
                } // close for if(Direction == -1)
            } // close for if(OrderSymbol()==Symbol() && OrderType()==OP_BUYSTOP)

         if(OrderSymbol()==Symbol() && OrderType()==OP_SELLSTOP)
         {

                if(Direction == 1)
                  {
                     OrderDelete(OrderTicket());
                    return(0);
                } //close for if(Direction == 1)
            } //close for if(OrderSymbol()==Symbol() && OrderType()==OP_SELLSTOP)


         if(OrderSymbol()==Symbol() && OrderType()==OP_BUYSTOP)
          {
                if(High[1] < High[2])
                  {
                    if(High[1] > (Ask + 16 * Point))
                      {
                       OrderModify(OrderTicket(),High[1] + 1 * Point,Low[1] - 1 * Point,OrderTakeProfit(),0,Cyan);
                 return(0);                    
                      } //close for if(High[1] > (Ask + 16 * Point))
                      else
                      {
                        OrderModify(OrderTicket(),Ask + 16 * Point,Low[1] - 1 * Point,OrderTakeProfit(),0,Cyan);
                 return(0);                    
                      
                      } //close for else statement
                  } //close for if(High[1] < High[2])
              } //close for if(OrderSymbol()==Symbol() && OrderType()==OP_BUYSTOP)
      
          if(OrderSymbol()==Symbol() && OrderType()==OP_SELLSTOP)
           {
                if(Low[1] > Low[2])
                {
                    if(Low[1] < (Bid - 16 * Point))
                    {
                     OrderModify(OrderTicket(),Low[1] - 1 * Point,High[1] + 1 * Point,OrderTakeProfit(),0,Cyan);
                 return(0);                    
                    } // close for if(Low[1] < (Bid - 16 * Point))
                    else
                    {
                      OrderModify(OrderTicket(),Bid - 16 * Point,High[1] + 1 * Point,OrderTakeProfit(),0,Cyan);
                 return(0);                    
      
                    } //close for else statement
                } //close for if(Low[1] > Low[2])
            } //close for if(OrderSymbol()==Symbol() && OrderType()==OP_SELLSTOP)
        } // close for for(cnt=0;cnt<total;cnt++)
    } // close for if(TradesThisSymbol > 0)
} // close for if (newbar != Time[0])

/////////////////////////////////////////////////
//  Stop Loss Management
/////////////////////////////////////////////////
if(TradesThisSymbol > 0)
{
  total=OrdersTotal();
  for(cnt=0;cnt<total;cnt++)
  {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

     if(OrderSymbol()==Symbol() && OrderType()==OP_BUY)
        {
            if(Ask-OrderOpenPrice() > (TrailingStop * Point))
              {
                if(OrderStopLoss() < (Ask - TrailingStop * Point))
                {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Ask - TrailingStop * Point,Ask + TakeProfit * Point,0,Cyan);
               return(0);                    

                } // close for if(OrderStopLoss() < (Ask - TrailingStop * Point))
            } // close for if(Ask-OrderOpenPrice() > (TrailingStop * Point))
        } // close for if(OrderSymbol()==Symbol() && OrderType()==OP_BUY)
    
     if(OrderSymbol()==Symbol() && OrderType()==OP_SELL)
        {
            if(OrderOpenPrice() - Bid > (TrailingStop * Point))
            {
                if(OrderStopLoss() > (Bid + TrailingStop * Point))
                {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid + TrailingStop * Point,Bid - TakeProfit * Point,0,Cyan);
               return(0);                    

                } // close for if(OrderStopLoss() > (Bid + TrailingStop * Point))
            } // close for if(OrderOpenPrice() - Bid > (TrailingStop * Point))
         } // close for if(OrderSymbol()==Symbol() && OrderType()==OP_SELL)
        } // close for for(cnt=0;cnt<total;cnt++)
   } // close for if(TradesThisSymbol > 0)
  
    

//return(0);

} // close for start


This post has been edited by Arnaud Jeulin: Jan 22 2009, 13:40
Reason for edit: Mise en forme du code
damtoul
post Jan 22 2009, 13:43
Post


Hello,

je t'ai corrigé une autre erreur qui venait d'une formule de taille de lot mal programmée.

Je t'ai mis le code corrigé en attach mais de toute manière cet EA est très mal programmé et absolument inutile donc laisse tomber. mataf_wink.gif

Si tu veux manger du code mt4 et apprendre vas sur ces liens, c'est la bible.

http://docs.mql4.com/

Tu as des indics et des EAs tout fait dans la section codebase. Idéal pour s'amuser.

smile.gif
Attached File(s)
Attached File  test.mq4 ( 10.17K ) Number of downloads: 59
 
kusco
post Jan 22 2009, 15:55
Post


Je te remercie Damtoul, je vais de suite consulter le lien.

De plus je commence à lire un Ebook sur la programmation en C, et je sens que l’apprentissage sera long, mais bénéfique.

Bon trading à toi
damtoul
post Jan 22 2009, 16:24
Post


Laisse tomber ton ebook sur le C.

Fais un peu d'algorithmique pour te mettre en condition (tu as d'excellents cours en fr sur le net=>google).

Et après tu lis en long, en large et en travers le lien mql que j'ai mis plus haut.

Tu te fais un expert sur le papier, par exemple croisement de 2 MAs, le truc de base=>algo sur papier=>metaeditor et tu codes. Quand tu butes ctrl+C pour ouvrir la boite à outils où tu auras chaque instruction détaillée.

Lis mataf aussi y'a pas mal d'infos sur le trading algo.

Bon courage. smile.gif

Reply to this topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 

> Similar Topics

    Topic Title Replies Topic Starter Views Last Action
No New Posts   2 loiclfd 6,423 19th September 2005 - 13:36
Last post by: pime38
No New Posts   8 dieupip 7,916 21st May 2006 - 16:59
Last post by: goldfing
No New Posts   0 LeBreton 4,992 20th September 2005 - 23:52
Last post by: LeBreton
No New Posts   2 4EX 3,659 25th October 2005 - 8:59
Last post by: 4EX
No new   21 pere noel 9,274 12th November 2005 - 21:08
Last post by: laurentol


Lo-Fi Version: Problème Avec L’exécution D’un Expert Récupéré - Forex Forum