Adding comment to a position, then try to call that specific position by its comment to count its profit or loss and close it - page 2

 
king64:
Yes and it works fine! Thank you  @nicholi shen
But I have another problem I need to calculate more than one positions' profit with the same comment, I print the profit and it is printing 0 value repeatedly. 

For God's sake man, take some pride in your work. That indentation is pure cringe. Also, just like stackoverflow and any other site you'd use to talk programming, post code not screenshots of code!

 
nicholi shen:

The first check is redundant since the for loop will never enter if all is <= 0. Also, selecting a position by symbol and magic number is already built into CPositionInfo.  Finally, it is not necessary to use continue statements combined with not conditions. Since MT4 build 600 expressions stop being evaluated after it is evident that the if control statement will resolve to false, so you can just use one singe if statement. 

Example: 

  1. As you see, I even hesitated to exemplify standard libs functions implication, to not to raise more questions/confusion in his head. (So I didn't use C... stuff)
  2. I think the OP ,more than anything else, needs to learn how to tweak with others codes, change them, and see what each code line does. your suggested fine touches are for later.
  3. I Copy/Pasted that snipped from another EA, so of course he can edit it to match his needs. (example: use the process only if 10 or more positions are open...) so : if(all>10) makes sense there.
  4. I believe every question should be answered from the viewpoint of questioner, with a thinking/skills closer to his mind. of course it's his/her obligation to improve beyond that raw answers.
 
nicholi shen:

For God's sake man, take some pride in your work. That indentation is pure cringe. Also, just like stackoverflow and any other site you'd use to talk programming, post code not screenshots of code!


ok sorry, here it is.


double totalProfitCal(void){
   
 double totalPrf=0; 
    CPositionInfo pi;
        CTrade trade;

           ulong Magic=PositionGetInteger(POSITION_MAGIC);
           
               if (pi.SelectByMagic(_Symbol,Magic )&&pi.Comment() =="M0"&&pi.Profit()>=totalProfit)
                    totalPrf += pi.Profit();//+PositionGetDouble(POSITION_SWAP); //*********//commision is omited 
                        PrintFormat("PROFIT= %d",totalPrf);
  
      return totalPrf;

                           }
 
Code2219 or probably 2319:
  1. As you see, I even hesitated to exemplify standard libs functions implication, to not to raise more questions/confusion in his head. (So I didn't use C... stuff)
  2. I think the OP ,more than anything else, needs to learn how to tweak with others codes, change them, and see what each code line does. your suggested fine touches are for later.
  3. I Copy/Pasted that snipped from another EA, so of course he can edit it to match his needs. (example: use the process only if 10 or more positions are open...) so : if(all>10) makes sense there.
  4. I believe every question should be answered from the viewpoint of questioner, with a thinking/skills closer to his mind. of course it's his/her obligation to improve beyond that raw answers.
Hey thanks alot. That was very kind of you 

 
king64:


ok sorry, here it is.


Nice troll bro

 
nicholi shen:

Nice troll bro

👍☺️
 

solved!

thank you guys.


bool closeAllPositions(void)
{
  int i;
    
    for(i=0;i<CROSS_NUMBER;i++){
       int k =PositionSelectByTicket(baseTickets[i][0])-1;
       
    while(k>=0){
       if(!closeObj.PositionClose(PositionGetSymbol(k))){
          PrintFormat("Position Close Error = %d",GetLastError());
          return(false);   
       }else{
          k-- ;
       } 
          }
             }
                
         return(true);  
}
 

hey guys

I think I have the same problem with selecting more than one position among all positions with some specific properties like Comments, tickets or buy or sell. I use the code attached but it seems it doesn't work correctly. for selecting one position its ok but more than one position with the same identifiers it is showing wrong outcomes.

I want to select all buy positions which have "B1" comment with different Symbols (for example, EURUSD, GBPUSD and USDJPY) and calculate their profit.
//+------------------------------------------------------------------+
//|B1 profit calculator Function                                 |
//+------------------------------------------------------------------+
double B1profit(void){

  CPositionInfo pi;
  CTrade trade;
  double B1Prf=0;
  int i,j;
  for(i=0;i<CROSS_NUMBER;i++){
  for(j=0;j<MAX_LEVEL;j++){
  
  if(pi.SelectByTicket(baseTickets[i][j])&&pi.Comment()=="B1"&&pi.PositionType()==POSITION_TYPE_BUY){
     B1Prf += pi.Profit();//+PositionGetDouble(POSITION_SWAP); //*********//commision is omited 
  }
      }
          }
  return B1Prf;

}

//+------------------------------------------------------------------+
 
king64:

hey guys

I think I have the same problem with selecting more than one position among all positions with some specific properties like Comments, tickets or buy or sell. I use the code attached but it seems it doesn't work correctly. for selecting one position its ok but more than one position with the same identifiers it is showing wrong outcomes.

I want to select all buy positions which have "B1" comment with different Symbols (for example, EURUSD, GBPUSD and USDJPY) and calculate their profit.

Do you really seriously code like this? Please tell me you're trolling... you're trolling, right?

 
nicholi shen:

Do you really seriously code like this? Please tell me you're trolling... you're trolling, right?


I am a newbie, that's it! What's the problem in this code I really don't know. 😐🙁
Reason: