← К каталогу
Исходный код · ID 4651

Market Short

$smgo_short.mq4
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Market Short — торговый советник для MetaTrader 4, предназначенный для открытия коротких (sell) позиций на валютном рынке. Советник позволяет размещать несколько ордеров с настраиваемыми параметрами стоп-лосса и тейк-профита, как в ценовых единицах, так и в пипсах.

Основная функция советника — расчёт объёма позиции на основе процента риска от баланса счёта с последующей проверкой лимитов минимального и максимального лота. При активации параметра UseExistingStops советник считывает стоп-лосс и тейк-профит первого найденного ордера и применяет их к новым позициям.

Советник использует торговые API MetaTrader 4 для отправки и модификации ордеров, выводит информацию об ошибках через алерты, воспроизводит звуковой сигнал при успешной модификации и делает скриншоты графиков после каждой операции.

Настройки программы

НастройкаОписание
ins0 Текстовая метка, обозначающая группу настроек количества ордеров.
Number_of_order Количество ордеров, которые советник разместит за один запуск.
UseExistingStops Переключатель: при значении true советник при наличии существующих sell-ордеров с тем же магическим номером берёт стоп-лосс и тейк-профит первого найденного ордера и применяет их к новым позициям.
Lots Размер лота для каждого ордера. Если значение равно 0, лот рассчитывается автоматически на основе процента риска и размера стоп-лосса.
ins1 Текстовая метка, обозначающая группу настроек процента риска.
Risk Процент риска от баланса счёта, используемый для автоматического расчёта размера лота. Значение 0 отключает расчёт по риску.
ins2 Текстовая метка, обозначающая группу настроек стоп-лосса и тейк-профита в цене.
SlAsPrice Стоп-лосс, заданный как конкретная цена. Если значение не нулевое, приоритет отдаётся ценовому стоп-лоссу вместо пипсового.
TpAsPrice Тейк-профит, заданный как конкретная цена. Если значение не нулевое, приоритет отдаётся ценовому тейк-профиту вместо пипсового.
ins3 Текстовая метка, обозначающая группу настроек стоп-лосса и тейк-профита в пипсах.
SlAsPips Стоп-лосс, заданный в пипсах относительно текущей цены Bid. Используется при условии, что SlAsPrice равен нулю.
TpAsPips Тейк-профит, заданный в пипсах относительно текущей цены Bid. Используется при условии, что TpAsPrice равен нулю.
Slippage Допустимое проскальзывание цены при отправке ордера.
MagicNumber Магический номер, идентифицирующий ордера, открытые данным советником, при поиске и управлении позициями.
TradeComment Комментарий, присваиваемый каждому размещённому ордеру для идентификации в истории торгов.
Получить полный код

Поиск по коду файла

#property show_inputs
#include <stdlib.mqh>

extern string  ins0="Number orders to place";   
extern int     Number_of_order = 1;
extern bool    UseExistingStops = true;
extern double  Lots=0;
extern string  ins1="Risk Percent. 0=Disabled";
extern double  Risk=0.5;
extern string  ins2="Stop loss and take profit as price";    
extern double  SlAsPrice;
extern double  TpAsPrice;
extern string  ins3="Stop loss and take profit as pips";    
extern double  SlAsPips=25;
extern double  TpAsPips=50;
extern double  Slippage = 1;
extern int     MagicNumber=7077;
extern string  TradeComment = "";

int Width = 1376;
int Height = 768;
double takeprofit,StopLoss,StopLossPips, Slip;
int Divisor=1, ticket=0, sellOrders, totalOrders;

double MinLotSize,MaxLotSize,point,AmountAtRisk,PointCostValue,LotSize;
double FirstOrderTicket,FirstOrderTakeProfit, FirstOrderStopLoss,FirstOrderOpenPrice;
string Currency="";
string SymbolExtra="";
string Lot="";

int start()
{
      // код доступен только после оплаты
   }

  int err ;
  int i = 0;
  Slip = Slippage;
  double     FiveDigitM;

  if(StringFind(Symbol(), "JPY",0) > 0)
         FiveDigitM = 100 ;
      else  
         FiveDigitM = 10000 ;

   point=Point;
   if(Digits == 5 || Digits == 3 || Symbol() == "XAUUSD") 
   {
      point = Point * 10 ; 
      Slip = Slippage * 10;
      Divisor = 10;
   } 

   sellOrders = CountOrders(Symbol(), MagicNumber, OP_SELL);

   if (TpAsPrice==0 && TpAsPips==0) takeprofit=0;
   if (!TpAsPips==0) takeprofit = Bid - TpAsPips / FiveDigitM;
   if (!TpAsPrice==0) takeprofit=TpAsPrice;

   if (SlAsPrice==0 && SlAsPips==0) StopLoss=0;
   if (!SlAsPips==0) StopLoss = Bid + SlAsPips / FiveDigitM ;    
   if (!SlAsPrice==0) StopLoss=SlAsPrice;

   StopLossPips = (StopLoss - Bid) / point;

   if(UseExistingStops && sellOrders>0)
   {
      FirstOrderTicket=GetFirstTicketBymagic(MagicNumber); 
      StopLossPips = (FirstOrderStopLoss-Bid) / point;
   }

    PointCost();
    if(Lots==0) Calc();

if(!UseExistingStops || sellOrders==0)
{       
   ticket=0;
   for(i = 0; i < Number_of_order; i++)
   {
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,TradeComment,MagicNumber,0,Red);

      err = GetLastError() ;

      if ( err  != 0)
             Alert("Failed to create Order. Error = ",ErrorDescription(err)) ;
      else
      {

         OrderModify(ticket ,OrderOpenPrice(), StopLoss,takeprofit,0,CLR_NONE);
         err = GetLastError() ;

         if ( err  != 0)
                Alert("Failed to Modify Order. Error = ",ErrorDescription(err), " Order Id:, ", ticket, " Limit = ", takeprofit, " Stop loss = ", StopLoss ) ;
         else
                PlaySound("ok.wav") ;
      }

      WindowScreenShot("ScreenShots\\"+Symbol()+"_M"+Period()+"\\"+Symbol()+"_M"+ Period()+"_"+TimeToStr(iTime(NULL, 0, 0),TIME_DATE)+"_"+TimeHour(TimeCurrent())+"_"+T

Показано первые 50% кода (символов: 4456)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
445,60₽ ≈ $5.55