Any questions from newcomers on MQL4 and MQL5, help and discussion on algorithms and codes - page 1371 1...136413651366136713681369137013711372137313741375137613771378...1965 New comment Сергей Дыбленко 2021.01.30 11:36 #13701 MakarFX:To the very bottom of the EA. Unfortunately it does not multiply!!!((( Tretyakov Rostyslav 2021.01.30 11:41 #13702 Сергей Дыбленко:Unfortunately it does not multiply!!!((( This function calculates the lot in relation to the free margin and the specified risk! What multiplication are you talking about? Сергей Дыбленко 2021.01.30 11:47 #13703 MakarFX:This function calculates the lot in relation to the free margin and the specified risk! What multiplication are you talking about? The increase in lots after each profit! Tretyakov Rostyslav 2021.01.30 11:52 #13704 Сергей Дыбленко:about increasing lots after each profit! This function will increase the lot after a profit, but if the profit allows an increase by the minimum lot increment [Deleted] 2021.01.30 11:54 #13705 Сергей Дыбленко:about increasing lots after each profit! here is an example up to 10 000 your balance will lot 0.1 from 10 000 to 20 000 with 0.5 lot from 20 000 to 40 000 with lot 1.0 over 40 000 with 2.0 lot //+------------------------------------------------------------------+ //| Moving Average.mq4 | //| Copyright 2005-2014, MetaQuotes Software Corp. | //| http://www.mql4.com | //+------------------------------------------------------------------+ #property copyright "2005-2014, MetaQuotes Software Corp." #property link "http://www.mql4.com" #property description "Moving Average sample expert advisor" #define MAGICMA 20131111 //--- Inputs input double InpLots =0.1; input int MovingPeriod =12; input int MovingShift =6; //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; //--- for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) { if(OrderType()==OP_BUY) buys++; if(OrderType()==OP_SELL) sells++; } } //--- return orders volume if(buys>0) return(buys); else return(-sells); } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double LotsOptimized() { double Lots=InpLots; double ab=AccountBalance(); if(ab>=10000 && ab<20000) Lots=0.5; if(ab>=20000 && ab<40000) Lots=1.0; if(ab>=40000) Lots=2.0; return(Lots); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { double ma; int res; //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); //--- sell conditions if(Open[1]>ma && Close[1]<ma) { res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red); return; } //--- buy conditions if(Open[1]<ma && Close[1]>ma) { res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue); return; } //--- } //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ void CheckForClose() { double ma; //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); //--- for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue; //--- check order type if(OrderType()==OP_BUY) { if(Open[1]>ma && Close[1]<ma) { if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White)) Print("OrderClose error ",GetLastError()); } break; } if(OrderType()==OP_SELL) { if(Open[1]<ma && Close[1]>ma) { if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White)) Print("OrderClose error ",GetLastError()); } break; } } //--- } //+------------------------------------------------------------------+ //| OnTick function | //+------------------------------------------------------------------+ void OnTick() { //--- check for history and trading if(Bars<100 || IsTradeAllowed()==false) return; //--- calculate open orders by current symbol if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); else CheckForClose(); //--- } //+------------------------------------------------------------------+ Tretyakov Rostyslav 2021.01.30 12:05 #13706 SanAlex:here is an example up to 10 000 your balance will lot 0.1 from 10 000 to 20 000 with 0.5 lot from 20 000 to 40 000 with 1.0 lot over 40 000 with 2.0 lot this is a fixed lot increment. for me, if the profit is greater than or equal to MarketInfo(Symbol(), MODE_MARGINREQUIRED)*MarketInfo(Symbol(), MODE_LOTSTEP) it will increase the lot, but if there are no other open orders that use margin. [Deleted] 2021.01.30 12:13 #13707 MakarFX:it is a fixed increase in the lot. In my case, if the profit is greater than or equal to then there will be an increase in the lot, but if there are no other open orders that use margin. I have cheated - if the position is in deficit it would increase the lot //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double OptimizedBuy(void) { double PROFIT_BUY=0.00; for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of open positions { if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol()==Symbol()) { if(OrderSymbol()==Symbol() && OrderType()==OP_BUY) { PROFIT_BUY=PROFIT_BUY+NormalizeDouble(OrderProfit(),2); } } } double Lots=InpLots; double ab=PROFIT_BUY; if(ab<-1 && ab>=-InpLots_01) Lots=InpLots1; if(ab<-InpLots_01 && ab>=-InpLots_02) Lots=InpLots2; if(ab<-InpLots_02 && ab>=-InpLots_03) Lots=InpLots3; if(ab<-InpLots_03) Lots=InpLots4; //--- return trading volume return(Lots); } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double OptimizedSell(void) { double PROFIT_SELL=0.00; for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of open positions { if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol()==Symbol()) { if(OrderSymbol()==Symbol() && OrderType()==OP_SELL) { PROFIT_SELL=PROFIT_SELL+NormalizeDouble(OrderProfit(),2); } } } double Lots=InpLots; double ab=PROFIT_SELL; if(ab<-1 && ab>=-InpLots_01) Lots=InpLots1; if(ab<-InpLots_01 && ab>=-InpLots_02) Lots=InpLots2; if(ab<-InpLots_02 && ab>=-InpLots_03) Lots=InpLots3; if(ab<-InpLots_03) Lots=InpLots4; //--- return trading volume return(Lots); } //+------------------------------------------------------------------+ Сергей Дыбленко 2021.01.30 12:32 #13708 Thank you all for your help BUT my brains which are not there were not enough to do what I needed! Tretyakov Rostyslav 2021.01.30 12:39 #13709 Сергей Дыбленко: Thank you all for your help BUT my brains are not enough to do what I need to do! You explain point by point what is needed. How many orders in the work, how many pairs you trade simultaneously, what are the risks per trade (if any) And something else from you) Tretyakov Rostyslav 2021.01.30 12:42 #13710 SanAlex:Here I was cheating - if positions are in deficit the lot would increase Sasha tweaked it a bit to increase the lot by the odds input double factor=1.05; // коофициент умножения //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double OptimizedSell(void) { double Lots =0.00; double PROFIT_BUY =0.00; double LOT_BUY =0.00; double PROFIT_SELL=0.00; double LOT_SELL =0.00; for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of open positions { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true) { if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { PROFIT_BUY=PROFIT_BUY+NormalizeDouble(OrderProfit(),2); LOT_BUY =LOT_BUY+NormalizeDouble(OrderLots(),2); } if(OrderType()==OP_SELL) { PROFIT_SELL=PROFIT_SELL+NormalizeDouble(OrderProfit(),2); LOT_SELL =LOT_SELL+NormalizeDouble(OrderLots(),2); } } } } if(PROFIT_BUY<0) Lots=LOT_BUY*factor; else Lots=LOT_BUY; if(PROFIT_SELL<0) Lots=LOT_SELL*factor; else Lots=LOT_SELL; //--- return trading volume return(Lots); } //+------------------------------------------------------------------+ 1...136413651366136713681369137013711372137313741375137613771378...1965 New comment
To the very bottom of the EA.
Unfortunately it does not multiply!!!(((
Unfortunately it does not multiply!!!(((
This function calculates the lot in relation to the free margin and the specified risk!
What multiplication are you talking about?
This function calculates the lot in relation to the free margin and the specified risk!
What multiplication are you talking about?
The increase in lots after each profit!
about increasing lots after each profit!
This function will increase the lot after a profit, but if the profit allows an increase by the minimum lot increment
about increasing lots after each profit!
here is an example up to 10 000 your balance will lot 0.1 from 10 000 to 20 000 with 0.5 lot
from 20 000 to 40 000 with lot 1.0 over 40 000 with 2.0 lot
here is an example up to 10 000 your balance will lot 0.1 from 10 000 to 20 000 with 0.5 lot
from 20 000 to 40 000 with 1.0 lot over 40 000 with 2.0 lot
this is a fixed lot increment.
for me, if the profit is greater than or equal to
it will increase the lot,
but if there are no other open orders that use margin.
it is a fixed increase in the lot.
In my case, if the profit is greater than or equal to
then there will be an increase in the lot,
but if there are no other open orders that use margin.
I have cheated - if the position is in deficit it would increase the lot
Thank you all for your help BUT my brains are not enough to do what I need to do!
You explain point by point what is needed.
How many orders in the work, how many pairs you trade simultaneously, what are the risks per trade (if any)
And something else from you)
Here I was cheating - if positions are in deficit the lot would increase
Sasha tweaked it a bit to increase the lot by the odds