В настоящее время он работает с этим кодом.кто?
//+------------------------------------------------------------------+
//| Retest.mq4 |
//| Copyright 2021, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
input double Lots = 0.1; // лот
input int StopLoss = 200; // стоплосс
input int TakeProfit = 3000; // тейкпрофит
input int Slip = 100; // проскальзывание
input int Magic = 123; // магик
input string S1="S1"; // отбой от сопротивления
input string S2="S2"; // пробой сопротивления
input string P1="P1"; // отбой от поддержки
input string P2="P2"; // пробой поддержки
input int delta=50; // диапазон
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
double sl=0,tp=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,Lots,NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()<2)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double sl=0,tp=0;
double s1=ObjectGetValueByTime(0,"S1",iTime(NULL,0,0));
double p1=ObjectGetValueByTime(0,"P1",iTime(NULL,0,0));
double s2=ObjectGetValueByTime(0,"S2",iTime(NULL,0,0));
double p2=ObjectGetValueByTime(0,"P2",iTime(NULL,0,0));
// отбой от сопротивления
if(s1>0 && Bid<s1 && Bid>s1-delta*_Point)
{
if(CountTrades()<1)
{
PutOrder(1,Bid);
}
}
// отбой от поддержки
if(p1>0 && Bid>p1 && Bid<p1+delta*_Point)
{
if(CountTrades()<1)
{
PutOrder(0,Ask);
}
}
// пробой сопротивления
if(s2>0 && Bid>s2 && Bid<s2+delta*_Point)
{
if(CountTrades()<1)
{
PutOrder(0,Ask);
}
}
// пробой поддержки
if(p2>0 && Bid<p2 && Bid>p2+delta*_Point)
{
if(CountTrades()<1)
{
PutOrder(1,Bid);
}
}
Comment("\n S1: ",s1,
"\n P1: ",p1,
"\n S2: ",s2,
"\n P2: ",p2);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
добавить одновременное выставление стоповых ордеровэтот момент подробнее пожалуйста.
//+------------------------------------------------------------------+
//| Mult2.mq5 |
//| Copyright 2021, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#include <Trade\Trade.mqh> // Подключаем торговый класс CTrade
//--- входные параметры группы 1
input double Lots = 0.1; // лот
input double Loss = 3000; // Лось в валюте
input double Profit = 100; // Профит в валюте
input string Symb1 = "EURUSD"; // 1-й символ
input string Symb2 = "GBPUSD"; // 2-й символ
input string Symb3 = "EURGBP"; // 3-й символ
input int Slip = 50; // Проскальзывание
input string IndName = "Examples\\ZigZag";
int zz=0;
int bars=0;
double zi[];
bool b=1,s=1;
CTrade trade; // Используем торговый класс CTrade
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
zz=iCustom(Symb1,0,IndName);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseAll()
{
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(PositionSelectByTicket(PositionGetTicket(i)))
{
trade.PositionClose(PositionGetTicket(i),Slip);
}
}
}
//+------------------------------------------------------------------+
//| Position Profit |
//+------------------------------------------------------------------+
double AllProfit()
{
double p=0;
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(PositionSelectByTicket(PositionGetTicket(i)))
{
p+=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
}
}
return(p);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountTrades(string sm)
{
int count=0;
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(PositionSelectByTicket(PositionGetTicket(i)))
{
if(PositionGetString(POSITION_SYMBOL)==sm)
{
if(OrderGetInteger(ORDER_TYPE)<2)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Лот |
//+------------------------------------------------------------------+
double Lot(string sm)
{
double lots=Lots;
lots=NormalizeDouble(Lots*MathPow(2,CountTrades(sm)),2);
if(lots>5)
lots=Lots;
if(lots<0.1)
lots=0.1;
return(lots);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double ZZPrice(int n=0)
{
int i=0,ke=0;
for(i=1; i<333; i++)
{
if(zi[i]!=0)
{
ke++;
if(ke>n)
return(zi[i]);
}
}
return(0);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double Ask1=SymbolInfoDouble(Symb1,SYMBOL_ASK);
double Ask2=SymbolInfoDouble(Symb2,SYMBOL_ASK);
double Ask3=SymbolInfoDouble(Symb3,SYMBOL_ASK);
double Bid1=SymbolInfoDouble(Symb1,SYMBOL_BID);
double Bid2=SymbolInfoDouble(Symb2,SYMBOL_BID);
double Bid3=SymbolInfoDouble(Symb3,SYMBOL_BID);
ArraySetAsSeries(zi,true);
CopyBuffer(zz,0,1,333,zi);
if(bars!=Bars(NULL,0))
{
if(AllProfit()>Profit || AllProfit()<-Loss)
CloseAll();
if(Symb1!="")
{
if(ZZPrice(0)>ZZPrice(1) && b)
{
trade.PositionOpen(Symb1,1,Lot(Symb1),Bid1,0,0);
trade.PositionOpen(Symb2,0,Lot(Symb2),Ask2,0,0);
trade.PositionOpen(Symb3,0,Lot(Symb3),Ask3,0,0);
b=0;
s=1;
}
if(ZZPrice(0)<ZZPrice(1) && s)
{
trade.PositionOpen(Symb1,0,Lot(Symb1),Ask1,0,0);
trade.PositionOpen(Symb2,1,Lot(Symb2),Bid2,0,0);
trade.PositionOpen(Symb3,1,Lot(Symb3),Bid3,0,0);
s=0;
b=1;
}
}
bars=Bars(NULL,0);
}
Comment("\n Profit : ",AllProfit(),
"\n ZZ1 : ",NormalizeDouble(ZZPrice(0),_Digits),
"\n ZZ2 : ",NormalizeDouble(ZZPrice(1),_Digits));
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
AM2