EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: ruddy01 on พฤศจิกายน 22, 2014, 10:46:26 am

Title: อยากถามว่าถ้าเราจะให้ ea เข้าออร์เดอร์ buy อย่างเดียว หรือ sell อย่างเดียว
Post by: ruddy01 on พฤศจิกายน 22, 2014, 10:46:26 am
อยากถามว่าถ้าเราจะให้ ea เข้าออร์เดอร์ buy อย่างเดียว หรือ sell อย่างเดียว จะต้องทำอย่างไร

หรือจะฝังโค๊ด ea อย่างไร หรือจะต้องแก้ทั้งโค๊ด ea  หรืออย่างไร


......................
สมมุติว่า ea ตัวนี้ จะทำอย่างไรให้เข้า buy อย่างเดียว หรือ เข้า  sell อย่างเดียว เป็น  ea ที่เป็นของที่แถมมากับ  exness  ชื่อ Moving Average.mq4

ขอบคุญครับ

..................


//+------------------------------------------------------------------+
//|                                               Moving Average.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property description "Moving Average sample expert advisor"

#define MAGICMA  20131111
//--- Inputs
input double Lots          =0.1;
input double MaximumRisk   =0.02;
input double DecreaseFactor=3;
input int    MovingPeriod  =12;
input int    MovingShift   =6;
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//--- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//--- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//--- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
           {
            Print("Error in history!");
            break;
           }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
            continue;
         //---
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>1)
         lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
//--- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma;
   int    res;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//--- sell conditions
   if(Open[1]>ma && Close[1]<ma)
     {
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);
      return;
     }
//--- buy conditions
   if(Open[1]<ma && Close[1]>ma)
     {
      res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double ma;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type
      if(OrderType()==OP_BUY)
        {
         if(Open[1]>ma && Close[1]<ma)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(Open[1]<ma && Close[1]>ma)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//---
  }
//+------------------------------------------------------------------+
Title: Re: อยากถามว่าถ้าเราจะให้ ea เข้าออร์เดอร์ buy อย่างเดียว หรือ sell อย่างเดียว
Post by: admin on พฤศจิกายน 22, 2014, 11:52:04 am
วิธีง่ายที่สุดคือ ต้องการสร้าง EA ชื้อทางเดียวก็ใช้คำสั่ง OrderSend ชนิดของ Order แบบเดียวครับ เช่น BUY ก็มีคำสั่ง BUY อย่างเดียวไม่ต้องมี Sell เลย
Title: Re: อยากถามว่าถ้าเราจะให้ ea เข้าออร์เดอร์ buy อย่างเดียว หรือ sell อย่างเดียว
Post by: ruddy01 on พฤศจิกายน 22, 2014, 02:08:45 pm
วิธีง่ายที่สุดคือ ต้องการสร้าง EA ชื้อทางเดียวก็ใช้คำสั่ง OrderSend ชนิดของ Order แบบเดียวครับ เช่น BUY ก็มีคำสั่ง BUY อย่างเดียวไม่ต้องมี Sell เลย


ขอบคุญมากครับ เอดมินตอบเร็วมากๆ
Title: Re: อยากถามว่าถ้าเราจะให้ ea เข้าออร์เดอร์ buy อย่างเดียว หรือ sell อย่างเดียว
Post by: D_Diamond on พฤศจิกายน 24, 2014, 06:47:20 pm
ถ้าเป็นอีเอที่มีอยู่แล้วก็ไม่ต้องไปแก้โค้ดมันครับ 
เวลาใส่อีเอลงกราฟ ให้เลือกเป็น Only Long หรือ Only Short ได้เลยครับ