<code> //--- Inputs extern double Lots = 0.1; // торговый объем ордера extern double Risk = 1; // риск . . . //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void PutOrder(int type,double price) { int r=0; color clr=Green; double sl=0,tp=0; datetime expiration=0; if(type==1 || type==3 || type==5) { clr=Red; if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*_Point,_Digits); if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*_Point,_Digits); } if(type==0 || type==2 || type==4) { clr=Blue; if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*_Point,_Digits); if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*_Point,_Digits); } r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,_Digits),Slip,sl,tp,Comm,Magic,0,clr); return; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double Lot() { double lot=Lots; if(Risk>0) lot=NormalizeDouble(AccountEquity()*Risk/100000,2); return(lot); } //+------------------------------------------------------------------+ </code>
//+------------------------------------------------------------------+
//| Мультивалютный Информационный индикатор RSI.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.mункцql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.mункцql5.com"
#property version "1.00"
#property strict
#property indicator_chart_window
extern string symb1 = "AUDUSD";
extern string symb2 = "EURUSD";
extern string symb3 = "GBPUSD";
extern string symb4 = "NZDUSD";
extern string symb5 = "USDCAD";
extern string symb6 = "USDCHF";
extern string symb7 = "USDJPY";
extern string symb8 = "EURAUD";
extern string symb9 = "EURGBP";
extern string symb10 = "EURNZD";
extern string symb11 = "EURJPY";
extern string symb12 = "XAUUSD";
extern int perrsi = 13;
extern ENUM_TIMEFRAMES tf = PERIOD_CURRENT;
extern int Shift =0;
extern int corner = 1;
extern int font = 10;
int s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
ObjectsDeleteAll();
Comment("");
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
s1=iRSI(symb1,tf,perrsi,0,Shift);
if(symb2!="")s2=iRSI(symb2,tf,perrsi,0,Shift);
if(symb3!="")s3=iRSI(symb3,tf,perrsi,0,Shift);
if(symb4!="")s4=iRSI(symb4,tf,perrsi,0,Shift);
if(symb5!="")s5=iRSI(symb5,tf,perrsi,0,Shift);
if(symb6!="")s6=iRSI(symb6,tf,perrsi,0,Shift);
if(symb7!="")s7=iRSI(symb7,tf,perrsi,0,Shift);
if(symb8!="")s8=iRSI(symb8,tf,perrsi,0,Shift);
if(symb9!="")s9=iRSI(symb9,tf,perrsi,0,Shift);
if(symb10!="")s10=iRSI(symb10,tf,perrsi,0,Shift);
if(symb11!="")s11=iRSI(symb11,tf,perrsi,0,Shift);
if(symb12!="")s12=iRSI(symb11,tf,perrsi,0,Shift);
SetLabel("s1", symb1+" : "+s1, clrLime, 5, 15, corner, font);
if(symb2!="") SetLabel("s2", symb2+" : "+s2, clrLime, 5, 30, corner, font);
if(symb3!="") SetLabel("s3", symb3+" : "+s3, clrLime, 5, 45, corner, font);
if(symb4!="") SetLabel("s4", symb4+" : "+s4, clrLime, 5, 60, corner, font);
if(symb5!="") SetLabel("s5", symb5+" : "+s5, clrLime, 5, 75, corner, font);
if(symb6!="") SetLabel("s6", symb6+" : "+s6, clrLime, 5, 90, corner, font);
if(symb7!="") SetLabel("s7", symb7+" : "+s7, clrLime, 5, 105, corner, font);
if(symb8!="") SetLabel("s8", symb8+" : "+s8, clrLime, 5, 120, corner, font);
if(symb9!="") SetLabel("s9", symb9+" : "+s9, clrLime, 5, 135, corner, font);
if(symb10!="") SetLabel("s10", symb10+" : "+s10, clrLime, 5, 150, corner, font);
if(symb11!="") SetLabel("s11", symb11+" : "+s11, clrLime, 5, 165, corner, font);
if(symb12!="") SetLabel("s12", symb12+" : "+s12, clrLime, 5, 180, corner, font);
//--- return value of prev_calculated for next call
return(rates_total);
}
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 12.10.2007 |
//| Описание : Установка текстовой метки, объект OBJ_LABEL. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| nm - наименование объекта |
//| tx - текст |
//| cl - цвет метки |
//| xd - координата X в пикселах |
//| yd - координата Y в пикселах |
//| cr - номер угла привязки (0 - левый верхний, |
//| 1 - правый верхний, |
//| 2 - левый нижний, |
//| 3 - правый нижний ) |
//| fs - размер шрифта (9 - по умолчанию ) |
//+----------------------------------------------------------------------------+
void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
ObjectSetText(nm, tx, fs);
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);
}
//+----------------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Corel2.mq5 |
//| Copyright 2022, AM2 |
//| https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, AM2"
#property link "https://www.forexsystems.biz"
#property version "1.00"
#include <Trade\Trade.mqh> // Подключаем торговый класс CTrade
CTrade trade;
//--- входные параметры
input double Lot = 1; // Лот
input string Symb = "USDCHF"; // 2-й символ
input double LotSymb = 1; // Лот
input int Loss = 0; // Лось в валюте
input int Profit = 50; // Профит в валюте
input double Sigma = 333; // Расхождение пар
input bool CloseCross = 1; // Закрытие по пересечению
input int Slip = 0; // Проскальзывание
input ulong Magic = 123; // Магик
input string IndName = "Coral";
input int bar = 55;
int ind=0;
double s1[2],s2[2];
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
ind=iCustom(NULL,0,IndName,Symb,bar);
trade.SetExpertMagicNumber(Magic);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Position Profit |
//+------------------------------------------------------------------+
double AllProfit()
{
double p=0;
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(PositionSelectByTicket(PositionGetTicket(i)))
{
if(PositionGetInteger(POSITION_MAGIC)==Magic)
{
p+=PositionGetDouble(POSITION_PROFIT);
}
}
}
return(p);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseAll()
{
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(PositionSelectByTicket(PositionGetTicket(i)))
{
if(PositionGetInteger(POSITION_MAGIC)==Magic)
{
if(PositionGetInteger(POSITION_TYPE)<2)
{
trade.PositionClose(PositionGetTicket(i));
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(PositionSelectByTicket(PositionGetTicket(i)))
{
if(PositionGetInteger(POSITION_MAGIC)==Magic)
{
if(PositionGetInteger(POSITION_TYPE)<2)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double Ask1=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
double Bid1=SymbolInfoDouble(_Symbol,SYMBOL_BID);
double Ask2=SymbolInfoDouble(Symb,SYMBOL_ASK);
double Bid2=SymbolInfoDouble(Symb,SYMBOL_BID);
double sigma=MathAbs(s1[0]-s2[0])/_Point;
CopyBuffer(ind,0,0,2,s1);
CopyBuffer(ind,1,0,2,s2);
if(t!=iTime(NULL,0,0))
{
if(CountTrades()<1 && sigma>Sigma)
{
if(s1[0]<s2[0])
{
trade.Buy(Lot,_Symbol,Ask1,0,0,"");
trade.Sell(LotSymb,Symb,Bid2,0,0,"");
}
if(s1[0]>s2[0])
{
trade.Sell(Lot,_Symbol,Bid1,0,0,"");
trade.Buy(LotSymb,Symb,Ask2,0,0,"");
}
}
if((AllProfit()>Profit && Profit>0) || (AllProfit()<-Loss && Loss>0) || (s1[0]>s2[0] && s1[1]<s2[1]&& CloseCross) || (s1[0]<s2[0] && s1[1]>s2[1] && CloseCross))
CloseAll();
t=iTime(NULL,0,0);
}
Comment("\n Trades: ",CountTrades(),
"\n Profit: ",AllProfit(),
"\n Sigma: ",sigma,
"\n Symbol1: ",s1[0],
"\n Symbol2: ",s2[0]);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double Lot()
{
double lot=Lots;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()>0)
{
lot=Lots;
break;
}
if(OrderProfit()<0)
{
if(LastLoss()!=0 && LastProfit()!=0)
{
if(LastLoss()>=LastProfit())lot=Lots*(LastLoss()+LastProfit())/LastLoss();
if(LastLoss()<LastProfit())lot=Lots*(LastLoss()+LastProfit())/LastProfit();
if(lot>=1)lot=Lots;
}
break;
}
}
}
return(NormalizeDouble(lot,2));
}
//+------------------------------------------------------------------+
<code> extern double Lots = 0.01; // торговый объем ордера extern ENUM_TIMEFRAMES tf = PERIOD_CURRENT; extern int MA1Period = 50; // период МА1 extern int Shift = 1; // на каком баре сигнал индикатора //+------------------------------------------------------------------+ . . . . //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- double ma1=iMA(NULL,tf,MA1Period,0,0,0,Shift); double cl1 = iClose(NULL,tf,1); double cl2 = iClose(NULL,tf,2); bool buy=cl1>ma1 && cl2>ma1; bool sell=cl1<ma1 && cl2<ma1; bool clbuy=cl1<ma2 && cl2>ma1; bool clsell=cl1>ma2 && cl2<ma1; if(clbuy)CloseAll(0); if(clsell)CloseAll(1); если предыдущая сделка была убыточная double lot = Lots*((последний убыток+последний профит)/последний убыток);//не важно или в валюте или в пунктах. if(CountTrades()<1) { if(buy) { PutOrder(0,Ask,lot); } if(sell) { PutOrder(1,Bid,lot); } } } //+------------------------------------------------------------------+ </code>
стратегия это торговля от уровней атр, Hi — atr = зона нижняя, lo + atr = верхняя зона
<code> //+------------------------------------------------------------------+ //| MTF_Average True Range lafler356.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.mункцql5.com | //+------------------------------------------------------------------+ /* полный вызов индикатора нулевого (единственного) буфера на нулевом баре: double ind_ATR = iCustom(NULL,PERIOD_MN1,"MTF_Average True Range lafler356",TimeFrame,per,MAType,0,0); */ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.mункцql5.com" #property version "1.00" #property strict #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 clrLime extern ENUM_TIMEFRAMES TimeFrame= PERIOD_MN1; extern int per=10; extern int MAType=0; double ExtMapBuffer1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1); SetIndexBuffer(0, ExtMapBuffer1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- datetime TimeArray[]; int i,limit,y=0,counted_bars=IndicatorCounted(); double PeriodHigh, PeriodLow; ArrayCopySeries(TimeArray,MODE_TIME,NULL,TimeFrame); limit=Bars-counted_bars; for(i=0,i<limit;i++) { PeriodHigh = iMA(NULL,TimeFrame,per,0,MAType,PRICE_HIGH,i); PeriodLow = iMA(NULL,TimeFrame,per,0,MAType,PRICE_LOW,i); ExtMapBuffer1[i]= (PeriodHigh - PeriodLow)/_Point; } return(rates_total); } //+------------------------------------------------------------------+ </code>
<code> значение атр текущего месяца: double ind_ATR = iCustom(NULL,PERIOD_MN1,"MTF_Average True Range lafler356",TimeFrame,1,MAType,0,0); значение атр текущего квартала: double ind_ATR = iCustom(NULL,PERIOD_MN1,"MTF_Average True Range lafler356",TimeFrame,3,MAType,0,0); </code>
Есть ошибка-переведите текст-устраните причину.
В данном случае: советник нашёл не объявленный параметр -Comm.
Это значит, что в коде есть что-то, что редактор не знает что это такое, не может его ни с чем сопоставить, сравнить.
Не знаете если что это такое — посмотрите структуру функции OrderSend(...) лучше в учебнике или хотя бы в другом советнике, что это за параметр.
В структуре этой функции на этом месте стоит параметр — комментарии ордера.
Этот параметр можно записать как:
— просто не заполненные "",
— заполненные «бла-бла»,
— просто объявленным заранее текстом например:
extern string Comm = «Felice »;// коммент
Выбирайте любой из вариантов.
Уверен, что всё это вы знаете.Просто поторопились расписаться в беспомощности из-за не внимательности.
ssg