Знатоки програмирования подскажите.....
Кнопка "Пуск" > Программы > Metа Trader > MetaEditor > Главное меню > File > New > Custom Indicator..., Expert Advisor...
С правой стороны редактора вкладка Dictionary с описанием языка MQL4
Знатоки програмирования подскажите.....
Кнопка "Пуск" > Программы > Metа Trader > MetaEditor > Главное меню > File > New > Custom Indicator..., Expert Advisor...
С правой стороны редактора вкладка Dictionary с описанием языка MQL4
Правельно говорят ответ программиста всегда точен, но зачастую бесполезен.
Знатоки програмирования подскажите.....
Кнопка "Пуск" > Программы > Metа Trader > MetaEditor > Главное меню > File > New > Custom Indicator..., Expert Advisor...
С правой стороны редактора вкладка Dictionary с описанием языка MQL4
Для того что бы писать надо хотябы немного разбираться в програмировании......
А я в этом полный зеро ....... Самое сложное что я програмировал это системки для омеги ресетч (там все очень просто)....... про чем это было жутко давно.
Ник вызывает подозрения.
Lohinson, а как дельта считается?
Ник вызывает подозрения.
Ник с историей....http://konkop.narod.ru/renko.htm
Lohinson, а как дельта считается?
дельта - это простое не расчитываемое число, получаемое в результате оптимизации, равное количеству пипсов (+/-) приращения к максимальному/минимальному H/L из 3х баров
дельта - для лонга и шорта одинакова .....
дельта - единственный оптимизируемый параметр
Ник вызывает подозрения.
Ник с историей....http://konkop.narod.ru/renko.htm
Lohinson, а как дельта считается?
дельта - это простое не расчитываемое число, получаемое в результате оптимизации, равное количеству пипсов (+/-) приращения к максимальному/минимальному H/L из 3х баров
дельта - для лонга и шорта одинакова .....
дельта - единственный оптимизируемый параметр
Ты знаешь, я тебе как программист скажу - эта фигня будет отлично сливать депозит.
вот эта конструкция и то больше заработает:
if(true) OpenBuy(); if(true) OpenSell();
хотя нечто подобное уже не раз делалось на МТ4, вот например этот советник очень похож на то что ты описываешь, но посложнее конечно, и прибыль реально приносит:
работают на EURUSD H1.
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#property copyright "Dan"
#property link "3172552@gmail.com"
#include <stdlib.mqh>
#define MN_8 8
#define MN_12 12
//---- input parameters
extern int Hours2Check= 9; //9 //14 //15
extern int CloseHour= 9; //9 //9 //9
extern int DaysMode= 1; //1 //2 //2
extern int Days2Check= 9;//14 //7 //14 //10
extern int CheckMode= 1; //2 //1 //2
extern double LossK= 2; //1 //2 //0.5
extern double ChannelK= 1.5; //0.5 //1.5 //0.5
extern int CheckHour_8= 8; //8 //8 //8
extern double ProfitK_8= 2; //1 //2 //1
extern double OffsetK_8= 2; //1 //2.5 //1.5
extern int CheckHour_12= 12; //12 //12 //12
extern double ProfitK_12= 3; //0.5 //4 //0.5
extern double OffsetK_12= 2.5; //1 //2.5 //1
extern int MarginPercent= 20;
extern bool UseMM= true;
extern int TradesPerDayAllowed= 1;
//////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
int MaxSystemDD=200; //here You have to insert max dd without MM in pips
int SystemTrustK=1;
int MaxDD_Allowed=10;
double Lots=0.1;
int LatestOpenHour=22;
int MaxTries=10;
int PointPrice=10;
double ISK=1.5;
/////////////////////////////////////////////////////
int Pause;
int err;
int try;
int ticket;
bool close;
int i;
int OpenDay;
int p;
int InsuranceStop;
int loss;
int D2Ch;
int pp_8;
int profit_8;
int offset_8;
int avrange_8;
int CheckDay_8;
int pp_12;
int profit_12;
int offset_12;
int avrange_12;
int CheckDay_12;
double sellprice_8;
double buyprice_8;
double daj_8;
double hh_8;
double ll_8;
double totalrange_8;
double channel_8;
double sellprice_12;
double buyprice_12;
double daj_12;
double hh_12;
double ll_12;
double totalrange_12;
double channel_12;
////////////////////////////////////////////////////////////
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
D2Ch=Days2Check;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
/////////////////////////////////////////////////////////////////////
void Levels_Defining_12()
{
pp_12=(((CheckHour_12-CheckHour_8)*60)/Period());
hh_12=High[Highest(NULL,0,MODE_HIGH,pp_12,1)];
ll_12=Low[Lowest(NULL,0,MODE_LOW,pp_12,1)];
p=((24*60)/Period());
totalrange_12=0;
channel_12=hh_12-ll_12;
if (CheckMode==1)
{
for(i=1;i<=Days2Check;i++)
{
daj_12=(High[Highest(NULL,0,MODE_HIGH,p,p*(i-1)+1)]
-Low[Lowest(NULL,0,MODE_LOW,p,p*(i-1)+1)]);
totalrange_12=totalrange_12+daj_12;
}
}
if (CheckMode==2)
{
for( i=1;i<=Days2Check;i++)
{
daj_12=MathAbs(Close[p*i+pp_12]-
Close[p*(i-1)+pp_12]);
totalrange_12=totalrange_12+daj_12;
}
}
avrange_12=MathRound((totalrange_12/Days2Check)/Point);
offset_12=MathRound(avrange_12/OffsetK_12);
sellprice_12=NormalizeDouble(ll_12-offset_12*Point,4);
buyprice_12=NormalizeDouble(hh_12+offset_12*Point,4);
return;
}
//*/*
/////////////////////////////////////////////////////////////
void Levels_Defining_8()
{
pp_8=((Hours2Check*60)/Period());
hh_8=High[Highest(NULL,0,MODE_HIGH,pp_8,1)];
ll_8=Low[Lowest(NULL,0,MODE_LOW,pp_8,1)];
p=((24*60)/Period());
totalrange_8=0;
channel_8=hh_8-ll_8;
if (CheckMode==1)
{
for(i=1;i<=Days2Check;i++)
{
daj_8=(High[Highest(NULL,0,MODE_HIGH,p,p*(i-1)+1)]
-Low[Lowest(NULL,0,MODE_LOW,p,p*(i-1)+1)]);
totalrange_8=totalrange_8+daj_8;
}
}
if (CheckMode==2)
{
for( i=1;i<=Days2Check;i++)
{
daj_8=MathAbs(Close[p*i+pp_8]-
Close[p*(i-1)+pp_8]);
totalrange_8=totalrange_8+daj_8;
}
}
avrange_8=MathRound((totalrange_8/Days2Check)/Point);
offset_8=MathRound(avrange_8/OffsetK_8);
sellprice_8=NormalizeDouble(ll_8-offset_8*Point,4);
buyprice_8=NormalizeDouble(hh_8+offset_8*Point,4);
return;
}
//*/*
/////////////////////////////////////////////////////////////_8
void Close_by_Closetime()
{
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if((OrderMagicNumber()!=MN_8 && OrderMagicNumber()!=MN_12) || OrderSymbol()!=Symbol() ) continue;
if (OrderType()==OP_BUY)
{
for(int try=1;try<=MaxTries;try++)
{
while (!IsTradeAllowed()) Sleep(5000);
close=false;
RefreshRates();
close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,4),3,White);
Sleep(Pause);
if (close){Pause=1000;break;}
else
{
err=GetLastError();
Print("OrderClose failed with error #",err," : ",ErrorDescription(err),"Trying Again #",try);
Pause=Pause*2;
if (try==MaxTries)
{
Pause=1000;
Print("Warning!!!Last try failed!");
SendMail("Warning!!!Last try failed! ",OrderType()+" by "+OrderClosePrice()+" Cloing Failed!");
break;
}
}
}
}
if (OrderType()==OP_SELL)
{
for(try=1;try<=MaxTries;try++)
{
while (!IsTradeAllowed()) Sleep(5000);
close=false;
RefreshRates();
close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,4),3,White);
Sleep(Pause);
if (close){Pause=1000;break;}
else
{
err=GetLastError();
Print("OrderClose failed with error #",err," : ",ErrorDescription(err),"Trying Again #",try);
Pause=Pause*2;
if (try==MaxTries)
{
Pause=1000;
Print("Warning!!!Last try failed!");
SendMail("Warning!!!Last try failed! ",OrderType()+" by "+OrderClosePrice()+" Cloing Failed!");
break;
}
}
}
}
}
}
///////////////////////////////////////////////////////////////*/
///////////////////////////////////////////////////////////////
void Close_by_Stops_8()
{
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MN_8 || OrderSymbol()!=Symbol()) continue;
if ((OrderType()==OP_BUY)
&& (((Close[1]-NormalizeDouble(OrderOpenPrice(),4))>=profit_8*Point)
|| ((NormalizeDouble(OrderOpenPrice(),4)-Close[1])>=loss*Point)))
{
for(int try=1;try<=MaxTries;try++)
{
while (!IsTradeAllowed()) Sleep(5000);
close=false;
RefreshRates();
close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,4),3,White);
Sleep(Pause);
if (close){Pause=1000;break;}
else
{
err=GetLastError();
Print("OrderClose failed with error #",err," : ",ErrorDescription(err),"Trying Again #",try);
Pause=Pause*2;
if (try==MaxTries)
{
Pause=1000;
Print("Warning!!!Last try failed!");
SendMail("Warning!!!Last try failed! ",OrderType()+" by "+OrderClosePrice()+" Cloing Failed!");
break;
}
}
}
}
if ((OrderType()==OP_SELL)
&& (((Close[1]-NormalizeDouble(OrderOpenPrice(),4))>=loss*Point)
|| ((NormalizeDouble(OrderOpenPrice(),4)-Close[1])>=profit_8*Point)))
{
for(try=1;try<=MaxTries;try++)
{
while (!IsTradeAllowed()) Sleep(5000);
close=false;
RefreshRates();
close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,4),3,White);
Sleep(Pause);
if (close){Pause=1000;break;}
else
{
err=GetLastError();
Print("OrderClose failed with error #",err," : ",ErrorDescription(err),"Trying Again #",try);
Pause=Pause*2;
if (try==MaxTries)
{
Pause=1000;
Print("Warning!!!Last try failed!");
SendMail("Warning!!!Last try failed! ",OrderType()+" by "+OrderClosePrice()+" Cloing Failed!");
break;
}
}
}
}
}
}
//////////////////////////////////////////////////*/
void Close_by_Stops_12()
{
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MN_12 || OrderSymbol()!=Symbol()) continue;
if ((OrderType()==OP_BUY)
&& (((Close[1]-NormalizeDouble(OrderOpenPrice(),4))>=profit_12*Point)
|| ((NormalizeDouble(OrderOpenPrice(),4)-Close[1])>=loss*Point)))
{
for(int try=1;try<=MaxTries;try++)
{
while (!IsTradeAllowed()) Sleep(5000);
close=false;
RefreshRates();
close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,4),3,White);
Sleep(Pause);
if (close){Pause=1000;break;}
else
{
err=GetLastError();
Print("OrderClose failed with error #",err," : ",ErrorDescription(err),"Trying Again #",try);
Pause=Pause*2;
if (try==MaxTries)
{
Pause=1000;
Print("Warning!!!Last try failed!");
SendMail("Warning!!!Last try failed! ",OrderType()+" by "+OrderClosePrice()+" Cloing Failed!");
break;
}
}
}
}
if ((OrderType()==OP_SELL)
&& (((Close[1]-NormalizeDouble(OrderOpenPrice(),4))>=loss*Point)
|| ((NormalizeDouble(OrderOpenPrice(),4)-Close[1])>=profit_12*Point)))
{
for(try=1;try<=MaxTries;try++)
{
while (!IsTradeAllowed()) Sleep(5000);
close=false;
RefreshRates();
close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,4),3,White);
Sleep(Pause);
if (close){Pause=1000;break;}
else
{
err=GetLastError();
Print("OrderClose failed with error #",err," : ",ErrorDescription(err),"Trying Again #",try);
Pause=Pause*2;
if (try==MaxTries)
{
Pause=1000;
Print("Warning!!!Last try failed!");
SendMail("Warning!!!Last try failed! ",OrderType()+" by "+OrderClosePrice()+" Cloing Failed!");
break;
}
}
}
}
}
}
//////////////////////////////////////////////////*/
double LotSizeCounting(int OpTime){
Lots=0.1;
if (UseMM==true){
if (OpTime==8){
Lots=NormalizeDouble(((AccountFreeMargin()/100000)*MarginPercent),1);Print(Lots);
}
if (OpTime==12){
Lots=NormalizeDouble((AccountFreeMargin( )/100000)*MarginPercent,1);
}
if (Lots<0.1){
Print("Too risky Trade! Add some money to account");
SendMail("Too risky Trade! Add some money to account","Too risky Trade! Add some money to account");
Lots=0.1;
}
if (Lots>10000){
Print("Too big Lot ",Lots);
SendMail("Too big Lot ","Too big Lot ");
Lots=10000;
}
}
return(Lots);
}
////////////////////////////////////////////////////////////////////////////////
void Opening_8()
{
profit_8=MathRound(avrange_8/ProfitK_8);
loss=MathRound(avrange_8/LossK);
InsuranceStop=MathRound(loss*ISK);
Lots=LotSizeCounting(8);
if (Close[1]>=buyprice_8)
{
for (int try=1;try<=MaxTries;try++)
{
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,4),3,NormalizeDouble(Ask-InsuranceStop*Point,4),1.5,"Order 8-series Open",MN_8,Blue);
Sleep(Pause);
if (ticket>0){OpenDay=Day();Pause=1000;break;}
else
{
err=GetLastError();
Print("OrderSend failed with error #",err," : ",ErrorDescription(err),"Trying again #",try);
Pause=Pause*2;
if (try==MaxTries)
{
Pause=1000;
Print("Warning!!!Last try failed!");
SendMail("Warning!!!Last try failed!",OrderType()+" by "+OrderOpenPrice()+" Opening failed!");
break;
}
}
}
}
if (sellprice_8>=Close[1])
{
for (try=1;try<=MaxTries;try++)
{
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,4),3,NormalizeDouble(Bid+InsuranceStop*Point,4),0.5,"Order 8-series Open",MN_8,Red);
Sleep(Pause);
if (ticket>0){OpenDay=Day();Pause=1000;break;}
else
{
err=GetLastError();
Print("OrderSend failed with error #",err," : ",ErrorDescription(err),"Trying again #",try);
Pause=Pause*2;
if (try==MaxTries)
{
Pause=1000;
Print("Warning!!!Last try failed!");
SendMail("Warning!!!Last try failed!",OrderType()+" by "+OrderOpenPrice()+" Opening failed!");
break;
}
}
}
}
}
/////////////////////////////////////////////////////////////////////
void Opening_12()
{
profit_12=MathRound(avrange_12/ProfitK_12);
loss=MathRound(avrange_12/LossK);
InsuranceStop=MathRound(loss*ISK);
Lots=LotSizeCounting(12);
if (Close[1]>=buyprice_12)
{
for (int try=1;try<=MaxTries;try++)
{
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,4),3,NormalizeDouble(Ask-InsuranceStop*Point,4),1.5,"Order 12-series Open",MN_12,Blue);
Sleep(Pause);
if (ticket>0){OpenDay=Day();Pause=1000;break;}
else
{
err=GetLastError();
Print("OrderSend failed with error #",err," : ",ErrorDescription(err),"Trying again #",try);
Pause=Pause*2;
if (try==MaxTries)
{
Pause=1000;
Print("Warning!!!Last try failed!");
SendMail("Warning!!!Last try failed!",OrderType()+" by "+OrderOpenPrice()+" Opening failed!");
break;
}
}
}
}
if (sellprice_12>=Close[1])
{
for (try=1;try<=MaxTries;try++)
{
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,4),3,NormalizeDouble(Bid+InsuranceStop*Point,4),0.5,"Order 12-series Open",MN_12,Red);
Sleep(Pause);
if (ticket>0){OpenDay=Day();Pause=1000;break;}
else
{
err=GetLastError();
Print("OrderSend failed with error #",err," : ",ErrorDescription(err),"Trying again #",try);
Pause=Pause*2;
if (try==MaxTries)
{
Pause=1000;
Print("Warning!!!Last try failed!");
SendMail("Warning!!!Last try failed!",OrderType()+" by "+OrderOpenPrice()+" Opening failed!");
break;
}
}
}
}
}
/////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
void start()
{
if (Period()!=60) return;
if (DaysMode==2) {Days2Check=DayOfWeek()+D2Ch;}
if (Hour()==CheckHour_8 && Day()!=CheckDay_8)
{Levels_Defining_8(); CheckDay_8=Day();}
if (Hour()==CheckHour_12 && Day()!=CheckDay_12)
{Levels_Defining_12(); CheckDay_12=Day();}
if (OrdersTotal()>0)
{
Close_by_Stops_8();
Close_by_Stops_12();
if ((Hour()>=CloseHour) && (Day()!=OpenDay) )
{Close_by_Closetime();Close_by_Closetime();}
}
if (Hour()>LatestOpenHour || Day()==OpenDay) return;
{
if (Day()==CheckDay_8 && (channel_8<(avrange_8/ChannelK)*Point)) {Opening_8(); }
if (OrdersTotal()==TradesPerDayAllowed) return;
if (Day()==CheckDay_12 &&(channel_12<(avrange_12/ChannelK)*Point)) {Opening_12(); }
}
}
/////////////////////////////////////////////////////////
// Lots=NormalizeDouble(MathSqrt(100*channel_8),1);
// Lots=NormalizeDouble(((AccountFreeMargin( )/100)*MaxDD_Allowed )/((loss)*SystemTrustK*PointPrice),1);
// Lots=NormalizeDouble(((AccountFreeMargin( )/100)*MaxDD_Allowed )/(MaxSystemDD*SystemTrustK*PointPrice),1);
// Print(Lots);
// Lots=NormalizeDouble(MathSqrt(100*channel_12),1);
// Lots=NormalizeDouble(((AccountFreeMargin( )/100)*MaxDD_Allowed )/((loss)*SystemTrustK*PointPrice),1);
// Lots=NormalizeDouble(((AccountFreeMargin( )/100)*MaxDD_Allowed )/(MaxSystemDD*SystemTrustK*PointPrice),1);
или вот еще один, из той же оперы, тоже прибыльный.
//+------------------------------------------------------------------+
//| NEWbreakout.mq4 |
//| Dan |
//| https://www.metaquotes.net |
//+------------------------------------------------------------------+
//3-6-3-32-2-x-x-100-120
//3-6-3-32-2-x-x-70-150
//3-6-3-32-1-0.8-0.5-x-x
#property copyright "Dan"
#property link "https://www.metaquotes.net"
extern int periodK=3;
extern int channelK=6;
extern double offsetK=3;
extern int per1od=32;
extern int plMODE=2;
extern double profitK=7;
extern double lossK=1;
extern int StopLoss=100;
extern int TakeProfit=120;
extern double Lots = 0.1;
extern string _Parameters_b_Lots = "Параметры модуля расчёта лота";
extern int LotsWayChoice = 1; // Способ выбора рабочего лота:
// 0-фиксированный,
// 1-процент от депозита,
// 2-фракционно-пропорциональный,
// 3-фракционно-фиксированный,
extern double LotsPercent=40; // Процент от депозита
extern double LotsDeltaDepo=500; // Коэффициент приращения депозита
extern double LotsDepoForOne=500; // Размер депозита для одного минилота
extern double LotsMax=10000; // Максимальное количество минилотов
extern string x= "------------------------------";
//============================
double bigchannel;
double smallchannel,dlots;
int b;
double hi;
double lo;
double offset;
double sellprice;
double buyprice;
int profit;
int loss;
int i;
/*
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}*/
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
void start()
{
dlots=GetSizeLot();
//----
if (b!=Bars)
{
bigchannel=
(High[Highest(NULL,0,MODE_HIGH,per1od,1)]-
Low[Lowest(NULL,0,MODE_LOW,per1od,1)]);
smallchannel=
(High[Highest(NULL,0,MODE_HIGH,MathRound(per1od/periodK),1)]-
Low[Lowest(NULL,0,MODE_LOW,MathRound(per1od/periodK),1)]);
b=Bars;
if (plMODE==1)
{
profit=MathRound((bigchannel/profitK)/Point);
loss=MathRound((bigchannel/lossK)/Point);
}
if (plMODE==2)
{
profit=TakeProfit;
loss=StopLoss;
}
if (((bigchannel*Point)/(smallchannel*Point))>=channelK)
{
hi=High[Highest(NULL,0,MODE_HIGH,MathRound(per1od/periodK),1)];
lo=Low[Lowest(NULL,0,MODE_LOW,MathRound(per1od/periodK),1)];
offset=(bigchannel/offsetK);
sellprice=(lo-offset);
buyprice=(hi+offset);
}
if (OrdersTotal()<1)
{
if (Close[1]>=buyprice)
{
OrderSend(Symbol(),OP_BUY,dlots,Ask,3,0,10,"",0,0,Blue);
}
if (Close[1]<=sellprice)
{
OrderSend(Symbol(),OP_SELL,dlots,Bid,3,10,0,"",0,0,Red);
}
}
/* */
if (OrdersTotal()>0)
{
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=0 || OrderSymbol()!=Symbol()) continue;
if ((OrderType()==OP_BUY)
&& (((Close[1]-OrderOpenPrice())>=profit*Point)
|| ((OrderOpenPrice()-Close[1])>=loss*Point))
|| (Close[1]<=sellprice))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
break;
}
if ((OrderType()==OP_SELL)
&& (((Close[1]-OrderOpenPrice())>=loss*Point)
|| ((OrderOpenPrice()-Close[1])>=profit*Point))
|| (Close[1]>=buyprice))
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
break;
}
}
}
///----
//}
}
}
//+------------------------------------------------------------------+
double GetSizeLot() {
double dLot;
if (LotsWayChoice==0) dLot=Lots;
Print("0 ",dLot);
// фиксированный процент от депозита
if (LotsWayChoice==1) {
dLot=MathCeil(AccountFreeMargin()/10000*LotsPercent)/10;
Print("1 ",dLot);
}
// фракционно-пропорциональный
if (LotsWayChoice==2) {
int k=LotsDepoForOne;
for (double i=2; i<=LotsMax; i++) {
k=k+i*LotsDeltaDepo;
if (k>AccountFreeMargin()) {
dLot=(i-1)/10; break;
}
}
Print("2 ",dLot);
}
// фракционно-фиксированный
if (LotsWayChoice==3) {
dLot=MathCeil((AccountFreeMargin()-LotsDepoForOne)/LotsDeltaDepo)/10;
Print("3 ",dLot);
}
if (dLot<0.1) dLot=0.1;
if (dLot>LotsMax) dLot=LotsMax;
return(NormalizeDouble(dLot,1));
}
и еще один :)
//+------------------------------------------------------------------+
//| 9-0-7-1-2-2-2-1 ttt.mq4 |
//| 9-0-2-1-2-1-2.5 Dan |
//| 9-0-9-2-1-1-1-1
// 9-0-6-1-2-2-2-1(m15) https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Dan"
#property link "https://www.metaquotes.net"
#define MAGICMA 20050610
//---- input parameters
extern int checkhour=8;
extern int checkminute=0;
extern int days2check=7;
extern int checkmode=1;
extern double profitK=2;
extern double lossK=2;
extern double offsetK=2;
extern int closemode=1;
//+------------------------------------------------------------------+
int latestopenhour=23;
int tradesallowed=1;
double sellprice;
double buyprice;
int profit;
int loss;
int offset;
int avrange;
double daj[30];
int i;
int dd;
int bb;
int d;
int pp;
double hh;
double ll;
int p;
double totalrange;
//============================================================
void start()
{
if
(Bars==bb)
return;
bb=Bars;
if (
(Hour()==checkhour)
&& (Minute()==checkminute)
)
// ==========================================Print(dd);
{
dd=Day();
pp=((checkhour*60)/Period()+checkminute/Period());
hh=High[Highest(NULL,0,MODE_HIGH,pp,1)];
ll=Low[Lowest(NULL,0,MODE_LOW,pp,1)];
p=((24*60)/Period());
totalrange=0;
if(checkmode==1)
{
for(i=1;i<=days2check;i++)
{
daj[i]=(High[Highest(NULL,0,MODE_HIGH,p,p*i+1)]
-Low[Lowest(NULL,0,MODE_LOW,p,p*i+1)]);
totalrange=totalrange+daj[i];
avrange=MathRound((totalrange/i)/Point);
}
}
if(checkmode==2)
{
for( i=1;i<=days2check;i++)
{
daj[i]=MathAbs(Close[p*i+pp]-
Close[p*(i-1)+pp]);
totalrange=totalrange+daj[i];
avrange=MathRound((totalrange/i)/Point);
}
}
{
offset=MathRound((avrange)/offsetK);
sellprice=ll-offset*Point;
buyprice=hh+offset*Point;
}
if (OrdersTotal()>0)
{
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=0 || OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),1,Bid,3,White);
break;
}
if (OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),1,Ask,3,White);
break;
}
}
}
}
if (closemode==2
&& Day()!=dd
&& (OrdersTotal()>0))
{
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=0 || OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),1,Bid,3,White);
break;
}
if (OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),1,Ask,3,White);
break;
}
}
}
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=0 || OrderSymbol()!=Symbol()) continue;
if ((OrderType()==OP_BUY)
&& (((Close[1]-OrderOpenPrice())>=profit*Point)
|| ((OrderOpenPrice()-Close[1])>=loss*Point)))
{
OrderClose(OrderTicket(),1,Bid,3,White);
break;
}
if ((OrderType()==OP_SELL)
&& (((Close[1]-OrderOpenPrice())>=loss*Point)
|| ((OrderOpenPrice()-Close[1])>=profit*Point)))
{
OrderClose(OrderTicket(),1,Ask,3,White);
break;
}
}
int lastopenhour=23;
if ((Hour()<=lastopenhour)
&& (Day()==dd)
&& (Day()!=d)
&& (OrdersTotal()<tradesallowed))
{
if (Close[1]>=buyprice)
{
profit=MathRound((avrange)/profitK);
loss=MathRound((avrange)/lossK);
OrderSend(Symbol(),OP_BUY,1,Ask,3,0,10,"",0,0,Blue);
dd=Day();
if (tradesallowed==1) {d=Day();}
// return(d);
}
if (Close[1]<=sellprice)
{
profit=MathRound((avrange)/profitK);
loss=MathRound((avrange)/lossK);
OrderSend(Symbol(),OP_SELL,1,Bid,3,10,0,"",0,0,Red);
dd=Day();
if (tradesallowed==1) {d=Day();}
}
return;
}
}
все эти эксперты рабочие проверено, работают на EURUSD H1, развлекайтесь :))
вот эта конструкция и то больше заработает:
if(true) OpenBuy(); if(true) OpenSell();
Блеск!
вот эта конструкция и то больше заработает:
if(true) OpenBuy(); if(true) OpenSell();
Блеск!
Та не..
Вот это шедевр!:))
Ты знаешь, я тебе как программист скажу
"А вы поезжайте на форум метаквотесов и спросите - кто такой Паниковский!"
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Индикатор:
анализируется средний бар из 3х
(1) показывается значение максимальное Н из 3х + дельта
(2) показывается значение минимальное L из 3х - дельта
Тоесть своего рода усеченный фрактал.
Эксперт1:
заход Long по (1)
заход Short по (2)
реверсивная система с оптимизируемым параметром "дельта"
Эксперт2:
Эксперт1+трелинг
Заранее спасибо.