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

Coin Flip

coin_flip.mq4

Похожие материалы по тегам

indo run 1.5.mq4MQL4 / MetaTrader 4 · 2 общих теговoverdraftspazm v6.mq4MQL4 / MetaTrader 4 · 2 общих теговforex-flex-ea.mq4MQL4 / MetaTrader 4 · 2 общих теговadx_rsi_amp_atr_strategy_ea.mq4MQL4 / MetaTrader 4 · 2 общих теговichimoku ea.mq4MQL4 / MetaTrader 4 · 2 общих теговanother martingale fix.mq4MQL4 / MetaTrader 4 · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

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

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

НастройкаОписание
Risk Риск — Доля риска от баланса для расчёта размера лота
Lot Лот — Базовый размер лота при ручном или фиксированном режиме
Martingale Мартингейл — Множитель увеличения лота после убыточной сделки
MaxLot Максимальный лот — Верхний предел размера лота
TakeProfit Тейк-профит — Уровень фиксации прибыли в пунктах от цены входа
StopLoss Стоп-лосс — Уровень стоп-лосса в пунктах от цены входа
MaxAttempts Максимум попыток — Максимальное количество повторных попыток отправки ордера при реквоте
Pause Пауза — Задержка между повторными попытками отправки ордера в секундах
Slippage Допуск цены — Допустимое проскальзывание в пунктах при открытии ордера
TrailingStart Начало трейлинга — Расстояние в пунктах от цены входа для активации трейлинг-стопа
TrailingStop Шаг трейлинга — Расстояние в пунктах для фиксации трейлинг-стопа
Magic Магический номер — Идентификатор ордеров, открытых советником
Com Комментарий — Текст комментария, добавляемый к открываемым ордерам
DrawInfo Отображение информации — Включает или отключает вывод информационных меток на график
Languages Язык — Выбор языка интерфейса информационных меток
TextColor Цвет текста — Цвет информационных меток на графике
Получить полный код

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

#property version   "1.00"
#property strict

enum lang
  {
   en=0,     // English
   ru=1,     // Russian
  };
input double  Risk           = 0.25;
input double  Lot            = 0.01;
input double  Martingale     = 1.8;
input double  MaxLot         = 1.0;
input int     TakeProfit     = 50;
input int     StopLoss       = 25;
input int     MaxAttempts    = 10;
input int     Pause          = 30;
input int     Slippage       = 10;
input int     TrailingStart  = 14;
input int     TrailingStop   = 3;
sinput int    Magic          = 12345;
sinput string Com            = "Coin Flip";
input bool    DrawInfo       = true;
input lang    Languages      = en;
input color   TextColor      = clrWhite;

double iMartingale,TP,SL;
int dig=1,ticket,iTrailingStart,iTrailingStop,CountBuy,CountSell,iTakeProfit,iStopLoss;
uint l_orders[];

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

void OnDeinit(const int reason)
  {
   for(int i=0; i<ObjectsTotal(0,-1,-1);i++)
     {
      if(StringFind(ObjectName(0,i),"Label")>=0)
         if(ObjectDelete(0,ObjectName(0,i)))
            i--;
     }
  }

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

bool LastOrderLoss(int magic,double &lot)
  {
   lot=0;
   for(int i=(OrdersHistoryTotal()-1); i>=0;i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
         if(OrderMagicNumber()==magic)
           {
            if(OrderProfit()<0)
               lot=OrderLots();
            break;
           }
   if(lot>0)
      return true;
   else
      return false;
  }

double NormalizeLot(double lot)
  {
   double minLot=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   double maxLot=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   double stepLot=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
   if(lot>0)
     {
      lot=MathMax(minLot,lot);
      lot=MathMin(maxLot,lot);
      lot=minLot+NormalizeDouble((lot-minLot)/stepLot,0)*stepLot;
     }
   else
      lot=0;
   return lot;
  }

double MoneyManagement()
  {
   double lots=0;
   double Free_Equity=AccountEquity();
   if(Free_Equity<=0)return(0);
   double TickValue=MarketInfo(Symbol(),MODE_TICKVALUE);
   double LotStep=MarketInfo(Symbol(),MODE_LOTSTEP);
   lots=MathFloor((Free_Equity*MathMin(Risk,100)/100)/(StopLoss*dig*TickValue)/LotStep)*LotStep;
   double MinLots=MarketInfo(Symbol(),MODE_MINLOT);
   double MaxLots=MarketInfo(Symbol(),MODE_MAXLOT);
   if(lots<MinLots)lots=MinLots;
   if(lots>MaxLots)lots=MaxLots;
   if(Risk<=0)lots=Lot;
   return(lots);
  }

double NormalizeLots(double lots,string l_Symbol)
  {
   double result=0;
   double minLot=SymbolInfoDouble(l_Symbol,SYMBOL_VOLUME_MIN);
   double maxLot=SymbolInfoDouble(l_Symbol,SYMBOL_VOLUME_MAX);
   double stepLot=SymbolInfoDouble(l_Symbol,SYMBOL_VOLUME_STEP);
   if(lots>0)
     {
      lots=MathMax(minLot,lots);
      lots=minLot+NormalizeDouble((lots-minLot)/stepLot,0)*stepLot;
      result=MathMin(maxLot,lots);
     }
   else
      result=minLot;
   return (NormalizeDouble(result,2));
  }

int AntiRequoteOrderSend(string symbol,int cmd,double volume,double pric,int slippage,double stoploss,double takeprofit,string comment="",int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
  {
   ticket=0;
   int cnt=0;
   while(true)
     {
      if(cnt>=MaxAttempts) {Print("order not opened after ",MaxAttempts," attempts"); break;}
      cnt++;
      ticket=OrderSend(symbol,cmd,volume,pric,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color);
      if(ticket>0) break;
      Sleep(Pause*1000);
     }
   return(ticket);
  }

void CountOrders(int &l_CountBuy,int &l_CountSell,int l_Magic)
  {
   l_CountBuy=l_CountSell=0;
   for(int i=0; i<OrdersTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()==l_Magic)
        {
         if(OrderType()==ORDER_TYPE_BUY)
            l_CountBuy++;
         if(OrderType()==ORDER_TYPE_SELL)
            l_CountSell++;
        }
   return;
  }

double value_profit()
  {
   double ID=0;
   int OT=OrdersTotal();
   if(OT>0)
     {
      for(int i=OT-1; i>=0; i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol())
               ID+=OrderProfit()+OrderSwap()+OrderCommission();
           }
        }
     }
   return(ID);
  }

void SetLabel(string nm,string tx,color cl,int xd,int yd,int cr=0,int fs=9,string font="Tahoma")
  {
   if(ObjectFind(nm)<0) ObjectCreate(nm,OBJ_LABEL,0,0,0);
   ObjectSetText(nm,tx,fs,font,cl);
   ObjectSet(nm,OBJPROP_COLOR,cl);
   ObjectSet(nm,OBJPROP_XDISTANCE,xd);
   ObjectSet(nm,OBJPROP_YDISTANCE,yd);
   ObjectSet(nm,OBJPROP_CORNER,cr);
   ObjectSet(nm,OBJPROP_FONTSIZE,fs);
   ObjectSet(nm,OBJPROP_BACK,false);
   ObjectSet(nm,OBJPROP_SELECTABLE,false);
   ObjectSet(nm,OBJPROP_READONLY,false);
  }

double TotalProfit()
  {
     {
      double OProfit=0;
      for(int i=0; i<OrdersHistoryTotal(); i++)
        {
         if(!(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))) break;
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
            if(OrderCloseTime()>=iTime(Symbol(),PERIOD_MN1,1200))OProfit+=OrderProfit();
        }
      return (OProfit);
     }
  }

double Profit(int Bar)
  {
   double OProfit=0;
   for(int i=0; i<OrdersHistoryTotal(); i++)
     {
      if(!(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         if(OrderCloseTime()>=iTime(Symbol(),PERIOD_D1,Bar) && OrderCloseTime()<iTime(Symbol(),PERIOD_D1,Bar)+86400) OProfit+=OrderProfit();
     }
   return (OProfit);
  }

double ProfitMons(int Bar)
  {
   double OProfit=0;
   for(int i=0; i<OrdersHistoryTotal(); i++)
     {
      if(!(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         if(OrderCloseTime()>=iTime(Symbol(),PERIOD_MN1,Bar) && OrderCloseTime()<iTime(Symbol(),PERIOD_MN1,Bar)+2592000) OProfit+=OrderProfit();
     }
   return (OProfit);
  }

string Error(int error_code)
  {
   string error_string;
   switch(error_code)
     {
      case 0:
         error_string="no error returned.";                                                                  break;
      case 1:
         error_string="no error returned, but the result is unknown.";                                       break;
      case 2:
         error_string="common error.";                                                                       break;
      case 3:
         error_string="invalid trade parameters.";                                                           break;
      case 4:
         error_string="trade server is busy.";                                                               break;
      case 5:
         error_string="old version of the client terminal.";                                                 break;
      case 6:
         error_string="no connection with trade server.";                                                    break;
      case 7:
         error_string="not enough rights.";                                                                  break;
      case 8:
         error_string="too frequent requests.";                                                              break;
      case 9:
         error_string="malfunctional trade operation.";                                                      break;
      case 64:
         error_string="account disabled.";                                                                   break;
      case 65:
         error_string="invalid account.";                                                                    break;
      case 128:
         error_string="trade timeout.";                                                                      break;
      case 129:
         error_string="invalid price.";                                                                      break;
      case 130:
         error_string="invalid stops.";                                                                      break;
      case 131:
         error_string="invalid trade volume.";                                                               break;
      case 132:
         error_string="market

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

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

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

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

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

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

Стоимость полного кода
1 888₽ ≈ $23.08