MA-EA-TSTOPS

Author: Copyright(c) 2010 Masaru Sasaki
MA-EA-TSTOPS
Orders Execution
It can change open orders parameters, due to possible stepping strategyChecks for the total of open orders
0 Views
0 Downloads
0 Favorites
MA-EA-TSTOPS
//+------------------------------------------------------------------+
//|                                                 MA-EA-TSTOPS.mq4 |
//|                                  Copyright(c) 2010 Masaru Sasaki |
//|                                      http://youtarou.blogzine.jp |
//+------------------------------------------------------------------+
// < MetaTrader4 FX(ŠO‘ˆ×‘֏؋’‹àŽæˆø)Ž©“®ƒgƒŒƒCƒŠƒ“ƒOƒVƒXƒeƒ€EA >
// uƒ\[ƒXƒR[ƒhŒöŠJ——Rv
//  *ˆê”Ê“I‚ȌlƒgƒŒ[ƒ_[‚̈êl‚Æ‚µ‚āAƒvƒƒOƒ‰ƒ€‚É•sе‚ê‚È•û‚Ö‚Ì
//   ŽQl‚Æ‚µ‚ÄŒöŠJ‚·‚鎖‚É‚µ‚Ü‚µ‚½B
//   Ž©•ª‚͍K‚¢‚É‚àƒvƒƒOƒ‰ƒ~ƒ“ƒO‚ðŽï–¡‚Æ‚µ‚Ä—ˆ‚½ƒTƒ“ƒf[ƒvƒƒOƒ‰ƒ}[
//   ‚Å‚ ‚鎖‚©‚çAƒVƒXƒeƒ€ƒvƒƒOƒ‰ƒ~ƒ“ƒO(EA)‚ª‚Å‚«‚Ü‚µ‚½B
//   ƒvƒƒOƒ‰ƒ~ƒ“ƒO‚͏K‚¤‚æ‚èAе‚ê‚낾‚ÆŽv‚¢‚Ü‚·B
//
// u‹ÖŽ~Ž–€v
//  *‚±‚̃vƒƒOƒ‰ƒ€ƒ\[ƒXƒR[ƒh‚ð‚»‚Ì‚Ü‚Ü—¬—p‚µ‚½ƒ\ƒtƒg‚̔̔„“™‚ð
//   ˆêØ‹ÖŽ~’v‚µ‚Ü‚·B
// 
// u–Ɛӎ–€v
//  *‚±‚̃vƒƒOƒ‰ƒ€‚ÉŠî‚­sˆ×‚ÌŒ‹‰Ê”­¶‚µ‚½áŠQA‘¹Ž¸‚Ȃǂɂ‚¢‚Ä
//    ’˜ìŽÒ‚ÍˆêØ‚̐ӔC‚𕉂¢‚Ü‚¹‚ñB
//
// uà–¾v
//  *Ù—ʃgƒŒ[ƒh‚ɂăGƒ“ƒgƒŠ[‚µ‚½Œã‚̃gƒŒƒCƒŠƒ“ƒOƒXƒgƒbƒv‚ðŽ©“®‰»‚·‚é
//   EA‚Å‚·B(Ž©“®”„”ƒ‚Í‚µ‚Ü‚¹‚ñB)
//   ‘}“ü‚µ‚½ƒ`ƒƒ[ƒg‚̒ʉ݂ŁA1ƒI[ƒ_[‚̂ݑΉž‚µ‚Ü‚·B
//   •¡”ƒI[ƒ_[‚ɂ͑Ήž‚µ‚Ä‚¢‚Ü‚¹‚ñB
//   Žg—p•û–@‚Æ‚µ‚ẮAÙ—ʃgƒŒ[ƒh‚ɂăGƒ“ƒgƒŠ[‚µ‚½Œã‚ÉEA‰Ò“®‚ð‹–‰Â
//   ‚Æ‚·‚邾‚¯‚Å‚·B
//   –”AƒgƒŒƒCƒŠƒ“ƒOƒXƒgƒbƒv•û–@‚ðˆê’蕝(pips’PˆÊ)‚©ˆê’蕝‚Å–³‚¢
//   (Žw’è”͈͂̍‚’lˆÀ’l)‚©‚ð‘I‘ð‚Å‚«‚Ü‚·B
//   ˆê’蕝‚Ípips’PˆÊ‚Őݒè‚Å‚«‚Ü‚·B
//
//   (’ˆÓFƒI[ƒ_[‚̃}ƒWƒbƒN”ԍ†‚ðŒ©‚Ä‚¢‚Ü‚¹‚ñ‚̂ŁA‘¼‚ÌEA‚Å“¯‚¶’ʉÝ
//          ‚Ƃ͋¤‘¶‚Å‚«‚Ü‚¹‚ñB
//
// ŽQl‘ÐFFXƒƒ^ƒgƒŒ[ƒ_[“ü–å (PanRolling)
//           FXƒƒ^ƒgƒŒ[ƒ_[ŽÀ‘HƒvƒƒOƒ‰ƒ~ƒ“ƒO (PanRolling)
//
#property copyright "Copyright(c) 2010 Masaru Sasaki"
#property link      "http://youtarou.blogzine.jp"

// ˆê’蕝‚Å–³‚¢ƒgƒŒƒCƒŠƒ“ƒOƒXƒgƒbƒv‚̃o[‚ðŒ©‚é”
extern int HL_period = 20;

// ˆê’蕝ƒgƒŒƒCƒŠƒ“ƒOƒXƒgƒbƒv‚ð‘I‘ð‚µ‚½Žž‚̃TƒCƒY(pips)
extern int sp_size = 5;

// ƒgƒŒƒCƒŠƒ“ƒOƒXƒgƒbƒv•û–@‚Ì‘I‘ð(•W€‚͈ê’蕝‚Å–³‚¢•ûŽ®)
extern int TrailingStop_select = 1;

// ƒfƒoƒbƒO on/off ƒtƒ‰ƒO
bool debug = false;

// ˆê’蕝‚Å–³‚¢ƒgƒŒƒCƒŠƒ“ƒOƒXƒgƒbƒvŠÖ”(Žw’肵‚½ƒo[”‚̍‚’lAˆÀ’l)
bool TrailingStopHL(int HL_period, double ask, double bid, int ticket, int type)
{
   // ƒgƒŒƒCƒŠƒ“ƒOƒXƒgƒbƒvŒvŽZ
   double spread = ask-bid;
   double HH = High[iHighest(NULL, 0, MODE_HIGH, HL_period, 1)] + spread;
   double LL = Low[iLowest(NULL, 0, MODE_LOW, HL_period, 1)];
   bool ret = false;
   OrderSelect(ticket, SELECT_BY_TICKET);
   if( type == OP_BUY )
   {
      if( LL > OrderStopLoss() )
         ret = OrderModify( ticket, OrderOpenPrice(), LL, OrderTakeProfit(), 0, Blue);
   }
   if( type == OP_SELL )
   {
      if( HH < OrderStopLoss() || OrderStopLoss() == 0 )
         ret = OrderModify( ticket, OrderOpenPrice(), HH, OrderTakeProfit(), 0, Blue);
   }
   return(ret);
}

// ˆê’蕝‚̃gƒŒƒCƒŠƒ“ƒOƒXƒgƒbƒvŠÖ”(pips’PˆÊ)
bool TrailingStopSetsize(int setsize, double point, double ask, double bid, int ticket, int type)
{
   // ƒgƒŒƒCƒŠƒ“ƒOƒXƒgƒbƒvŒvŽZ
   bool ret = false;
   double profit = 0.0;
   double set_size = setsize * point;
   double spread = ask - bid;
   int i = 1000;
   OrderSelect(ticket, SELECT_BY_TICKET);
   while( i > 0 )
   {
      if( type == OP_BUY )
       {
         profit = ask - OrderOpenPrice() - (set_size * i + spread);
         if( profit > 0 )
         {
            ret = OrderModify(ticket, OrderOpenPrice(), OrderStopLoss() + set_size, OrderTakeProfit(), 0, Blue);
            return(ret);
         }
      }
      if( type == OP_SELL )
      {
         profit = OrderOpenPrice() - bid - (set_size * i + spread);
         if( profit > 0 )
         {
            ret = OrderModify(ticket, OrderOpenPrice(), OrderStopLoss() - set_size, OrderTakeProfit(), 0, Blue);
            return(ret);
         }
      }
      i--;
   }
   return(false);
}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {

   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   // ƒo[‚ÌŽn’l‚ŃgƒŒ[ƒh‰Â”\‚©ƒ`ƒFƒbƒN
   if( Volume[0] > 1 || IsTradeAllowed() == false )
      return(0);
   // ƒI[ƒ_[—L–³‚̃`ƒFƒbƒN   
   int ticket = 0; bool ret = false;
   for(int i = 0; i < OrdersTotal(); i++ )
   {
      if(OrderSelect(i, SELECT_BY_POS) == false) break;
      if(OrderSymbol() != Symbol()) continue;
      int type = OrderType();
      if(type == OP_BUY || type == OP_SELL)
      {
         ticket = OrderTicket();
         break;
      }
   }
   if(ticket == 0) return(0);
   
   if( TrailingStop_select == 1 )
   {
      // ˆê’蕝‚Å–³‚¢ƒgƒŒƒCƒŠƒ“ƒOƒXƒgƒbƒvŠÖ”ŒÄ‚яo‚µ
      ret = TrailingStopHL(HL_period, Ask, Bid, ticket, type);
   }
   else
   {
      // ˆê’蕝‚̃gƒŒƒCƒŠƒ“ƒOƒXƒgƒbƒvŠÖ”ŒÄ‚яo‚µ
      ret = TrailingStopSetsize(sp_size, Point, Ask, Bid, ticket, type);
   }
   // ƒfƒoƒbƒO•\ަ
   if( debug == true )
   {
      Print("Open :", Open[1], "Close :", Close[1]);
      Print("Trailing stop :", ret); 
   }
   return(0);
   
  }
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---