SmartAssTrade-V2
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «smartasstrade-v2.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
SmartAssTrade-V2 — это советник (Expert Advisor) для MetaTrader 4, написанный на языке MQL4 и предназначенный для автоматической торговли на валютном рынке. Работает исключительно на таймфрейме M30, что указано в свойствах и исходном коде продукта. Советник разработан Roy Philips Jacobs и опубликован в 2014 году.
Советник анализирует ценовые данные с нескольких таймфреймов, используя осцилляторы и индикаторы трендов для формирования сигналов на покупку и продажу. Поддерживается автоматический расчёт уровней Take Profit и Stop Loss, а также опциональное использование трейлинг-стопа для управления открытыми позициями.
Предусмотрена автоматическая корректировка объёма лотов на основе баланса счёта или ручная настройка. Советник предоставляет настройки для торговли по пятницам, ограничения максимального количества открытых ордеров, а также гибкие параметры фиксации прибыли и убытков как в автоматическом, так и в ручном режиме.
Настройки программы
| Настройка | Описание |
|---|---|
| SmartAssTradeV2 | SmartAssTradeV2 — Текстовый параметр для проверки авторских прав (сopyright-проверка). |
| SmartAssTradeV2TF | SmartAssTradeV2 таймфрейм — Текстовый параметр-информация о рабочем таймфрейме советника. |
| SmartAssTradeV2Period | Период SmartAssTradeV2 — Период (таймфрейм), на котором работает советник. По умолчанию PERIOD_M30. |
| If True, EA still trading at Friday (FridayTrade) | Торговля по пятницам — Если True, советник продолжает торговать в пятницу. |
| OptimizationLots | Оптимизация лотов — Текстовый параметр-информация для группы настроек оптимизации лотов. |
| If True, Lots wil calculation by EA, default Lots size = 0.01" (LotsOptimization) | Оптимизация лотов — Если True, размер лота рассчитывается советником автоматически на основе баланса счёта. |
| If LotsOptimization=False, Lots adjusted by user (Lots) | Размер лота — Размер лота при отключённой оптимизации (LotsOptimization=False). Значение регулируется пользователем. |
| Maximum Allowed for Open Order (Maximum Pairs to Trade = 12 pairs) (MaxOpenOrder) | Максимум открытых ордеров — Максимальное количество одновременно открытых ордеров. |
| AutomaticSystemTP | Автоматическая система TP — Текстовый параметр-информация для группы настроек автоматического Take Profit. |
| TP will calculation by EA and Automatic TP by EA (AutomaticTakeProfit) | Автоматический Take Profit — Если True, уровень Take Profit рассчитывается советником автоматически. |
| True or False -> If Set True, 100% TP by EA not use minimum TP. (NoMinimumTakeProfit) | Без минимального Take Profit — Если True, советник не использует минимальное значение Take Profit. |
| TP by EA on minimum TP values (MinimumSystemTP) | Минимальная система TP — Текстовый параметр-информация для настроек минимального Take Profit. |
| Minimum TP by EA on the AutomaticTakeProfit=True function, default value 27 (MinimumTP) | Минимальный Take Profit — Минимальное значение Take Profit при включённом AutomaticTakeProfit и выключенном NoMinimumTakeProfit. |
| TP by Terminal MT4 (same as manual trading) (ManualSystemTP) | Ручная система TP — Текстовый параметр-информация для группы ручных настроек Take Profit. |
| TP by System, values can adjust by user, default value 35 (TakeProfit) | Take Profit — Значение Take Profit при выключенном AutomaticTakeProfit. Регулируется пользователем. |
| AutomaticSystemSL | Автоматическая система SL — Текстовый параметр-информация для группы настроек автоматического Stop Loss. |
| SL will calculation by EA (AutomaticStopLoss) | Автоматический Stop Loss — Если True, уровень Stop Loss рассчитывается советником автоматически. |
| SL values can adjusted by user (ManualSystemSL) | Ручная система SL — Текстовый параметр-информация для группы ручных настроек Stop Loss. |
| SL adjusted by user, default value 62 (StopLoss) | Stop Loss — Значение Stop Loss при выключенном AutomaticStopLoss. Регулируется пользователем. |
| Use Trailing Stop, True (Yes) or False (Not) (UseTrailingStop) | Использовать трейлинг-стоп — Если True, используется трейлинг-стоп для управления открытыми позициями. |
| If Use Trailing Stop True, input Trailing Stop Value, default value 30 (TrailingStop) | Трейлинг-стоп — Значение трейлинг-стопа при включённом UseTrailingStop. |
| Input Trailing Stop Step Value (default 1.0) (TrailingStopStep) | Шаг трейлинг-стопа — Шаг трейлинг-стопа при включённом UseTrailingStop. |
Поиск по коду файла
#property version "2.00"
#property description "The SmartAssTrade-V2 Forex Expert Advisor is SmartAssTrade EA Version 2 in Code Base MQL4"
#property description "SmartAssTrade-V2 EA Only working on M30 Timeframes or PERIOD_M30"
#property description "If you trade use SmartAssTrade-V2 EA on others Timeframes, may you will always loss."
#property description "In any case the author is not liable for any damage or loss whatsoever."
#property description "Sometimes high profits can be disrupted by a row of losses."
#property description "In the Forex online trading, it is impossible to always profit."
#property description "-------Use this Expert Advisor at your own risk.-------"
#include <stderror.mqh>
#include <stdlib.mqh>
input string SmartAssTradeV2 = "Copyright ? 2014 3RJ ~ Roy Philips-Jacobs";
input string SmartAssTradeV2TF = "SmartAssTrade-V2 EA's Only Use on M30 Timeframes";
input int SmartAssTradeV2Period = PERIOD_M30;
extern bool FridayTrade = True; // If True, EA still trading at Friday
input string OptimizationLots = "Set LotsOptimization=True";
extern bool LotsOptimization = True; // If True, Lots wil calculation by EA, default Lots size = 0.01"
extern double Lots = 0.01; // If LotsOptimization=False, Lots adjusted by user
extern int MaxOpenOrder = 12; // Maximum Allowed for Open Order (Maximum Pairs to Trade = 12 pairs)
input string AutomaticSystemTP = "Set AutomaticTakeProfit=True or False";
extern bool AutomaticTakeProfit = True; // TP will calculation by EA and Automatic TP by EA
extern bool NoMinimumTakeProfit = False; // True or False -> If Set True, 100% TP by EA not use minimum TP.
input string MinimumSystemTP = "If Set NoMinimumTakeProfit=False"; // TP by EA on minimum TP values
extern double MinimumTP = 27; // Minimum TP by EA on the AutomaticTakeProfit=True function, default value 27
input string ManualSystemTP = "If Set AutomaticTakeProfit=False"; // TP by Terminal MT4 (same as manual trading)
extern double TakeProfit = 35; // TP by System, values can adjust by user, default value 35
input string AutomaticSystemSL = "Set AutomaticStopLoss=True";
extern bool AutomaticStopLoss = True; // SL will calculation by EA
input string ManualSystemSL = "If Set AutomaticStopLoss=False"; // SL values can adjusted by user
extern double StopLoss = 62; // SL adjusted by user, default value 62
extern bool UseTrailingStop = False; // Use Trailing Stop, True (Yes) or False (Not)
extern double TrailingStop = 30.0; // If Use Trailing Stop True, input Trailing Stop Value, default value 30
extern double TrailingStopStep = 1.0; // Input Trailing Stop Step Value (default 1.0)
double digit,lot,pp;
double AcEq,sl,tp,minlot;
double tsstv,tstpv,trstart;
double slA,slB,tpA,tpB,tpAB;
double lastAsk,lastBid,dev,Mnt;
double difB,difS,pBo,pSo,pdifB,pdifS;
bool nomintp;
bool NoOrder,TrlStp;
bool lotopt,opttp,autsl;
bool mdHC,mdLC,mdUp,mdDn;
bool SignalBuy,SignalSell;
double ask; // Current Bid price
double bid; // Current Ask price
datetime time; // Time of the last prices update
double last; // Price of the last deal (Last)
ulong volume; // Volume for the current Last price
int trx;
int OpOrd;
int copied;
int satmagic=3699; // magic number
int totfr,codB,codS;
int hb,hs,ob,os,s,ip,ox;
int totalord,totalpft,totalhst;
string comB;
string comS;
string CopyR;
string symbol;
void EventSetTimer();
int OnInit(void)
{
// код доступен только после оплаты
}
void LotOpt() //-- function: calculation Optimization Lots
{
if(lotopt)
{
AcEq=AccountEquity();
minlot=MarketInfo(symbol,MODE_MINLOT);
if(AcEq<=1000.00) {lot=NormalizeDouble(MarketInfo(symbol,MODE_MINLOT),2);}
else {lot=NormalizeDouble((MathFloor(AcEq/100)*0.001)/OpOrd,2);}
if(lot<minlot) {lot=NormalizeDouble(MarketInfo(symbol,MODE_MINLOT),2);}
}
else lot=Lots;
return;
} //-end LotOpt()
void OptSL() //-- function: calculation Stop Loss
{
if(!autsl) {sl=StopLoss*pp;}
else {sl=62*pp;}
return;
} //-end OptSL()
void CalcTP() //-- function: for calculation Automatic Take Profit.
{
RefreshRates();
double dvab=Ask-Bid;
if(opttp && nomintp)
{
tp=(35*pp)-dvab;
if(dvab<=5*pp) {tpAB=tp-(7*pp);}
else {tpAB=tp-(11*pp);}
}
if(opttp && !nomintp)
{
tp=(35*pp)-dvab;
tpAB=pp*MinimumTP;
}
if(!opttp) {tp=TakeProfit*pp;}
RefreshRates();
pBo=High[0]-Close[0];
pSo=Close[0]-Low[0];
pdifB=pp*difB;
pdifS=pp*difS;
mdHC=(pBo>pdifB);
mdLC=(pSo>pdifS);
mdUp=(Close[0]<(lastBid-pdifB));
mdDn=(Close[0]>(lastAsk+pdifS));
return;
} //-end CalcTP()
void CkOpen() //-- function: CheckOpenTrade.
{
totalord=OrdersTotal();
ob=0;
os=0;
for (s=0; s<totalord; s++)
{
if (OrderSelect(s,SELECT_BY_POS,MODE_TRADES)==True)
{
if (OrderSymbol()==symbol && OrderMagicNumber()==satmagic)
{
if (OrderType()==OP_BUY) {ob++; hb++;}
if (OrderType()==OP_SELL) {os++; hs++;}
}
}
}
return;
} //-end CkOpen()
void CkClose() //-- function: CheckOrderClose.
{
CkOpen();
datetime octm;
totalhst=OrdersHistoryTotal();
for (s=0; s<totalhst; s++)
{
if(OrderSelect(s,SELECT_BY_POS,MODE_HISTORY)==True)
{
if(OrderSymbol()==symbol && OrderMagicNumber()==satmagic)
{
if(OrderType()==OP_BUY)
{
RefreshRates();
octm=OrderCloseTime();
if(hb>0 && ob==0 && octm>0)
{
Print("-----CLOSED BUY ORDER ",symbol," - Instant Close By System..OK!");
PlaySound("ping.wav");
hb=0;
ox=1;
totfr=1;
trx=0;
break;
}
}
if(OrderType()==OP_SELL)
{
RefreshRates();
octm=OrderCloseTime();
if(hs>0 && os==0 && octm>0)
{
Print("-----CLOSED SELL ORDER ",symbol," - Instant Close By System..OK!");
PlaySound("ping.wav");
hs=0;
ox=1;
totfr=1;
trx=0;
break;
}
}
}
}
}
return;
} //-end CkClose()
void SmartAss() //-- function: Check trend and calculation order every 30 minutes (TF M30)
{
ResetLastError();
RefreshRates();
SignalBuy=false;
SignalSell=false;
bool Upward;
bool Dnward;
int upm,dnm;
int osb,oss,x;
codB=0;
codS=0;
int TFX[]={1,5,15,30,60};
for(x=0;x<5;x++)
{
if (iOsMA(symbol,TFX[x],12,26,9,0,0)>iOsMA(symbol,TFX[x],12,26,9,0,1))
{osb++;}
if (iOsMA(symbol,TFX[x],12,26,9,0,0)<iOsMA(symbol,TFX[x],12,26,9,0,1))
{oss++;}
if(iMA(symbol,TFX[x],20,0,0,0,0)>iMA(symbol,TFX[x],20,0,0,1,0))
{upm++;}
if(iMA(symbol,TFX[x],20,0,0,0,0)<iMA(symbol,TFX[x],20,0,0,1,0))
{dnm++;}
}
if (osb>=4 && upm>=4) {Upward=true; codB=1;}
if (oss>=4 && dnm>=4) {Dnward=true; codS=1;}
if (osb==5 && upm==5) {Upward=true; codB=2;}
if (oss==5 && dnm==5) {Dnward=true; codS=2;}
RefreshRates();
double wpr0=100-MathAbs(iWPR(symbol,30,26,0));
double wpr1=100-MathAbs(iWPR(symbol,30,26,1));
double rsi0=iRSI(symbol,30,14,0,0);
double rsi1=iRSI(symbol,30,14,0,1);
bool wprmb=((wpr0<90.0)&&(wpr0>wpr1))&&((rsi0<77.0)&&(rsi0>rsi1));
bool wprms=((wpr0>10.0)&&(wpr0<wpr1))&&((rsi0>23.0)&&(rsi0<rsi1));
CkOpen();
Mnt=(double)Minute();
if((ob+os==0)&&(ox+totfr==0)&&(NoOrder==false)&&(MathMod(Mnt,30.0)>2.0))
{
if((Upward==true)&&(codB!=0)&&(wprmb)) {SignalBuy=true;}
if((Dnward==true)&&(codS!=0)&&(wprms)) {SignalSell=true;}
}
if(SignalBuy) {OrdBuy();} // New Order BUY
if(SignalSell) {OrdSell();} // New Order SELL
return;
} //--end SmartAss()
void OrdBuy() //-- function: Open order if price was up
{
CkOpen();
LotOpt();
OptSL();
CalcTP();
comB=StringConcatenate(WindowExpertName()," #BUY#ins",(string)codB); // buy orders comments
if(ob+os==0)
{
if((AccountFreeMarginCheck(symbol,OP_BUY,lot)<=0) || (GetLastError()==134))
{Print("-----OPEN NEW BUY ORDER ",symbol," - NOT ENOUGH MONEY..!"); ResetLastError(); return;}
else
{
ResetLastError();
int error;
bool result;
RefreshRates();
ask=MarketInfo(symbol,MODE_ASK);
lastBid=ask;
slA=NormalizeDouble(ask-sl,digit);
tpA=NormalizeDouble(ask+tp,digit);
result=OrderSend(symbol,OP_BUY,lot,ask,dev,slA,tpA,comB,satmagic,0,clrGreen);
if(result!=TRUE) {error=GetLastError();}
if(error>0||result!=true)
{
ResetLastError();
Sleep(2000);
RefreshRates();
ask=MarketInfo(symbol,MODE_ASK);
lastBid=ask;
slA=NormalizeDouble(ask-sl,digit);
tpA=NormalizeDouble(ask+tp,digit);
result=OrderSend(symbol,OP_BUY,lot,ask,dev,slA,tpA,comB,satmagic,0,clrGreen);
error=GetLastError();
if(error>0)
{
Print("Failed to Open New BUY ORDER ",symbol,"! Error code = ",
GetLastError(), ", ",ErrorDescription(error));
ResetLastError();
return;
}
}
if(error==0 && result==true)
{
Print("-----SmartAssTrade-V2 EA ~ has Opened New BUY ORDER ",symbol,", Buy Instruction: ",codB," - OK!");
PlaySound("gun.wav");
hb=1;
trx=0;
ox++;
totfr++;
}
}
}
return;
} //-end OrdBuy()
void OrdSell() //-- function: Open order if price was down
{
CkOpen();
LotOpt();
OptSL();
CalcTP();
comS=StringConcatenate(WindowExpertName()," #SELL#ins",(string)codS); // sell orders comments
if(os+ob==0)
{
if ((AccountFreeMarginCheck(symbol,OP_SELL,lot)<=0) || (GetLastError()==134))
{Print("-----OPEN NEW SELL ORDER ",symbol," - NOT ENOUGH MONEY..!"); ResetLastError(); return;}
else
{
ResetLastError();
int error;
bool result;
RefreshRates();
bid=MarketInfo(symbol,MODE_BID);
lastAsk=bid;
slB=NormalizeDouble(bПоказано первые 50% кода (символов: 14739)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.