IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

'méthode', qui n'est pas valide dans le contexte donné [Débutant]


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2023
    Messages : 89
    Points : 75
    Points
    75
    Par défaut 'méthode', qui n'est pas valide dans le contexte donné
    Bonjour
    Je découvre C# et n ai jamais ecrit une ligne de code de ma vie à l exception pour MT4, une plateforme de trading. J ai changé de plateforme et découvert le C#. Alors s il vous plait soyez indulgent car je n utilise certainement pas la bonne terminologie.
    Avant de poster ici j'ai tout de même essayé de comprendre en cherchant sur le net et ne suis pas parvenu à comprendre en lisant https://learn.microsoft.com/fr-fr/do...tructs/methods

    Pour préciser j utilise (enfin je tente d utiliser ) une plateforme de trading qui s appelle NinjaTrader. On peut y développer des indicateurs avec C#. Ce que j essaye de faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Value[0] = TDUBuySellMomentum.MomentumShort[0](this,BarsPeriodType.Second,15,15,2,TDUBuySellMomentumDisplayType.CandleOutline,10,60,400,4);
    Cette ligne de code était censée récupérer la valeur de MomentumShort de l indicateur TDUBuySellMomentum pour la barre [0]. Les parametres entre parenthèse étant necessaires à l indicateur pour le calcul de MomentumShort .

    A la compilation j ai l erreur : TDUBuySellMomentum.MomentumShort[0](t.............. est un 'méthode', qui n'est pas valide dans le contexte donné.

    Je pense qu il est utile de vous communiquer le code de l indicateur que j appelle. ( j ai retiré tous les using pour plus de clareté)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    #region Using declarations
    ...
    #endregion
     
     
     
    #region NinjaScript generated code. Neither change nor remove.
     
    namespace NinjaTrader.NinjaScript.Indicators
    {
    	public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
    	{
     
    		private TDU.TDUBuySellMomentum[] cacheTDUBuySellMomentum;
     
     
    		public TDU.TDUBuySellMomentum TDUBuySellMomentum(BarsPeriodType momentumBarPeriodPeriodType, int momentumBarPeriodPeriodValue, int standardDeviationPeriod, double standardDeviationMultiplier, TDUBuySellMomentumDisplayType excessiveDisplayType, int excessivePeriod, double excessivePercentage, double imbalancePercentage, int stackedImbalanceBarCount)
    		{
    			return TDUBuySellMomentum(Input, momentumBarPeriodPeriodType, momentumBarPeriodPeriodValue, standardDeviationPeriod, standardDeviationMultiplier, excessiveDisplayType, excessivePeriod, excessivePercentage, imbalancePercentage, stackedImbalanceBarCount);
    		}
     
     
     
    		public TDU.TDUBuySellMomentum TDUBuySellMomentum(ISeries<double> input, BarsPeriodType momentumBarPeriodPeriodType, int momentumBarPeriodPeriodValue, int standardDeviationPeriod, double standardDeviationMultiplier, TDUBuySellMomentumDisplayType excessiveDisplayType, int excessivePeriod, double excessivePercentage, double imbalancePercentage, int stackedImbalanceBarCount)
    		{
    			if (cacheTDUBuySellMomentum != null)
    				for (int idx = 0; idx < cacheTDUBuySellMomentum.Length; idx++)
    					if (cacheTDUBuySellMomentum[idx].MomentumBarPeriodPeriodType == momentumBarPeriodPeriodType && cacheTDUBuySellMomentum[idx].MomentumBarPeriodPeriodValue == momentumBarPeriodPeriodValue && cacheTDUBuySellMomentum[idx].StandardDeviationPeriod == standardDeviationPeriod && cacheTDUBuySellMomentum[idx].StandardDeviationMultiplier == standardDeviationMultiplier && cacheTDUBuySellMomentum[idx].ExcessiveDisplayType == excessiveDisplayType && cacheTDUBuySellMomentum[idx].ExcessivePeriod == excessivePeriod && cacheTDUBuySellMomentum[idx].ExcessivePercentage == excessivePercentage && cacheTDUBuySellMomentum[idx].ImbalancePercentage == imbalancePercentage && cacheTDUBuySellMomentum[idx].StackedImbalanceBarCount == stackedImbalanceBarCount && cacheTDUBuySellMomentum[idx].EqualsInput(input))
    						return cacheTDUBuySellMomentum[idx];
    			return CacheIndicator<TDU.TDUBuySellMomentum>(new TDU.TDUBuySellMomentum(){ MomentumBarPeriodPeriodType = momentumBarPeriodPeriodType, MomentumBarPeriodPeriodValue = momentumBarPeriodPeriodValue, StandardDeviationPeriod = standardDeviationPeriod, StandardDeviationMultiplier = standardDeviationMultiplier, ExcessiveDisplayType = excessiveDisplayType, ExcessivePeriod = excessivePeriod, ExcessivePercentage = excessivePercentage, ImbalancePercentage = imbalancePercentage, StackedImbalanceBarCount = stackedImbalanceBarCount }, input, ref cacheTDUBuySellMomentum);
    		}
     
    	}
    }
     
    namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
    {
    	public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
    	{
     
    		public Indicators.TDU.TDUBuySellMomentum TDUBuySellMomentum(BarsPeriodType momentumBarPeriodPeriodType, int momentumBarPeriodPeriodValue, int standardDeviationPeriod, double standardDeviationMultiplier, TDUBuySellMomentumDisplayType excessiveDisplayType, int excessivePeriod, double excessivePercentage, double imbalancePercentage, int stackedImbalanceBarCount)
    		{
    			return indicator.TDUBuySellMomentum(Input, momentumBarPeriodPeriodType, momentumBarPeriodPeriodValue, standardDeviationPeriod, standardDeviationMultiplier, excessiveDisplayType, excessivePeriod, excessivePercentage, imbalancePercentage, stackedImbalanceBarCount);
    		}
     
     
     
    		public Indicators.TDU.TDUBuySellMomentum TDUBuySellMomentum(ISeries<double> input , BarsPeriodType momentumBarPeriodPeriodType, int momentumBarPeriodPeriodValue, int standardDeviationPeriod, double standardDeviationMultiplier, TDUBuySellMomentumDisplayType excessiveDisplayType, int excessivePeriod, double excessivePercentage, double imbalancePercentage, int stackedImbalanceBarCount)
    		{
    			return indicator.TDUBuySellMomentum(input, momentumBarPeriodPeriodType, momentumBarPeriodPeriodValue, standardDeviationPeriod, standardDeviationMultiplier, excessiveDisplayType, excessivePeriod, excessivePercentage, imbalancePercentage, stackedImbalanceBarCount);
    		}
     
    	}
    }
     
    namespace NinjaTrader.NinjaScript.Strategies
    {
    	public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
    	{
     
    		public Indicators.TDU.TDUBuySellMomentum TDUBuySellMomentum(BarsPeriodType momentumBarPeriodPeriodType, int momentumBarPeriodPeriodValue, int standardDeviationPeriod, double standardDeviationMultiplier, TDUBuySellMomentumDisplayType excessiveDisplayType, int excessivePeriod, double excessivePercentage, double imbalancePercentage, int stackedImbalanceBarCount)
    		{
    			return indicator.TDUBuySellMomentum(Input, momentumBarPeriodPeriodType, momentumBarPeriodPeriodValue, standardDeviationPeriod, standardDeviationMultiplier, excessiveDisplayType, excessivePeriod, excessivePercentage, imbalancePercentage, stackedImbalanceBarCount);
    		}
     
     
     
    		public Indicators.TDU.TDUBuySellMomentum TDUBuySellMomentum(ISeries<double> input , BarsPeriodType momentumBarPeriodPeriodType, int momentumBarPeriodPeriodValue, int standardDeviationPeriod, double standardDeviationMultiplier, TDUBuySellMomentumDisplayType excessiveDisplayType, int excessivePeriod, double excessivePercentage, double imbalancePercentage, int stackedImbalanceBarCount)
    		{
    			return indicator.TDUBuySellMomentum(input, momentumBarPeriodPeriodType, momentumBarPeriodPeriodValue, standardDeviationPeriod, standardDeviationMultiplier, excessiveDisplayType, excessivePeriod, excessivePercentage, imbalancePercentage, stackedImbalanceBarCount);
    		}
     
    	}
    }
     
    #endregion
    J aimerais comprendre cette erreur et surtout pouvoir la corriger car j ai beau y réfléchir, ma ligne de code certes incorrecte ma parait assez logique au regard de ce que j ai compris mais je l avoue encore, je n ai hélas pas compris grand chose...

    Merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 721
    Points : 5 366
    Points
    5 366
    Par défaut
    Citation Envoyé par DarwinTheBeagle Voir le message
    TDUBuySellMomentum.MomentumShort[0](t.............. est un 'méthode', qui n'est pas valide dans le contexte donné.
    C'est dommage, tu as masqué la seule partie de l'erreur qui nous donne une indication du problème...
    C'est quoi ce t ?
    Qu'est sensé contenir le tableau MomentumShort?

    En plus le code que tu montre, ne contient pas cette fameuse ligne.

  3. #3
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2023
    Messages : 89
    Points : 75
    Points
    75
    Par défaut
    Merci de te pencher sur mon pb.
    La ligne dans son intégralité est :
    TDUBuySellMomentum.MomentumShort[0](this,BarsPeriodType.Second,15,15,2,TDUBuySellMomentumDisplayType.CandleOutline,10,60,400,4); est un 'méthode', qui n'est pas valide dans le contexte donné.

    Concernant le tableau...
    Il s agit d une simple valeur, un double qui doit être retourné.
    Le tableau ici [0] correspond à la bougie/barre courante, [1] la précédente etc...

    TDUBuySellMomentum permet d extraire
    MomenumShort
    MomentumLong
    ExcessiveBuyVolume
    ExcessiveSellVolume
    DeltaDivergence
    DeltaPickachu
    Ce sont tous des doubles ou des integer

    Avant de poster ici j ai bien entendu pris contact avec le vendeur mais cette société me dit ne pas fournir de support, ni même des exemples d'utilisation.

    Concernant le code de la fonction j ai trouvé ça :
    Pour l appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    NinjaTrader.NinjaScript.Indicators.Indicator.TDUBuySellMomentum(
    NinjaTrader.Data.BarsPeriodType,
    int,
    int,
    double,
    TDUBuySellMomentumDisplayType,
    int,
    double,
    double,
    int)
    pour la déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      namespace NinjaTrader.NinjaScript.Indicators.TDU
    {
      public class TDUBuySellMomentum : Indicator
      {
     
      [Browsable(false)]
        [XmlIgnore]
        public Series<double> MomentumShort => ((NinjaScriptBase) this).Values[0];
     
        [Browsable(false)]
        [XmlIgnore]
        public Series<double> MomentumLong => ((NinjaScriptBase) this).Values[1];
    et ça ailleurs dans la dll

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    [MethodImpl(MethodImplOptions.NoInlining)]
        public NinjaTrader.NinjaScript.Indicators.TDU.TDUBuySellMomentum TDUBuySellMomentum(
          BarsPeriodType momentumBarPeriodPeriodType,
          int momentumBarPeriodPeriodValue,
          int standardDeviationPeriod,
          double standardDeviationMultiplier,
          TDUBuySellMomentumDisplayType excessiveDisplayType,
          int excessivePeriod,
          double excessivePercentage,
          double imbalancePercentage,
          int stackedImbalanceBarCount)
        {
          return (NinjaTrader.NinjaScript.Indicators.TDU.TDUBuySellMomentum) null;
        }
     
        [MethodImpl(MethodImplOptions.NoInlining)]
        public NinjaTrader.NinjaScript.Indicators.TDU.TDUBuySellMomentum TDUBuySellMomentum(
          ISeries<double> input,
          BarsPeriodType momentumBarPeriodPeriodType,
          int momentumBarPeriodPeriodValue,
          int standardDeviationPeriod,
          double standardDeviationMultiplier,
          TDUBuySellMomentumDisplayType excessiveDisplayType,
          int excessivePeriod,
          double excessivePercentage,
          double imbalancePercentage,
          int stackedImbalanceBarCount)
        {
          return (NinjaTrader.NinjaScript.Indicators.TDU.TDUBuySellMomentum) null;
        }
    merci

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 721
    Points : 5 366
    Points
    5 366
    Par défaut
    Comme, tu l'a toi même mentionné, MomentumShort est une collection de Double.
    Donc MomentumShort[0] représente un Double.

    La ligne de code incriminée utilise ce double comme s'il s'agissait d'une méthode.
    Cela revient à écrire 3.14(this, ...).

  5. #5
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2023
    Messages : 89
    Points : 75
    Points
    75
    Par défaut
    Je comprends tout à fait cela

    Mais ce que je ne comprends pas c est que puisque "this" represente la série, comment preciser que je veux récupérer la valeur à tel ou tel index.

    Je ne vois pas dans la déclaration de la fonction ou dans le reste du code, comment récupérer MomentumShort pour une barre donnée. C est pour cela que j ai tenté le [0] puisque en l occurrence c est la barre courante.

    Désolé mais mes souvenirs de programmation remontent au basic Amstrad


    Edit : comment peut on changer la couleur de fond du texte comme tu le fais dans tes messages ?

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 721
    Points : 5 366
    Points
    5 366
    Par défaut
    C'est là qu'est ton erreur.
    this ne représente pas la série du SellMomentum, mais l'objet dans lequel tu te trouves.

    Tu n'as pas fourni le code contenant la ligne qui ne compile mais pour expliquer ce à quoi correspond this, je vais partir sur un exemple simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    namespace Sample
    {
        public class Program
        {
            public static void Main()
            {
                Parent parent = new();
                parent.DoSomethingInParent();
            }
        }
     
        public class Parent
        {
            public void DoSomethingInParent()
            {
                Console.WriteLine(ObjectInfoReader.GiveNameInfo(this));
     
                Dummy foo = new();
                foo.DoSomethingInDummy();
            }
        }
     
     
        public class Dummy
        {
            public void DoSomethingInDummy()
            {
                Console.WriteLine(ObjectInfoReader.GiveNameInfo(this));
            }
        }
     
     
        public class ObjectInfoReader
        {
            public static String GiveNameInfo(Object something)
            {
                return $"Name : {something.GetType().Name}" + Environment.NewLine
                    + $"FullName : {something.GetType().FullName}" + Environment.NewLine
                    + $"Namespace :  {something.GetType().Namespace}";
            }
        }
    }
    Le programme principal créé un objet de type Parent et appelle sa méthode DoSomethingInParent.
    Dans la méthode DoSomethingInParent, this passé dans l'appel ObjectInfoReader.GiveNameInfo(this), est de type Parent.

    Dans cette même méthode, on créé un objet de type Dummy et appelle sa méthode DoSomethingInDummy.
    Dans la méthode DoSomethingInDummy, this passé dans l'appel ObjectInfoReader.GiveNameInfo(this), est de type Dummy.

    Ce code produit le retour suivant :
    Name : Parent
    FullName : Sample.Parent
    Namespace : Sample
    Name : Dummy
    FullName : Sample.Dummy
    Namespace : Sample

    Les séries sont dans la collection MomentumShort de l'objet TDUBuySellMomentum.
    Et pour accéder à une série par son indice, il suffit de le passer entre crochets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Double serie = MonInstance.MomentumShort[0];
    Pour mettre en évidence j'utilise les mets entre [ C ] et [ /C ] (sans les espaces)

  7. #7
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2023
    Messages : 89
    Points : 75
    Points
    75
    Par défaut
    Merci pour cette réponse.
    J'ai presque compris ;-) En tous les cas assez pour m etre commandé ça : https://www.amazon.fr/Apprendre-Prog.../dp/2409020569

    Mais dans l absolu j ai compris le fonctionnement tel que tu me l as expliqué alors un grand merci pour ta patience.

    Sinon, si des utilisateurs arrivent sur ce post et que comme moi il ont des difficultés à maitriser l emploi d un indicateur j ai la solution.
    Le Strategy Builder. Il fait tout tout seul et permet de comprendre bien des choses dans l emploi des indicateurs.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appeler une méthode qui n'est pas dans un controller
    Par leonhart77 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 02/03/2020, 15h56
  2. [Débutant] C# L'adresse demandée n'est pas valide dans son contexte
    Par Worldie dans le forum C#
    Réponses: 8
    Dernier message: 22/12/2018, 22h52
  3. [Débutant] Méthode n'est pas valide dans le contexte donné
    Par Blodsvept dans le forum C#
    Réponses: 9
    Dernier message: 23/06/2015, 09h48
  4. Réponses: 7
    Dernier message: 25/01/2012, 11h29
  5. OE ligature qui n'est pas reconnu dans ma JSP
    Par vain_mich dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 01/08/2008, 14h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo