[转载]海龟交易系统 MT4 源码

原文地址:海龟交易系统 MT4 源码作者:金品

//±-----------------------------------------------------------------+
//| GoHan Turtle Trader.mq4 |
//| Copyright ?2008, gohanforex.com |
//| http://www.gohanforex.com |
//±-----------------------------------------------------------------+
#property copyright “Copyright ?2008, gohanforex.com”
#property link “http://www.zhongjie110.com”

extern color LabelColor=White;
extern int LabelFontSize=8;
extern color S1LongEntryLineColor=Blue;
extern color S2LongEntryLineColor=LightBlue;
extern color S1andS2LongEntryLineColor=Lime;
extern color S1ExitLinesColor=Yellow;
extern color S1ShortEntryLineColor=Red;
extern color S2ShortEntryLineColor=Pink;
extern color S1andS2ShortEntryLineColor=Orange;

int MaxCommentsToShow=25;
string allcomments[];
datetime lastcheck;
bool periodOK=false;
int MagicNumber=12345;

int S1Periods=20;
int S2Periods=55;
double S1LongEntry=0;
double S1ShortEntry=0;
double S2LongEntry=0;
double S2ShortEntry=0;

double S1LongExit=0;
double S1ShortExit=0;
double S2LongExit=0;
double S2ShortExit=0;

int S1LongEntryBar=0;
int S1ShortEntryBar=0;
int S2LongEntryBar=0;
int S2ShortEntryBar=0;

int S1LongExitBar=0;
int S1ShortExitBar=0;

double HighPriceArray[];
double LowPriceArray[];

double CurrentATR;
double UnitSizing;
double TradeRisk=0.01;
int ATRTakeProfitMultiplier=2;
int ATRStopLossMultiplier=2;

//±-----------------------------------------------------------------+
//| expert initialization function |
//±-----------------------------------------------------------------+
int init()
{
manageupperstatus(“GoHan Turtles Trader - gohanforex.com, CR 2009”);
if(Period()==1440)
{
periodOK=true;
managelowerstatus(“http://www.gohanforex.com”);
managecomments(“Turtle Trading Started”);
CalcTurtleValues();
drawentries(S1LongEntry, S2LongEntry, S1ShortEntry, S2ShortEntry, S1LongExit, S1ShortExit);
}
else
{
periodOK=false;
managelowerstatus(“ERROR: This scanner must be used on an D1 chart”);
managecomments(“MUST USE D1 TIMEFRAME - WILL NOT SCAN”);
deinit();
}

return(0);
}
//±-----------------------------------------------------------------+
//| expert deinitialization function |
//±-----------------------------------------------------------------+
int deinit()
{
return(0);
}
//±-----------------------------------------------------------------+
//| expert start function |
//±-----------------------------------------------------------------+
int start()
{
if(periodOK==false) return(0);
//Check for a new bar
if(lastcheck<Time[0])
{
//A new bar has formed and new values need to be computed
string checktime=TimeToStr(TimeLocal(),TIME_DATE);
lastcheck=Time[0];
CalcTurtleValues();
drawentries(S1LongEntry, S2LongEntry, S1ShortEntry, S2ShortEntry, S1LongExit, S1ShortExit);
managecomments(checktime +": New values calculated");
}

//managecomments(MarketInfo(Symbol(),MODE_TICKVALUE));

//Always do the trade management functions
//Check for orders to close
//Close positions based on the 10-day number
if(Bid<S1LongExit)
{
//Close long positions
CloseS1LongPositions();
ClosePendingLongPositions();
}

if(Ask>S1ShortExit)
{
//Close short positions
CloseS1ShortPositions();
ClosePendingShortPositions();
}

//Check for S2 long entry
if((S2LongEntry<Ask)&&(CountLongPositions()==0))
{
//Need new long positions
CurrentATR=iATR(Symbol(),PERIOD_D1,S1Periods,1);
UnitSizing=(AccountBalance()*TradeRisk)/(CurrentATR/Point)/MarketInfo(Symbol(),MODE_TICKVALUE);
UnitSizing=NormalizeDouble(UnitSizing,2);
//Close the short positions
CloseS1ShortPositions();
CloseS2ShortPositions();
ClosePendingShortPositions();
ClosePendingLongPositions();
//Need a new long position
OpenS2LongPositions();
}

//Check for S1 long entry
if((S1LongEntry<Ask)&&(CountLongPositions()==0))
{
//Need new long positions
CurrentATR=iATR(Symbol(),PERIOD_D1,S1Periods,1);
UnitSizing=(AccountBalance()*TradeRisk)/(CurrentATR/Point)/MarketInfo(Symbol(),MODE_TICKVALUE);
UnitSizing=NormalizeDouble(UnitSizing,2);
//Close the short positions
CloseS1ShortPositions();
CloseS2ShortPositions();
ClosePendingShortPositions();
ClosePendingLongPositions();
//Need a new long position
OpenS1LongPositions();
}

//Check for S2 short entry
if((S2ShortEntry>Bid)&&(CountShortPositions()==0))
{
//Need new short positions
CurrentATR=iATR(Symbol(),PERIOD_D1,S1Periods,1);
UnitSizing=(AccountBalance()*TradeRisk)/(CurrentATR/Point)/MarketInfo(Symbol(),MODE_TICKVALUE);
UnitSizing=NormalizeDouble(UnitSizing,2);
//Close the long positions
CloseS1LongPositions();
CloseS2LongPositions();
ClosePendingLongPositions();
ClosePendingShortPositions();
//Need a new short position
OpenS2ShortPositions();
}

//Check for S1 short entry
if((S1ShortEntry>Bid)&&(CountShortPositions()==0))
{
//Need new short positions
CurrentATR=iATR(Symbol(),PERIOD_D1,S1Periods,1);
UnitSizing=(AccountBalance()*TradeRisk)/(CurrentATR/Point)/MarketInfo(Symbol(),MODE_TICKVALUE);
UnitSizing=NormalizeDouble(UnitSizing,2);
//Close the long positions
CloseS1LongPositions();
CloseS2LongPositions();
ClosePendingLongPositions();
ClosePendingShortPositions();
//Need a new short position
OpenS1ShortPositions();
}

if(OrdersTotal()>0)
{
//Standardize the stops
StandardStopsForShorts();
StandardStopsForLongs();
}
return(0);
}
//±-----------------------------------------------------------------+

void CalcTurtleValues()
{
//Prepare and fill the two arrays
int pricecounter=0;
ArrayResize(HighPriceArray,S2Periods);
ArrayResize(LowPriceArray,S2Periods);
for(pricecounter=0;pricecounter<S2Periods;pricecounter++)
{
HighPriceArray[pricecounter]=High[pricecounter+1];
LowPriceArray[pricecounter]=Low[pricecounter+1];
}

S1LongEntryBar=ArrayMaximum(HighPriceArray,S1Periods,0);
S1ShortEntryBar=ArrayMinimum(LowPriceArray,S1Periods,0);
S2LongEntryBar=ArrayMaximum(HighPriceArray,WHOLE_ARRAY,0);
S2ShortEntryBar=ArrayMinimum(LowPriceArray,WHOLE_ARRAY,0);

S1LongExitBar=ArrayMinimum(LowPriceArray,10,0);
S1ShortExitBar=ArrayMaximum(HighPriceArray,10,0);

S1LongEntry=HighPriceArray[S1LongEntryBar];
S1ShortEntry=LowPriceArray[S1ShortEntryBar];
S2LongEntry=HighPriceArray[S2LongEntryBar];
S2ShortEntry=LowPriceArray[S2ShortEntryBar];

S1LongExit=LowPriceArray[S1LongExitBar];
S1ShortExit=HighPriceArray[S1ShortExitBar];
S2LongExit=S1ShortEntry;
S2ShortExit=S1LongEntry;
}

//±-----------------------------------------------------------------+
//| Manage comments |
//±-----------------------------------------------------------------+
void managecomments(string addcomment)
{
string basemessage = “Current Turtle Order Entry Informationn”;
string tempcomments[];
int commentscroll;
string output = basemessage;
int CommentCount = ArrayRange(allcomments, 0);
if(CommentCount<MaxCommentsToShow)
{
ArrayResize(tempcomments,CommentCount+1);
ArrayCopy(tempcomments,allcomments,1,0,WHOLE_ARRAY);
}
else
{
ArrayResize(tempcomments,MaxCommentsToShow);
ArrayCopy(tempcomments,allcomments,1,0,MaxCommentsToShow-1);
}
tempcomments[0]=addcomment;
CommentCount = ArrayRange(tempcomments, 0);
ArrayResize(allcomments,CommentCount);
ArrayCopy(allcomments,tempcomments,0,0,CommentCount);

for(commentscroll=0;commentscroll<CommentCount;commentscroll++)
{
output = output + allcomments[commentscroll] +“n”;
}
Comment(output);
}

void drawentries(double S1Long, double S2Long, double S1Short, double S2Short, double S1LongExit, double S1ShortExit)
{
ObjectDelete(“S1Long_Entry”);
ObjectDelete(“S1Long_EntrySign”);
ObjectDelete(“S2Long_Entry”);
ObjectDelete(“S2Long_EntrySign”);

ObjectDelete(“S2Short_EntrySign”);
ObjectDelete(“S2Short_Entry”);
ObjectDelete(“S1Short_EntrySign”);
ObjectDelete(“S1Short_Entry”);

ObjectDelete(“S1Long_ExitSign”);
ObjectDelete(“S1Long_Exit”);

ObjectDelete(“S1Short_ExitSign”);
ObjectDelete(“S1Short_Exit”);

if(S1LongExit!=S1Short)
{
ObjectCreate(“S1Long_Exit”, OBJ_HLINE, 0, 0, S1LongExit);// Creating obj.
ObjectSet(“S1Long_Exit”,OBJPROP_COLOR,S1ExitLinesColor);
ObjectCreate(“S1Long_ExitSign”, OBJ_TEXT, 0, Time[0], S1LongExit);// Creating obj.
ObjectSetText(“S1Long_ExitSign”, "S1 Long Exit: "+DoubleToStr(S1LongExit,Digits), LabelFontSize, “Verdana”, LabelColor);
}

if(S1ShortExit!=S1Long)
{
ObjectCreate(“S1Short_Exit”, OBJ_HLINE, 0, 0, S1ShortExit);// Creating obj.
ObjectSet(“S1Short_Exit”,OBJPROP_COLOR,S1ExitLinesColor);
ObjectCreate(“S1Short_ExitSign”, OBJ_TEXT, 0, Time[0], S1ShortExit);// Creating obj.
ObjectSetText(“S1Short_ExitSign”, "S1 Short Exit: "+DoubleToStr(S1ShortExit,Digits), LabelFontSize, “Verdana”, LabelColor);
}

if(S1Long==S2Long)
{
ObjectCreate(“S1Long_Entry”, OBJ_HLINE, 0, 0, S1Long);// Creating obj.
ObjectSet(“S1Long_Entry”,OBJPROP_COLOR,S1andS2LongEntryLineColor);
ObjectCreate(“S1Long_EntrySign”, OBJ_TEXT, 0, Time[0], S1Long);// Creating obj.
ObjectSetText(“S1Long_EntrySign”, "S1 & S2: "+DoubleToStr(S1Long,Digits), LabelFontSize, “Verdana”, LabelColor);
}
else
{
ObjectCreate(“S1Long_Entry”, OBJ_HLINE, 0, 0, S1Long);// Creating obj.
ObjectSet(“S1Long_Entry”,OBJPROP_COLOR,S1LongEntryLineColor);

  ObjectCreate("S1Long_EntrySign", OBJ_TEXT, 0, Time[0], S1Long);// Creating obj.ObjectSetText("S1Long_EntrySign", "S1: "+DoubleToStr(S1Long,Digits), LabelFontSize, "Verdana", LabelColor);ObjectCreate("S2Long_Entry", OBJ_HLINE, 0, 0, S2Long);// Creating obj.ObjectSet("S2Long_Entry",OBJPROP_COLOR,S2LongEntryLineColor);ObjectCreate("S2Long_EntrySign", OBJ_TEXT, 0, Time[0], S2Long);// Creating obj.ObjectSetText("S2Long_EntrySign", "S2: "+DoubleToStr(S2Long,Digits), LabelFontSize, "Verdana", LabelColor);}

//======

if(S1Short==S2Short)
{
ObjectCreate(“S1Short_Entry”, OBJ_HLINE, 0, 0, S1Short);// Creating obj.
ObjectSet(“S1Short_Entry”,OBJPROP_COLOR,S1andS2ShortEntryLineColor);

  ObjectCreate("S1Short_EntrySign", OBJ_TEXT, 0, Time[0], S1Short);// Creating obj.ObjectSetText("S1Short_EntrySign", "S1 & S2: "+DoubleToStr(S1Short,Digits), LabelFontSize, "Verdana", LabelColor);}

else
{
ObjectCreate(“S1Short_Entry”, OBJ_HLINE, 0, 0, S1Short);// Creating obj.
ObjectSet(“S1Short_Entry”,OBJPROP_COLOR,S1ShortEntryLineColor);

  ObjectCreate("S1Short_EntrySign", OBJ_TEXT, 0, Time[0], S1Short);// Creating obj.ObjectSetText("S1Short_EntrySign", "S1: "+DoubleToStr(S1Short,Digits), LabelFontSize, "Verdana", LabelColor);ObjectCreate("S2Short_Entry", OBJ_HLINE, 0, 0, S2Short);// Creating obj.ObjectSet("S2Short_Entry",OBJPROP_COLOR,S2ShortEntryLineColor);ObjectCreate("S2Short_EntrySign", OBJ_TEXT, 0, Time[0], S2Short);// Creating obj.ObjectSetText("S2Short_EntrySign", "S2: "+DoubleToStr(S2Short,Digits), LabelFontSize, "Verdana", LabelColor);}

}

//±-----------------------------------------------------------------+
//| Manage upper status |
//±-----------------------------------------------------------------+
void manageupperstatus(string addstatus)
{
ObjectDelete(“Upper_Status”);
if(addstatus!="")
{
ObjectCreate(“Upper_Status”, OBJ_LABEL, 0, 0, 0);// Creating obj.
ObjectSet(“Upper_Status”, OBJPROP_CORNER,1); // Reference corner
ObjectSet(“Upper_Status”, OBJPROP_XDISTANCE, 2);// X coordinate
ObjectSet(“Upper_Status”, OBJPROP_YDISTANCE, 13);// Y coordinate
ObjectSetText(“Upper_Status”, addstatus, 9, “Verdana”, White);
}
}

//±-----------------------------------------------------------------+
//| Manage lower status |
//±-----------------------------------------------------------------+
void managelowerstatus(string addstatus)
{
ObjectDelete(“Lower_Status”);
if(addstatus!="")
{
ObjectCreate(“Lower_Status”, OBJ_LABEL, 0, 0, 0);// Creating obj.
ObjectSet(“Lower_Status”, OBJPROP_CORNER,3); // Reference corner
ObjectSet(“Lower_Status”, OBJPROP_XDISTANCE, 2);// X coordinate
ObjectSet(“Lower_Status”, OBJPROP_YDISTANCE, 1);// Y coordinate
ObjectSetText(“Lower_Status”, addstatus, 9, “Verdana”, Yellow);
}
}

void OpenS1LongPositions()
{
double order1price;
double order2price;
double order3price;

OrderSend(Symbol(),OP_BUY,UnitSizing,Ask,0,LongStopLoss(Ask,CurrentATR),LongTakeProfit(Ask,CurrentATR),“S1”,MagicNumber,0,Blue);
order1price=Ask+(CurrentATR/2);
order2price=Ask+CurrentATR;
order3price=order2price+(CurrentATR/2);

order1price=NormalizeDouble(order1price,Digits);
order2price=NormalizeDouble(order2price,Digits);
order3price=NormalizeDouble(order3price,Digits);

OrderSend(Symbol(),OP_BUYSTOP,UnitSizing,order1price,0,LongStopLoss(order1price,CurrentATR),LongTakeProfit(order1price,CurrentATR),“S1”,MagicNumber,0,Blue);
OrderSend(Symbol(),OP_BUYSTOP,UnitSizing,order2price,0,LongStopLoss(order2price,CurrentATR),LongTakeProfit(order2price,CurrentATR),“S1”,MagicNumber,0,Blue);
OrderSend(Symbol(),OP_BUYSTOP,UnitSizing,order3price,0,LongStopLoss(order3price,CurrentATR),LongTakeProfit(order3price,CurrentATR),“S1”,MagicNumber,0,Blue);
}

void OpenS2LongPositions()
{
double order1price;
double order2price;
double order3price;

OrderSend(Symbol(),OP_BUY,UnitSizing,Ask,0,LongStopLoss(Ask,CurrentATR),LongTakeProfit(Ask,CurrentATR),“S2”,MagicNumber,0,Blue);
order1price=Ask+(CurrentATR/2);
order2price=Ask+CurrentATR;
order3price=order2price+(CurrentATR/2);

order1price=NormalizeDouble(order1price,Digits);
order2price=NormalizeDouble(order2price,Digits);
order3price=NormalizeDouble(order3price,Digits);

OrderSend(Symbol(),OP_BUYSTOP,UnitSizing,order1price,0,LongStopLoss(order1price,CurrentATR),LongTakeProfit(order1price,CurrentATR),“S2”,MagicNumber,0,Blue);
OrderSend(Symbol(),OP_BUYSTOP,UnitSizing,order2price,0,LongStopLoss(order2price,CurrentATR),LongTakeProfit(order2price,CurrentATR),“S2”,MagicNumber,0,Blue);
OrderSend(Symbol(),OP_BUYSTOP,UnitSizing,order3price,0,LongStopLoss(order3price,CurrentATR),LongTakeProfit(order3price,CurrentATR),“S2”,MagicNumber,0,Blue);
}

void OpenS1ShortPositions()
{
double order1price;
double order2price;
double order3price;

OrderSend(Symbol(),OP_SELL,UnitSizing,Bid,0,ShortStopLoss(Bid,CurrentATR),ShortTakeProfit(Bid,CurrentATR),“S1”,MagicNumber,0,Red);
order1price=Bid-(CurrentATR/2);
order2price=Bid-CurrentATR;
order3price=order2price-(CurrentATR/2);

order1price=NormalizeDouble(order1price,Digits);
order2price=NormalizeDouble(order2price,Digits);
order3price=NormalizeDouble(order3price,Digits);

OrderSend(Symbol(),OP_SELLSTOP,UnitSizing,order1price,0,ShortStopLoss(order1price,CurrentATR),ShortTakeProfit(order1price,CurrentATR),“S1”,MagicNumber,0,Red);
OrderSend(Symbol(),OP_SELLSTOP,UnitSizing,order2price,0,ShortStopLoss(order2price,CurrentATR),ShortTakeProfit(order2price,CurrentATR),“S1”,MagicNumber,0,Red);
OrderSend(Symbol(),OP_SELLSTOP,UnitSizing,order3price,0,ShortStopLoss(order3price,CurrentATR),ShortTakeProfit(order3price,CurrentATR),“S1”,MagicNumber,0,Red);
}

void OpenS2ShortPositions()
{
double order1price;
double order2price;
double order3price;

OrderSend(Symbol(),OP_SELL,UnitSizing,Bid,0,ShortStopLoss(Bid,CurrentATR),ShortTakeProfit(Bid,CurrentATR),“S2”,MagicNumber,0,Red);
order1price=Bid-(CurrentATR/2);
order2price=Bid-CurrentATR;
order3price=order2price-(CurrentATR/2);

order1price=NormalizeDouble(order1price,Digits);
order2price=NormalizeDouble(order2price,Digits);
order3price=NormalizeDouble(order3price,Digits);

OrderSend(Symbol(),OP_SELLSTOP,UnitSizing,order1price,0,ShortStopLoss(order1price,CurrentATR),ShortTakeProfit(order1price,CurrentATR),“S2”,MagicNumber,0,Red);
OrderSend(Symbol(),OP_SELLSTOP,UnitSizing,order2price,0,ShortStopLoss(order2price,CurrentATR),ShortTakeProfit(order2price,CurrentATR),“S2”,MagicNumber,0,Red);
OrderSend(Symbol(),OP_SELLSTOP,UnitSizing,order3price,0,ShortStopLoss(order3price,CurrentATR),ShortTakeProfit(order3price,CurrentATR),“S2”,MagicNumber,0,Red);
}

double LongStopLoss(double StartPrice, double CurrentATR)
{
double result;
result=StartPrice-(CurrentATR*ATRStopLossMultiplier);
result=NormalizeDouble(result,Digits);
return(result);
}

double LongTakeProfit(double StartPrice, double CurrentATR)
{
double result;
result=StartPrice+(CurrentATR*ATRTakeProfitMultiplier);
result=NormalizeDouble(result,Digits);
return(result);
}

double ShortStopLoss(double StartPrice, double CurrentATR)
{
double result;
result=StartPrice+(CurrentATR*ATRStopLossMultiplier);
result=NormalizeDouble(result,Digits);
return(result);
}

double ShortTakeProfit(double StartPrice, double CurrentATR)
{
double result;
result=StartPrice-(CurrentATR*ATRTakeProfitMultiplier);
result=NormalizeDouble(result,Digits);
return(result);
}

void CloseS1LongPositions()
{
int totalorders=OrdersTotal();
int orderscroll;
for(orderscroll=0;orderscroll<totalorders;orderscroll++)
{
OrderSelect(orderscroll,SELECT_BY_POS,MODE_TRADES);
if((OrderSymbol()==Symbol())&&(OrderMagicNumber()==MagicNumber)&&((OrderType()OP_BUY))&&((OrderComment()“S1”)))
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,Blue);
}
}
}

void CloseS2LongPositions()
{
int totalorders=OrdersTotal();
int orderscroll;
for(orderscroll=0;orderscroll<totalorders;orderscroll++)
{
OrderSelect(orderscroll,SELECT_BY_POS,MODE_TRADES);
if((OrderSymbol()==Symbol())&&(OrderMagicNumber()==MagicNumber)&&((OrderType()OP_BUY))&&((OrderComment()“S2”)))
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,Blue);
}
}
}

void ClosePendingLongPositions()
{
int totalorders=OrdersTotal();
int orderscroll;
for(orderscroll=0;orderscroll<totalorders;orderscroll++)
{
OrderSelect(orderscroll,SELECT_BY_POS,MODE_TRADES);
if((OrderSymbol()==Symbol())&&(OrderMagicNumber()==MagicNumber)&&((OrderType()==OP_BUYSTOP)))
{
OrderDelete(OrderTicket());
}
}
}

int CountLongPositions()
{
int totalorders=OrdersTotal();
int orderscroll;
int result=0;
for(orderscroll=0;orderscroll<totalorders;orderscroll++)
{
OrderSelect(orderscroll,SELECT_BY_POS,MODE_TRADES);
if((OrderSymbol()==Symbol())&&(OrderMagicNumber()==MagicNumber)&&((OrderType()==OP_BUY)))
{
result++;
}
}
return(result);
}

void CloseS1ShortPositions()
{
int totalorders=OrdersTotal();
int orderscroll;
for(orderscroll=0;orderscroll<totalorders;orderscroll++)
{
OrderSelect(orderscroll,SELECT_BY_POS,MODE_TRADES);
if((OrderSymbol()==Symbol())&&(OrderMagicNumber()==MagicNumber)&&((OrderType()OP_SELL))&&((OrderComment()“S1”)))
{
OrderClose(OrderTicket(),OrderLots(),Ask,0,Blue);
}
}
}

void CloseS2ShortPositions()
{
int totalorders=OrdersTotal();
int orderscroll;
for(orderscroll=0;orderscroll<totalorders;orderscroll++)
{
OrderSelect(orderscroll,SELECT_BY_POS,MODE_TRADES);
if((OrderSymbol()==Symbol())&&(OrderMagicNumber()==MagicNumber)&&((OrderType()OP_SELL))&&((OrderComment()“S2”)))
{
OrderClose(OrderTicket(),OrderLots(),Ask,0,Blue);
}
}
}

void ClosePendingShortPositions()
{
int totalorders=OrdersTotal();
int orderscroll;
for(orderscroll=0;orderscroll<totalorders;orderscroll++)
{
OrderSelect(orderscroll,SELECT_BY_POS,MODE_TRADES);
if((OrderSymbol()==Symbol())&&(OrderMagicNumber()==MagicNumber)&&((OrderType()==OP_SELLSTOP)))
{
OrderDelete(OrderTicket());
}
}
}

int CountShortPositions()
{
int totalorders=OrdersTotal();
int orderscroll;
int result=0;
for(orderscroll=0;orderscroll<totalorders;orderscroll++)
{
OrderSelect(orderscroll,SELECT_BY_POS,MODE_TRADES);
if((OrderSymbol()==Symbol())&&(OrderMagicNumber()==MagicNumber)&&((OrderType()==OP_SELL)))
{
result++;
}
}
return(result);
}

void StandardStopsForShorts()
{
double stoplevel=10000;
int orderscroll;
int totalshorts=CountShortPositions();
int totalorders=OrdersTotal();
if(totalshorts>1)
{
//scroll to find the lowest stop
for(orderscroll=0;orderscroll<totalorders;orderscroll++)
{
OrderSelect(orderscroll,SELECT_BY_POS,MODE_TRADES);
if((OrderSymbol()==Symbol())&&(OrderMagicNumber()==MagicNumber)&&((OrderType()==OP_SELL)))
{
if(OrderStopLoss()<stoplevel)
{
stoplevel=OrderStopLoss();
}
}
}

  //scroll to set the stopsfor(orderscroll=0;orderscroll<totalorders;orderscroll++){OrderSelect(orderscroll,SELECT_BY_POS,MODE_TRADES);if((OrderSymbol()==Symbol())&&(OrderMagicNumber()==MagicNumber)&&((OrderType()==OP_SELL))){if(stoplevel!=OrderStopLoss()){OrderModify(OrderTicket(),OrderOpenPrice(),stoplevel,OrderTakeProfit(),0,CLR_NONE);}}}       }

}

void StandardStopsForLongs()
{
double stoplevel=0;
int orderscroll;
int totalshorts=CountLongPositions();
int totalorders=OrdersTotal();
if(totalshorts>1)
{
//scroll to find the lowest stop
for(orderscroll=0;orderscroll<totalorders;orderscroll++)
{
OrderSelect(orderscroll,SELECT_BY_POS,MODE_TRADES);
if((OrderSymbol()==Symbol())&&(OrderMagicNumber()==MagicNumber)&&((OrderType()==OP_BUY)))
{
if(OrderStopLoss()>stoplevel)
{
stoplevel=OrderStopLoss();
}
}
}

  //scroll to set the stopsfor(orderscroll=0;orderscroll<totalorders;orderscroll++){OrderSelect(orderscroll,SELECT_BY_POS,MODE_TRADES);if((OrderSymbol()==Symbol())&&(OrderMagicNumber()==MagicNumber)&&((OrderType()==OP_BUY))){if(stoplevel!=OrderStopLoss()){OrderModify(OrderTicket(),OrderOpenPrice(),stoplevel,OrderTakeProfit(),0,CLR_NONE);}}}       }

}

[转载]海龟交易系统 MT4 源码相关推荐

  1. 微金融php源码下载,ThinkPHP金融微盘微交易系统平台源码

    ThinkPHP内核开发的金融微盘微交易系统平台源码, 运行环境:PHP5.3+MYSQL+伪静态 安装说明: 1.首先搭建php+mysql运行环境,建议使用Phpstudy一键包,选择apache ...

  2. 外汇交易策略MT4源码合集

    外汇市场是全球最大的金融市场, 平均每天超过1万5千亿美元的资金在其中周转 ,相当于美国所有证券市场交易额总和的30余倍,外汇市场没有具体地点,也没有中央交易所,全部通过电子网络进行7*24小时全天候 ...

  3. JAVA计算机毕业设计校园闲置物品交易系统Mybatis+源码+数据库+lw文档+系统+调试部署

    JAVA计算机毕业设计校园闲置物品交易系统Mybatis+源码+数据库+lw文档+系统+调试部署 JAVA计算机毕业设计校园闲置物品交易系统Mybatis+源码+数据库+lw文档+系统+调试部署 本源 ...

  4. JAVA毕业设计古玩玉器交易系统计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计古玩玉器交易系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计古玩玉器交易系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S架构 开发语 ...

  5. java毕业生设计校园闲置物品交易系统计算机源码+系统+mysql+调试部署+lw

    java毕业生设计校园闲置物品交易系统计算机源码+系统+mysql+调试部署+lw java毕业生设计校园闲置物品交易系统计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B/S ...

  6. java毕业设计闲置物品交易系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计闲置物品交易系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计闲置物品交易系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S ...

  7. [转载]ASP.NET Core 源码阅读笔记(1) ---Microsoft.Extensions.DependencyInjection

    这篇随笔主要记录一下ASP.NET Core团队实现默认的依赖注入容器的过程,我的理解可能并不是正确的. DependencyInjection这个项目不大,但却是整个ASP.NET Core的基础, ...

  8. (转载)jQuery 1.6 源码学习(一)——core.js[1]之基本架构

    在网上下了一个jQuery 1.2.6的源码分析教程,看得似懂非懂,于是还是去github上下载源码,然后慢慢看源代码学习,首先来说说core.js这个核心文件吧. jQuery整体的基本架构说起来也 ...

  9. 【转载】Spring @Async 源码解读。

    由于工作中经常需要使用到异步操作,一直在使用@Async, 今天抽空学习了一下它的执行原理,刚好看到一篇写的很棒的文章,这里转载过来做个记录,感谢原作者的无私奉献. 原文章链接地址:https://w ...

最新文章

  1. 云计算读书笔记(五)
  2. 异步编程模型--使用 IAsyncResult 对象
  3. Flutter开发之数据存储-1-SharedPreferences(32)
  4. java多线程基本概述(二十)——中断
  5. 无招胜有招之Java进阶JVM(二)
  6. SAP Cloud for Customer里如何根据产品ID拿到其UUID
  7. node.js抓取数据(fake小爬虫)
  8. [小技巧]为Atlas AutoComplete加上滚动条
  9. 吴恩达教授机器学习课程笔记【八】- Part 8 感知器和大间隔分类器(在线学习感知器算法错分类次数上界及其证明)
  10. 一.Spring boot食用指南:HELLO WORLD
  11. 教你轻松创建谷歌账号、谷歌邮箱!
  12. win10开机自动拨号上网
  13. Unity粒子系统——简易特效制作(三)
  14. 李宏毅机器学习01机器学习介绍
  15. 值得收藏的22个搜索下载免费PDF电子书的网站
  16. 提高信心的十个方法,助你考研坚持到底!
  17. [51Nod 1326]:遥远的旅途
  18. 谷歌 招聘_为什么我不与Google招聘人员交谈
  19. 青岛企业掘金大数据时代 大数据时代已经来临
  20. IDEA完整安装教程

热门文章

  1. JAVA中i =0是什么意思_i++和++i是什么意思 i++和++i的区别
  2. Uniapp开发小程序引入微信快递跟踪(快递100)插件
  3. 【数据挖掘】时序模式-白噪音-时序图-ADF检验-一阶差分-acf pacf(2021-11-11
  4. 爱快路由:一家深谙“粉丝文化”的技术公司
  5. 全国计算机等级考试全真模拟,全国计算机等级考试全真模拟试卷(10)
  6. 如何在DAZ3D STUDIO中快速修改身体部位作为道具
  7. 视频怎样制作动图?教你一招快速视频转gif的方法
  8. java服务器端开发-servlet:202、Servlet执行过程介绍:get请求与post请求、编码相关等
  9. 2021FRM一级二级原版书教材课本book
  10. 使用vue-awesome-swiper实现轮播图异形卡片化两侧切换显示一半的遮挡效果