Jump to content
Sign in to follow this  
duxa666

Добавить переменные в код

Recommended Posts

duxa666

Всем привет!
Хотел поинтересоваться.
как прописать советник, чтобы торговал так :
1)запоминал баланс например в переменную "balance"

2) Рандомное открытие ордеров(на покупку или продажу) с первоначальным лотом,зависит в процентном отношении от баланса

3)выставление тейкпрофита и стоплоса на мин. значениях (по 5 или 10)

4)использовать  стратегию Метод Джонсона 
Код написан для imacros(расширения для браузера mozilla firefox),
Заключается в том, что имеем например 10 пар единиц.
ставим например лот 0,02(1+1)(берем первую и послед. 1)

при проигрыше добавляем в конец строки 2(0,02 лот)

а при выйгрыше вычеркиваем первую и последнюю цифры

и т.д. пока не вычеркнуться все цифры.
 

defaultBets = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
var bets = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
var betLimit = 2048;
var lossStopper = 8192;
var sessionLosses = 0;
var sessions = 999999;
var session = 0;
var consecutiveLosses = 0;
var months = ["Jan.","Feb.","Mar.","Apr.","May","Jun.","Jul.","Aug.","Sep.","Oct.","Nov.","Dec."]
var log = "";
var date = new Date();
var randomnumber=date.getMinutes()+"-"+date.getSeconds();

for (var s = 0; s < sessions; s++) {
	log += "----> Start session "+ (s+1) +" || Balance: "+window.document.getElementsByClassName("Numbers HighlightedText UserBalance")[0].innerHTML+" <----\n";
	log += "Session satarted at "+date.getDate()+"/"+months[date.getMonth()]+"/"+date.getFullYear()+" - "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds()+"\n\n";
	window.console.log("----> Start session "+ (s+1) +" || Balance: "+window.document.getElementsByClassName("Numbers HighlightedText UserBalance")[0].innerHTML+" <----");
	window.console.log("Session satarted at "+date.getDate()+"/"+months[date.getMonth()]+"/"+date.getFullYear()+" - "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds());
	window.console.log( );
	i = 0;
	
	if(bets.length == 0){
		for (var v = 0; v < defaultBets.length; v++) {
			bets[v] = defaultBets[v];
		}
		log += "Current bet sequence :"+defaultBets+"\n";
		window.console.log("Current bet sequence :"+defaultBets);
	}
	
	while ( bets.length > 0) {	
		var lastitem = bets[bets.length - 1];
		var firstitem = bets[0];
		var bet = Number(firstitem)+Number(lastitem);

		if(consecutiveLosses == 3){
			var numOfB = bets.length+1
			bValue = 0
			for (var j = 0; j < bets.length; j++) {
				bValue += bets[j];
			}
			
			for (var z = 0; z < numOfB; z++) {
				var singlebetval = bValue/(numOfB-z);
				var singlebetval = Math.ceil(singlebetval);
				bets[z] = singlebetval;
				bValue = bValue-singlebetval;
			}
		}
		
		stringValue = 0
		
		for (var w = 0; w < bets.length; w++) {
			stringValue += bets[w];
		}
		
		if (bet >= betLimit || lossStopper < sessionLosses){			
			log += "\n-----!! BET LIMIT REACHED !!-----\n";
			window.console.log( );
			window.console.log("-----!! BET LIMIT REACHED !!-----");
			var numOfBets = bets.length+2
			betsValue = 0
			for (var j = 0; j < bets.length; j++) {
					betsValue += bets[j];
			}
			bets.length = 0;
			for (var z = 0; z < numOfBets; z++) {
				var singlebetval = betsValue/(numOfBets-z);
				var singlebetval = Math.ceil(singlebetval);
				bets[z] = singlebetval;
				betsValue = betsValue-singlebetval;
			}
			log += "New bets sequence: "+bets+"\n";
			window.console.log("New bets sequence: "+bets);
			window.console.log( );
			if(sessionLosses >= lossStopper){
				bets.length = 0;
			}
		}else{			
			lastitem = bets[bets.length - 1];
			firstitem = bets[0];
			
			if(bets.length == 1){
				bet = bets[0];
			} 			
			else {
				bet = firstitem+lastitem;
			}
			
			log += ":: Safe Bet "+ (i+1) +" : "+(bet/40).toFixed(+"\n";
			window.console.log(":: Safe Bet "+ (i+1) +" : "+(bet/40).toFixed();
			log += "Bets string: "+bets.join(", ")+"\n";
			window.console.log("Bets string: "+bets.join(", "));
			window.document.getElementById("BetSizeInput").value = (bet/40).toFixed(;
			window.document.getElementById("BetChanceInput").value = "49.95";
			var macro1;
			macro1 =  "CODE:";
			
			if(consecutiveLosses >= 4){
				macro1 +=  "TAG POS=1 TYPE=SPAN ATTR=TXT:Bet<SP>Low&&CLASS:BetControlTitle" + "\n"; 			
			}
			else {
				macro1 +=  "TAG POS=1 TYPE=SPAN ATTR=TXT:Bet<SP>High&&CLASS:BetControlTitle" + "\n"; 
			}
			
			macro1 +=  "WAIT SECONDS=0.1" + "\n";
			iimPlay(macro1);
			var exctractLP = window.document.getElementById("LastBetInfoProfit").innerHTML.charAt(0);
			
			if(exctractLP == "-" ){
				sessionLosses += bet;
				consecutiveLosses++
				log += "Bet lost.\n\n";
				window.console.log("Bet lost.");
				window.console.log("Session loss: "+sessionLosses);
				window.console.log( );				
			}
			else {
				sessionLosses -= bet;
				consecutiveLosses = 0;
				log += "Bet Won!\n";
				window.console.log("Bet Won!");
				
				if(sessionLosses > 0){
					log += "Session losses: "+sessionLosses+"\n\n";
					window.console.log("Session losses: "+Math.abs(sessionLosses));
				}
				else {
					log += "Session profit: "+sessionLosses+"\n\n";
					window.console.log("Session profit: "+Math.abs(sessionLosses));
				}
				window.console.log( );				
			}
			var loss = bet;		
			
			if(exctractLP != "-"){
				bets.shift();
				bets.pop();  
				var loss = 0;
			}			
			else {			
				for (var y = 0; y < bets.length; y++) {	
					sum = 0;
					for (var k = 0; k < bets.length; k++) {
						sum += bets[k];
					}
					sum = sum+loss;
					lossperItem = Math.ceil(loss/(bets.length-y));			
					if(exctractLP == "-" && lossperItem > loss){
						var lossperItem = loss;
					}
						
					if(exctractLP == "-"){
						itemvalue = Math.min.apply(null,bets);
						newvalue = lossperItem+itemvalue;				
						itemNo = bets.indexOf(itemvalue);
						bets[itemNo] = newvalue;
						loss = loss-lossperItem;
						bets.sort(function(a, {return b-a}); 
					}
				}
			}
			i++
		}	
	}

	if(bets.length == 0){
		log += "\n----> End session "+ (s+1) +" || Balance: "+window.document.getElementsByClassName("Numbers HighlightedText UserBalance")[0].innerHTML+" <----\n";
		log += "Session ended at "+date.getDate()+"/"+months[date.getMonth()]+"/"+date.getFullYear()+" - "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds()+"\n\n";
		window.console.log( );
		window.console.log("----> End session "+ (s+1) +" || Balance: "+window.document.getElementsByClassName("Numbers HighlightedText UserBalance")[0].innerHTML+" <----");
		window.console.log("Session ended at "+date.getDate()+"/"+months[date.getMonth()]+"/"+date.getFullYear()+" - "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds());
		window.console.log( );
		window.console.log( );
		sessionLosses = 0;
	}
}

Буду признателен, кто сможет прописать такой советник

Share this post


Link to post
Share on other sites
Pysik

Всем привет!

Хотел поинтересоваться.

как прописать советник, чтобы торговал так :

1)запоминал баланс например в переменную "balance"

2) Рандомное открытие ордеров(на покупку или продажу) с первоначальным лотом,зависит в процентном отношении от баланса

3)выставление тейкпрофита и стоплоса на мин. значениях (по 5 или 10)

4)использовать  стратегию Метод Джонсона 

Код написан для imacros(расширения для браузера mozilla firefox),

Заключается в том, что имеем например 10 пар единиц.

ставим например лот 0,02(1+1)(берем первую и послед. 1)

при проигрыше добавляем в конец строки 2(0,02 лот)

а при выйгрыше вычеркиваем первую и последнюю цифры

и т.д. пока не вычеркнуться все цифры.

 

Почитал вспомнил, что-то похожее было, ... нашел, менять не стал, но очень похоже на то, что вам нужно, можете сами допилить на МТ4

 

1. есть

2. не random открытие, а при совпадении 3 (легко исправить на 2) баров в одну сторону.

3. TP SL выставляются через переменные и меняются в настройках

начальный лот задается вручную.

 

Работает так:

идут 3 бара вверх (например на 1 мин) открывается покупка, выставляется ТП и СЛ.

Идет закрытие по ПТ или СЛ. Баланс запоминаем перед сделкой, по окончанию сделки сравниваем текущий balance с сохраненным bal. 

Если Стоп, то к Lot + StepLot, если ТП то минусуем StepLot, есть контроль максимальной границы по шагам, и минимальной, что дает возможность запустить стартовый  лот например 0.05 и шагать по 0.01 до 0.1 и до 0.01.

Так же есть контроль спреда, очень актуально для коротких Stop. Если рыночный спрэд больше заданого, то новые сделки не будут открываться, и позволит не слить нажитое днем на ночном расхождении спрэда.

такое в общем...

Trend_v3_several.mq4

Edited by Pysik

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×