из инклюдника вызвать функцию

 

запустить mqh OpenSellPosition_ECN!

я дилетант  однако хочу коечто  сделать-

из инклюдника по условию вызвать функцию

SellPositionOpen ,чтобы открыть шорт позицию

кто подскажет?

панса

//+------------------------------------------------------------------+
//|                                         OpenSellPosition_ECN.mqh |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+


 
#property copyright "Copyright © 2012, Nikolay Kositsin"
#property link "farria@mail.redcom.ru" 
//---- ????? ?????? ???????
#property version   "1.01" 
//---- ?????????? ??????? ?????????
#property script_show_inputs
//+----------------------------------------------+
//| ??????? ????????? ???????                    |
//+----------------------------------------------+
input double  MM=0.1;       // Money Management
input int  DEVIATION=10;    // ?????????? ????
input int  STOPLOSS=300;    // ???????? ? ??????? ?? ??????? ????
input int  TAKEPROFIT=800;  // ??????????  ? ??????? ?? ??????? ????
input uint RTOTAL=4;        // ????? ???????? ??? ????????? ???????
input uint SLEEPTIME=1;     // ????? ????? ????? ????????? ? ????????
//+------------------------------------------------------------------+ 
//| start function                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//----
   for(uint count=0; count<=RTOTAL && !IsStopped(); count++)
     {
      uint result=SellPositionOpen(Symbol(),MM,DEVIATION,STOPLOSS,TAKEPROFIT);
      if(ResultRetcodeCheck(result)) break;
      else Sleep(SLEEPTIME*1000);
     }
//----
  }
//+------------------------------------------------------------------+
//|  ????????? sell ???????.                                         |
//+------------------------------------------------------------------+
uint SellPositionOpen
(
const string symbol,
double Money_Management,
uint deviation,
int StopLoss,
int Takeprofit
 )
//SellPositionOpen(symbol, Money_Management, deviation, StopLoss, Takeprofit);
//+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
  {
//----
   double volume=SellLotCount(symbol,Money_Management);
   if(volume<=0)
     {
      Print(__FUNCTION__,"(): ???????? ????? ??? ????????? ????????? ???????");
      return(TRADE_RETCODE_INVALID_VOLUME);
     }

//---- ?????????? ???????? ????????? ??????? ? ?????????? ????????? ???????
   MqlTradeRequest request;
   MqlTradeCheckResult check;
   MqlTradeResult result;

//---- ????????? ????????
   ZeroMemory(request);
   ZeroMemory(result);
   ZeroMemory(check);
//----
   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
   double price=SymbolInfoDouble(symbol, SYMBOL_BID);
   if(!point || !price) return(TRADE_RETCODE_ERROR);

//---- ????????????? ????????? ????????? ??????? MqlTradeRequest ??? ?????????? Sell ???????
   request.type   = ORDER_TYPE_SELL;
   request.price  = price;
   request.action = TRADE_ACTION_DEAL;
   request.symbol = symbol;
   request.volume = volume;
   request.deviation=deviation;
   request.type_filling=ORDER_FILLING_FOK;

   double sl,tp;
//----
   if(StopLoss)
     {
      //---- ??????????? ?????????? ?? ????????? ? ???????? ???????? ???????
      if(!StopCorrect(symbol,StopLoss)) return(TRADE_RETCODE_ERROR);
      double dStopLoss=StopLoss*point;
      sl=price+dStopLoss;
     }
   else sl=0.0;

   if(Takeprofit)
     {
      //---- ??????????? ?????????? ?? ??????????? ???????? ???????? ???????
      if(!StopCorrect(symbol,Takeprofit)) return(TRADE_RETCODE_ERROR);
      double dTakeprofit=Takeprofit*point;
      tp=price-dTakeprofit;
     }
   else tp=0.0;

//---- ???????? ????????? ??????? ?? ????????????
   if(!OrderCheck(request,check))
     {
      Print(__FUNCTION__,"(): OrderCheck(): ",ResultRetcodeDescription(check.retcode));
      return(TRADE_RETCODE_INVALID);
     }

   string word="";
   StringConcatenate(word,__FUNCTION__,"(): <<< ????????? Sell ??????? ?? ",symbol,"! >>>");
   Print(word);

   word=__FUNCTION__+"(): OrderSend(): ";

//---- ????????? Sell ??????? ? ?????? ???????? ?????????? ????????? ???????
   if(!OrderSend(request,result) || result.retcode!=TRADE_RETCODE_DONE)
     {
      Print(word,"<<< ?? ??????? ??????? Sell ??????? ?? ",symbol,"!!! >>>");
      Print(word,ResultRetcodeDescription(result.retcode));
      PlaySound("timeout.wav");
      return(result.retcode);
     }
   else
   if(result.retcode==TRADE_RETCODE_DONE)
     {
      Print(word,"<<< Sell ??????? ?? ",symbol," ???????! >>>");
      PlaySound("ok.wav");
      Sleep(100);
      if(tp || sl) SellPositionModify(symbol,deviation,sl,tp);
     }
   else
     {
      Print(word,"<<< ?? ??????? ??????? Sell ??????? ?? ",symbol,"!!! >>>");
      PlaySound("timeout.wav");
      return(TRADE_RETCODE_ERROR);
     }
//----
   return(TRADE_RETCODE_DONE);
  }
//+------------------------------------------------------------------+
//| ???????????? ???????? ???????                                    |
//+------------------------------------------------------------------+
bool SellPositionModify
(
const string symbol,        // ???????? ???? ??????
uint deviation,             // ???????
double StopLoss,               // ???????? ? ??????? ?????????
double Takeprofit              // ?????????? ? ??????? ?????????
)
//SellPositionModify(symbol,deviation,StopLoss,Takeprofit);
  {
//----
   if(!StopLoss && !Takeprofit) return(true);

//---- ?????????? ???????? ????????? ??????? ? ?????????? ????????? ???????
   MqlTradeRequest request;
   MqlTradeResult result;

//---- ?????????? ????????? ?????????? ???????? ????????? ??????? 
   MqlTradeCheckResult check;

//---- ????????? ????????
   ZeroMemory(request);
   ZeroMemory(result);
   ZeroMemory(check);
//----
   int digit=int(SymbolInfoInteger(symbol,SYMBOL_DIGITS));
   double Bid=SymbolInfoDouble(symbol,SYMBOL_BID);
   if(!digit || !Bid) return(true);

//---- ????????????? ????????? ????????? ??????? MqlTradeRequest ??? ?????????? BUY ???????
   request.type   = ORDER_TYPE_SELL;
   request.price  = Bid;
   request.action = TRADE_ACTION_SLTP;
   request.symbol = symbol;
   request.sl=NormalizeDouble(StopLoss,digit);
   request.tp=NormalizeDouble(Takeprofit,digit);
   request.deviation=deviation;
   request.type_filling=ORDER_FILLING_FOK;
   
//---- ???????? ????????? ??????? ?? ????????????
   if(!OrderCheck(request,check))
     {
      Print(__FUNCTION__,"(): ???????? ?????? ??? ????????? ????????? ???????!");
      Print(__FUNCTION__,"(): OrderCheck(): ",ResultRetcodeDescription(check.retcode));
      return(false);
     }

   string comment="";
   StringConcatenate(comment,"<<< ============ ",__FUNCTION__,"(): ???????????? Sell ??????? ?? ",symbol," ============ >>>");
   Print(comment);

//---- ???????????? SELL ??????? ? ?????? ???????? ?????????? ????????? ???????
   if(!OrderSend(request,result) || result.retcode!=TRADE_RETCODE_DONE)
     {
      Print(__FUNCTION__,"(): ?????????? ?????????????? ???????!");
      Print(__FUNCTION__,"(): OrderSend(): ",ResultRetcodeDescription(result.retcode));
      return(false);
     }
   else
   if(result.retcode==TRADE_RETCODE_DONE)
     {
      comment="";
      StringConcatenate(comment,"<<< ============ ",__FUNCTION__,"(): Sell ??????? ?? ",symbol," ?????????????? ============ >>>");
      Print(comment);
      PlaySound("ok.wav");
     }
   else
     {
      Print(__FUNCTION__,"(): ?????????? ?????????????? ???????!");
      Print(__FUNCTION__,"(): OrderSend(): ",ResultRetcodeDescription(result.retcode));
     }
//----
   return(true);
  }
//+------------------------------------------------------------------+
//| ?????? ??????? ???? ??? ?????????? ?????                         |  
//+------------------------------------------------------------------+
double SellLotCount
(
string symbol,
double Money_Management
 )
// (string symbol, double Money_Management)
//+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
  {
//----
   double margin,Lot;

//---- ?????? ???? ?? ??????? ??????? ?? ?????
   margin=AccountInfoDouble(ACCOUNT_BALANCE)*Money_Management;
   if(!margin) return(-1);

   Lot=GetLotForOpeningPos(symbol,POSITION_TYPE_SELL,margin);

//---- ???????????? ???????? ???? ?? ?????????? ???????????? ???????? 
   if(!LotCorrect(symbol,Lot,POSITION_TYPE_SELL)) return(-1);
//----
   return(Lot);
  }
//+------------------------------------------------------------------+
//| ????????? ??????? ??????????? ?????? ?? ??????????? ????????     |
//+------------------------------------------------------------------+
bool StopCorrect(string symbol,int &Stop)
  {
//----
   int Extrem_Stop=int(SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL));
   if(Extrem_Stop<0) return(false);
   if(Stop<Extrem_Stop) Stop=Extrem_Stop;
//----
   return(true);
  }
//+------------------------------------------------------------------+
//| LotCorrect() function                                            |
//+------------------------------------------------------------------+
bool LotCorrect
(
string symbol,
double &Lot,
ENUM_POSITION_TYPE trade_operation
 )
//LotCorrect(string symbol, double& Lot, ENUM_POSITION_TYPE trade_operation)
//+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
  {

   double LOTSTEP=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   double MaxLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
   double MinLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   if(!LOTSTEP || !MaxLot || !MinLot) return(0);

//---- ???????????? ???????? ???? ?? ?????????? ???????????? ???????? 
   Lot=LOTSTEP*MathFloor(Lot/LOTSTEP);

//---- ???????? ???? ?? ??????????? ?????????? ????????
   if(Lot<MinLot) Lot=MinLot;
//---- ???????? ???? ?? ???????????? ?????????? ????????       
   if(Lot>MaxLot) Lot=MaxLot;

//---- ???????? ??????? ?? ?????????????
   if(!LotFreeMarginCorrect(symbol,Lot,trade_operation))return(false);
//----
   return(true);
  }
//+------------------------------------------------------------------+
//| LotFreeMarginCorrect() function                                  |
//+------------------------------------------------------------------+
bool LotFreeMarginCorrect
(
string symbol,
double &Lot,
ENUM_POSITION_TYPE trade_operation
 )
//(string symbol, double& Lot, ENUM_POSITION_TYPE trade_operation)
//+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
  {
//----  
//---- ???????? ??????? ?? ?????????????
   double freemargin=AccountInfoDouble(ACCOUNT_FREEMARGIN);
   if(freemargin<=0) return(false);
   double LOTSTEP=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   double MinLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   if(!LOTSTEP || !MinLot) return(0);
   double maxLot=GetLotForOpeningPos(symbol,trade_operation,freemargin);
//---- ???????????? ???????? ???? ?? ?????????? ???????????? ???????? 
   maxLot=LOTSTEP*MathFloor(maxLot/LOTSTEP);
   if(maxLot<MinLot) return(false);
   if(Lot>maxLot) Lot=maxLot;
//----
   return(true);
  }
//+------------------------------------------------------------------+
//| ?????? ?????? ???? ??? ?????????? ??????? ? ?????? lot_margin    |
//+------------------------------------------------------------------+
double GetLotForOpeningPos(string symbol,ENUM_POSITION_TYPE direction,double lot_margin)
  {
//----
   double price=0.0,n_margin;
   if(direction==POSITION_TYPE_BUY)  price=SymbolInfoDouble(symbol,SYMBOL_ASK);
   if(direction==POSITION_TYPE_SELL) price=SymbolInfoDouble(symbol,SYMBOL_BID);
   if(!price) return(NULL);

   if(!OrderCalcMargin(ENUM_ORDER_TYPE(direction),symbol,1,price,n_margin) || !n_margin) return(0);
   double lot=lot_margin/n_margin;

//---- ????????? ???????? ????????
   double LOTSTEP=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   double MaxLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
   double MinLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   if(!LOTSTEP || !MaxLot || !MinLot) return(0);

//---- ???????????? ???????? ???? ?? ?????????? ???????????? ???????? 
   lot=LOTSTEP*MathFloor(lot/LOTSTEP);

//---- ???????? ???? ?? ??????????? ?????????? ????????
   if(lot<MinLot) lot=0;
//---- ???????? ???? ?? ???????????? ?????????? ????????       
   if(lot>MaxLot) lot=MaxLot;
//----
   return(lot);
  }
//+------------------------------------------------------------------+
//| ??????? ??????????? ?????????? ???????? ???????? ?? ??? ????     |
//+------------------------------------------------------------------+
string ResultRetcodeDescription(int retcode)
  {
   string str;
//----
   switch(retcode)
     {
      case TRADE_RETCODE_REQUOTE: str="???????"; break;
      case TRADE_RETCODE_REJECT: str="?????? ?????????"; break;
      case TRADE_RETCODE_CANCEL: str="?????? ??????? ?????????"; break;
      case TRADE_RETCODE_PLACED: str="????? ????????"; break;
      case TRADE_RETCODE_DONE: str="?????? ?????????"; break;
      case TRADE_RETCODE_DONE_PARTIAL: str="?????? ????????? ????????"; break;
      case TRADE_RETCODE_ERROR: str="?????? ????????? ???????"; break;
      case TRADE_RETCODE_TIMEOUT: str="?????? ??????? ?? ????????? ???????";break;
      case TRADE_RETCODE_INVALID: str="???????????? ??????"; break;
      case TRADE_RETCODE_INVALID_VOLUME: str="???????????? ????? ? ???????"; break;
      case TRADE_RETCODE_INVALID_PRICE: str="???????????? ???? ? ???????"; break;
      case TRADE_RETCODE_INVALID_STOPS: str="???????????? ????? ? ???????"; break;
      case TRADE_RETCODE_TRADE_DISABLED: str="???????? ?????????"; break;
      case TRADE_RETCODE_MARKET_CLOSED: str="????? ??????"; break;
      case TRADE_RETCODE_NO_MONEY: str="??? ??????????? ???????? ??????? ??? ?????????? ???????"; break;
      case TRADE_RETCODE_PRICE_CHANGED: str="???? ??????????"; break;
      case TRADE_RETCODE_PRICE_OFF: str="??????????? ????????? ??? ????????? ???????"; break;
      case TRADE_RETCODE_INVALID_EXPIRATION: str="???????? ???? ????????? ?????? ? ???????"; break;
      case TRADE_RETCODE_ORDER_CHANGED: str="????????? ?????? ??????????"; break;
      case TRADE_RETCODE_TOO_MANY_REQUESTS: str="??????? ?????? ???????"; break;
      case TRADE_RETCODE_NO_CHANGES: str="? ??????? ??? ?????????"; break;
      case TRADE_RETCODE_SERVER_DISABLES_AT: str="???????????? ???????? ????????"; break;
      case TRADE_RETCODE_CLIENT_DISABLES_AT: str="???????????? ???????? ?????????? ??????????"; break;
      case TRADE_RETCODE_LOCKED: str="?????? ???????????? ??? ?????????"; break;
      case TRADE_RETCODE_FROZEN: str="????? ??? ??????? ??????????"; break;
      case TRADE_RETCODE_INVALID_FILL: str="?????? ???????????????? ??? ?????????? ?????? ?? ??????? "; break;
      case TRADE_RETCODE_CONNECTION: str="??? ?????????? ? ???????? ????????"; break;
      case TRADE_RETCODE_ONLY_REAL: str="???????? ????????? ?????? ??? ???????? ??????"; break;
      case TRADE_RETCODE_LIMIT_ORDERS: str="????????? ????? ?? ?????????? ?????????? ???????"; break;
      case TRADE_RETCODE_LIMIT_VOLUME: str="????????? ????? ?? ????? ??????? ? ??????? ??? ??????? ???????"; break;
      default: str="??????????? ?????????";
     }
//----
   return(str);
  }
//+------------------------------------------------------------------+
//| ??????? ?????????? ???????? ???????? ??? ??????? ??????          |
//+------------------------------------------------------------------+
bool ResultRetcodeCheck(int retcode)
  {
   string str;
//----
   switch(retcode)
     {
      case TRADE_RETCODE_REQUOTE: /*???????*/ return(false); break;
      case TRADE_RETCODE_REJECT: /*?????? ?????????*/ return(false); break;
      case TRADE_RETCODE_CANCEL: /*?????? ??????? ?????????*/ return(true); break;
      case TRADE_RETCODE_PLACED: /*????? ????????*/ return(true); break;
      case TRADE_RETCODE_DONE: /*?????? ?????????*/ return(true); break;
      case TRADE_RETCODE_DONE_PARTIAL: /*?????? ????????? ????????*/ return(true); break;
      case TRADE_RETCODE_ERROR: /*?????? ????????? ???????*/ return(false); break;
      case TRADE_RETCODE_TIMEOUT: /*?????? ??????? ?? ????????? ???????*/ return(false); break;
      case TRADE_RETCODE_INVALID: /*???????????? ??????*/ return(true); break;
      case TRADE_RETCODE_INVALID_VOLUME: /*???????????? ????? ? ???????*/ return(true); break;
      case TRADE_RETCODE_INVALID_PRICE: /*???????????? ???? ? ???????*/ return(true); break;
      case TRADE_RETCODE_INVALID_STOPS: /*???????????? ????? ? ???????*/ return(true); break;
      case TRADE_RETCODE_TRADE_DISABLED: /*???????? ?????????*/ return(true); break;
      case TRADE_RETCODE_MARKET_CLOSED: /*????? ??????*/ return(true); break;
      case TRADE_RETCODE_NO_MONEY: /*??? ??????????? ???????? ??????? ??? ?????????? ???????*/ return(true); break;
      case TRADE_RETCODE_PRICE_CHANGED: /*???? ??????????*/ return(false); break;
      case TRADE_RETCODE_PRICE_OFF: /*??????????? ????????? ??? ????????? ???????*/ return(false); break;
      case TRADE_RETCODE_INVALID_EXPIRATION: /*???????? ???? ????????? ?????? ? ???????*/ return(true); break;
      case TRADE_RETCODE_ORDER_CHANGED: /*????????? ?????? ??????????*/ return(true); break;
      case TRADE_RETCODE_TOO_MANY_REQUESTS: /*??????? ?????? ???????*/ return(false); break;
      case TRADE_RETCODE_NO_CHANGES: /*? ??????? ??? ?????????*/ return(false); break;
      case TRADE_RETCODE_SERVER_DISABLES_AT: /*???????????? ???????? ????????*/ return(true); break;
      case TRADE_RETCODE_CLIENT_DISABLES_AT: /*???????????? ???????? ?????????? ??????????*/ return(true); break;
      case TRADE_RETCODE_LOCKED: /*?????? ???????????? ??? ?????????*/ return(true); break;
      case TRADE_RETCODE_FROZEN: /*????? ??? ??????? ??????????*/ return(false); break;
      case TRADE_RETCODE_INVALID_FILL: /*?????? ???????????????? ??? ?????????? ?????? ?? ??????? */ return(true); break;
      case TRADE_RETCODE_CONNECTION: /*??? ?????????? ? ???????? ????????*/ break;
      case TRADE_RETCODE_ONLY_REAL: /*???????? ????????? ?????? ??? ???????? ??????*/ return(true); break;
      case TRADE_RETCODE_LIMIT_ORDERS: /*????????? ????? ?? ?????????? ?????????? ???????*/ return(true); break;
      case TRADE_RETCODE_LIMIT_VOLUME: /*????????? ????? ?? ????? ??????? ? ??????? ??? ??????? ???????*/ return(true); break;
      default: /*??????????? ?????????*/ return(false);
     }
//----
   return(true);
  }
//+------------------------------------------------------------------+

   
 

Справочник MQL5 / Основы языка / Функции / Экспортирование функций 

Ключевой модификатор export.