Qui veut une stratégie ? Lots et gratuitement) - page 50

 

Il n'y a aucune différence entre "Journal par barres" et "Journal par poste". Ils ne font qu'afficher l'information de différentes manières.


*Un filtre de barres de données "filtre" le "Journal par position "*. On dirait qu'il n'y a pas d'entrée avant "Oldest 'm' bars". Le "Journal par barres" montre les barres car elles sont chargées dans le programme mais aucune transaction n'est exécutée dans les barres "les plus anciennes".


Le "filtre barres de données" et le "filtre date" sont exactement cela - des filtres. Ils sont utilisés pour autoriser (ou interdire) l'entrée sur le marché pendant l'intervalle spécifié. Cela ne change pas la logique de la stratégie.


Nous ne pouvons pas utiliser le "Filtre des barres de données" ou le "Filtre des dates" dans une case "Condition logique de clôture". Cela changerait la logique de sortie de la stratégie.

 
Miroslav_Popov писал(а) >>

Il n'y a aucune différence entre le "Journal par barres" et le "Journal par poste". Ils ne font qu'afficher l'information de différentes manières.

*Un filtre de barres de données "filtre" le "Journal par position "*. On dirait qu'il n'y a pas d'entrée avant "Oldest 'm' bars". Le "Journal par barres" montre les barres car elles sont chargées dans le programme mais aucune transaction n'est exécutée dans les barres "les plus anciennes".

Le "filtre barres de données" et le "filtre date" sont exactement cela - des filtres. Ils sont utilisés pour autoriser (ou interdire) l'entrée sur le marché pendant l'intervalle spécifié. Cela ne change pas la logique de la stratégie.

Nous ne pouvons pas utiliser le "Filtre des barres de données" ou le "Filtre des dates" dans une case "Condition logique de clôture". Cela changerait la logique de sortie de la stratégie.

J'ai très bien compris tout cela.

J'ai essayé d'utiliser ces "perversions" dans le but de

1) Pour limiter la section d'optimisation gauche et droite.

2. Pour voir le comportement de la stratégie après la sortie du plot d'optimisation.

3. Les courbes du graphique n'ont pas empêché de regarder la partie relativement réelle du graphique. (Point 1 - voir la section historique délimitée à gauche et à droite)

4. Tout en minimisant le nombre de pressions sur les boutons.

(Et en réalité, il est souvent nécessaire de "regarder" de plus près une partie de l'histoire. En même temps, l'ouverture d'une fenêtre séparée (graphique complet) "Balans/Equity Chart" n'est pas pratique).

Et tout cela jusqu'à ce qu' un bogue avec la case à cocher "Supprimer les données plus anciennes que" dans Data Horizont soit corrigé .

Attendons doncData Horizont ! !!!.

 

La première barre du magazine positionne ...1254. Ce qui, à mon avis, ne devrait pas changer.


Le générateur de stratégie Forex veut un minimum de 300 barres. Car c'est 1554- 300 = 1254

 
/// <summary>
/// Data Horizon - Cuts some data
/// </summary>
int DataHorizon()
{
	if (iBars < MINIMUMBARS) return 0;

	int  iTempBars     = iBars;
	int  iTempStartBar = 0;
	int  iTempEndBar   = iBars - 1;
	bool bChange       = false;

	// Set the maximum nuber of bars
	if (iBars > iMaxBars && iMaxBars >= MINIMUMBARS)
	{   // We need to cut out the oldest bars
		iTempBars     = iMaxBars;
		iTempStartBar = iBars - iMaxBars;
		bChange       = true;
	}
	

	// Set the starting date
	DateTime dtStartingDate = new DateTime( iStartYear, iStartMonth, iStartDay);
	if ( bUseStartDate && aBar[ iTempStartBar].Time < dtStartingDate)
	{   // We need to cut out the oldest bars
		for (int iBar = iTempStartBar; iBar < iTempBars - MINIMUMBARS; iBar++)
		{
			if ( aBar[ iBar].Time >= dtStartingDate)
			{
				iTempStartBar = iBar;
				iTempBars     = iTempEndBar - iTempStartBar + 1;
				bChange       = true;
				break;
			}
		}
	}

	// Set the end date
	DateTime dtEndingDate   = new DateTime( iEndYear, iEndMonth, iEndDay);
	if ( bUseEndDate && aBar[ iTempEndBar].Time > dtEndingDate)
	{   // We need to cut out the newest bars
		for (int iBar = iTempStartBar + MINIMUMBARS; iBar < iTempEndBar; iBar++)
		{
			if ( aBar[ iBar].Time >= dtEndingDate)
			{
				iTempEndBar = iBar - 1;
				iTempBars   = iTempEndBar - iTempStartBar + 1;
				bChange     = true;
				break;
			}
		}
	}

	// Cut the data
	if ( bChange)
	{
		Bar[] aBarCopy = new Bar[iBars];
		aBar. CopyTo( aBarCopy, 0);

		aBar = new Bar[ iTempBars];
		for (int iBar = iTempStartBar; iBar <= iTempEndBar; iBar++)
			aBar[ iBar - iTempStartBar] = aBarCopy[ iBar];

		iBars  = iTempBars;
		dtTime = aBar[ iTempBars - 1].Time;
		bCut   = true;
	}

	return 0;
}

MINIMUMBARS = 300

iMaxBars - Ce que nous avons défini dans "Data Horizon".

 

:( Je ne peux pas afficher le code correctement. Il supprime les tabulations de tête.

 
Miroslav_Popov писал(а) >>

// Set the starting date
DateTime dtStartingDate = new DateTime(iStartYear, iStartMonth, iStartDay);
if (bUseStartDate && aBar[iTempStartBar].Time < dtStartingDate)
{ // We need to cut out the oldest bars
for (int iBar = iTempStartBar; iBar < iTempBars - MINIMUMBARS; iBar++)
{
if (aBar[iBar].Time >= dtStartingDate)
{
iTempStartBar = iBar;
iTempBars = iTempEndBar - iTempStartBar + 1;
bChange = true;
break;
}
}
}

c'est-à-dire (vous devez utiliser Ctrl+Alt+M, pas le formatage du texte)

if ( bUseStartDate && aBar[ iTempStartBar].Time < dtStartingDate)
{ // We need to cut out the oldest bars
 for (int iBar = iTempStartBar; iBar < iTempBars - MINIMUMBARS; iBar++)
 {
  if ( aBar[ iBar].Time >= dtStartingDate)
  {
   iTempStartBar = iBar;
   iTempBars = iTempEndBar - iTempStartBar + 1;
   bChange = true;
   break;
  }
 }
}

mais où d'autre pour le premier si?

Ou bien vous voulez

if (bUseStartDate && aBar[iTempStartBar].Time < dtStartingDate)
 iTempStartBar = Какая_там_функция_пересчета_времени_в_бары(dtStartingDate)

De même pour la "date de fin".

 

**Où d'autre pour le premier si?

On coupe les données quand :

1. La case à cocher est cochée : bUseStartDate == true

2. la date sélectionnée est postérieure (plus récente) au début de nos données historiques : aBar[iTempStartBar].Time < dtStartingDate


Dans le cas contraire, il n'y a tout simplement pas de coupe.


-------

Edit :

Vous ne pouvez pas supprimer les dates antérieures au 30 septembre 2008. En effet, si vous les supprimez, il restera moins de 300 barres. (graphique quotidien)


for (int iBar = iTempStartBar ; iBar < iTempBars - MINIMUMBARS; iBar++)

 
Miroslav_Popov писал(а) >>

** où est l'autre pour le premier si? **

Oui. En vitesse, je suis désolé. :(

Il s'avère que pour la génération de la stratégie sur H4, je ne peux pas utiliser une période inférieure à 2,5 mois (300/6=50jours - week-end sans barres ~ 2,5. mois) n'est pas critique, mais aussi l'intervalle de vérification de la stratégie (OOS) doit commencer au plus tard à 2.5 mois avant la date actuelle (ce n'est pas pratique, car je doute que la stratégie ajustée vive aussi longtemps, et il est plus intéressant de voir "comment la stratégie optimisée avant-hier se comporterait aujourd'hui"), ou soustraire la "section de chevauchement", ou ... Ajouter des barres vides au fichier (en espérant que le temps de l'ordinateur ne soit pas coché).

:)

Résumé - Je fixe toujours le nombre maximal de barres (pour éviter les blocages de génération), et je fixe les intervalles d'optimisation/vérification par dates.

 

. добавлять пустые бары в файл (надеюсь, что время компьютера не проверяется)


Il les attrapera. Retirez la coche "Marché" - "Vérifier les données".

 
voltair >> :

Et quelles sont les données nécessaires pour choisir correctement ? Sur quoi devez-vous enquêter ?

Par exemple... comment la stratégie se comporte dans différents types de marchés, et maintenant... J'ai souvent rencontré une année de bénéfices sur 2, et la vidange du dernier mois et la tendance persiste.